はじめに
2023年6月23日、福岡の博多でPHPカンファレンス福岡2023が開催されました。
社内福利厚生の一つである「カンファレンス参加支援制度」を利用し、弊社からは2名の23卒エンジニアが参加しました。
今回は参加メンバーによるイベントの体験記や、それぞれが興味を持ったセッションなどについて紹介したいと思います。
PHPカンファレンスについて
PHPカンファレンスは、2000年より始まった国内最大のPHPのイベントです。
さまざまな地域やコミュニティから集まった有志のPHPユーザーによって、全国各地で開催されています。
PHPカンファレンス福岡の開催は新型コロナウィルス流行の影響で永らく見送られており、今回は実に4年ぶりの開催とのことでした。
トークセッションのメインテーマはPHPですが、タイムテーブルからも分かる通り、他のプログラミング言語にも通じる設計・テストの話や、組織改善やエンジニアリングについてなど、PHP以外の幅広い話が聞けることも特徴的でした。
https://fortee.jp/phpconfukuoka-2023/timetable
当日の様子
会場受付では、参加者全員にさまざまなアメニティとTシャツが配布されていました。
https://twitter.com/phpcon_fukuoka/status/1672402172900950016?s=20
参加者同士のコミュニケーションを円滑化するため、Tシャツは以下のような色分けがされていました。
- スタッフ:ピンク
- 登壇者:オレンジ
- スポンサー:緑
- 参加者(PHPer):紫
以下、当日の様子が伺えるTwitterのハッシュタグです。
セッション中の会場内の空気など、なんとなく雰囲気が感じ取れるかと思います。
- カンファレンス全体 #phpconfuk
- Fusicホール #phpconfuk #hall_fu
- VAddyホール #phpconfuk #hall_va
- Dホール #phpconfuk #hall_d
レポート:大坂
セッショントーク
「伝えたい!オフラインのカンファレンスに参加するメリットと参加してから200%楽しむために実践してほしいこと by ことみん」
https://fortee.jp/phpconfukuoka-2023/proposal/89740c79-2aca-440d-94e2-f227de3a6eb4
ことみん(@kotomin_m)さんは、オフラインのカンファレンスのトークを最大限楽しむコツについてお話されていました。
当日聞くセッションの選び方や、スピーカーへの話しかけ方、参加者同士で話題にしやすい鉄板フレーズ集などが紹介されていました。
最初にこのセッションを聞けたおかげで、参加者同士での交流や、スピーカーの方に話しかける際の心理的ハードルが下がったのではないかと思います。
「この出会いを今日で終わりにしないために、コミュニティに継続して参加することも大切」というメッセージがとても心に残っています。
「DOMのテストがどんどん書きたくなる Testing Library の世界への招待 by lacolaco」
https://fortee.jp/phpconfukuoka-2023/proposal/f76b0650-3c31-4e45-9d44-0152d975ff56
さまざまなフレームワークでのUIのテスト環境を提供する『Testing Library』の紹介でした。
Angular日本ユーザー会の代表をされていて、JavaScript Primerの著者の一人であるlacolaco(@laco2net)さんは、就活中に僕がWebフロントエンジニアを志すきっかけとなった方でした。
また、僕自身学生時代にインターンでフロントエンドのテストで頭を悩ませた経験があったため、とても楽しみにしていたトークセッションの一つでした。
Testing Libraryを使ったテストコードを書くことで、HTMLセマンティクスやWAI-ARIAを意識することになるため、副産物的にアクセシビリティが高まる利点が紹介されていました。
テストで得られる安心と、テストにかかるコストのトレードオフを前提とした上で、「なぜUIのテストは書かれないのか」から、「UIのテストのパフォーマンスを高めるためには、ユーザーに可能なことだけでテストする」という点にフォーカスしてTesting Libraryの設計原則が紹介されており、業務内外問わずTesting Libraryを使ってみたくなりました。
「LaravelからTypeScriptコードを自動生成して効率良く型安全なフロントエンド開発を目指す by Urata Daiki」
https://fortee.jp/phpconfukuoka-2023/proposal/cbd51e69-bfd3-4b77-94f0-277c8c0514b5
Laravel BreezeにTypeScriptサポートが追加されるなど、LaravelにおいてTypeScriptを導入したフロントエンド開発需要が高まっている背景を受け、Urata Daiki(@daiki7nohe)さんは、LaravelのModelからTypeScriptの型などを生成できるライブラリを自作されたそうです。
また、こちらも同じくUrata Daiki(@daiki7nohe)さんが開発された、ZodでバリデーションができるInertia + Vueのフォームヘルパーライブラリです。
Laravel(PHP)で効率良く型安全なフロントエンド開発を行うため、自らライブラリを自作されたというお話は技術的にも非常に刺激的でした。
フリースタイル登壇
Dホールでは有志がスライドを持ち込み、一人当たり5分〜30分程度の自由な登壇形式でLTが行われていました。
メインホールのセッションも魅力的でしたが、即興感のあるフリースタイルLTも非常に面白く、しばらくLTに聴き入っていました。
https://twitter.com/phpcon_fukuoka/status/1672443477714669568
登壇者の方々が#phpconfuk #hall_d でスライドを公開しているので、興味のある方はぜひ当時の様子をご覧いただければと思います。
ここでは、いくつかのLTの感想をご紹介したいと思います。
「失敗から学ぶ技術的負債との正しい歩き方 by soudai」
リリース手順書を作っても、作業内容が増えるたびに手順書のメンテナンスが必要になってしまいます。その結果、リリース方法をできるだけ変更したくない、という力学が働きやすくなり、無駄な議論や間接的な作業が増えてしまう......というジレンマがあります。
ソフトウェアの継続的なメンテナンスと向き合う際に大切にしたいのは、「問題にフォーカスし、その上で問題を技術で解決する」ことであり、このような「当たり前」を積み重ねていった先に、ソフトウェアとの共存があるのだ、というお話でした。
「howだけを考えると仕事が増える。whyを考えて仕事を減らすのが大事」という言葉がとても心に残っています。
「伝えたい!社内のエンジニアにカンファレンスに参加する楽しさを! by asumikam」
カンファレンスは初見参加者にとってハードルが高くなりがちです。
「自分には理解できないんじゃないか......」「自分の発表なんて興味を持ってもらえないんじゃないか......」といった心理が働いてしまうためかもしれません。
asumikamさんはカンファレンス参加のハードルを下げてもらうために、社内で手作りご飯を振る舞いつつ、カンファレンスの発表を見る会を主催されたそうです。
楽しそうな様子がLTからも伝わってきて、とても素敵な取り組みだと思いました。
「Symfony UX Autocompleteとかいう顧客が本当に必要だったもの by たつきち」
たつきちさんは、Symfony UX Autocompleteというツールについて、使い方とデモの実演を交えて紹介をされていました。
Sysmfony UXは、PHPしか書かずにJavaScriptのライブラリを導入・設定できる便利なPHPライブラリ群であり、Autocompleteはその中のコンポーネントの一つです。
EntityTypeやChoiceType、あるいは生の<select>タグについて、選択肢をインクリメンタル検索できたり、非同期で必要な分だけ取得できたりするため、エンティティのレコード数が大量でも気にしなくていい(EntityTypeに存在するN+1問題をあえて許容するという戦略がとれる)といった非常に強力な利点があるそうです。
Symfony UX Autocompleteについて詳しく知りたい方向けに、たつきちさんが書かれていた記事があったため紹介させていただきます。
「OrbStackを布教したい by tyamahori.」
tyamahoriさんによる「OrbStack」のご紹介でした。
MacでのDocker環境あるあるとして、マシンリソースがかかって重たくなってしまう、というのはよくある現象かと思います。(僕もよくあります......)
OrbStackはDocker Desktop for Macの代替ツールであり、Docker Desktopなどより軽量、高速にDockerや仮想マシンを作成できるそうです。
2023/6/23時点で、
・Public Beta版が無料(正式公開後は8ドル/月で有料化予定、非商用での個人利用は無料)
・日本語版は非対応
で提供されているようです。
「北海道駆動開発のススメ by tomio」
tomioさんは北海道を中心とする各地方のITコミュニティや技術系カンファレンスの盛り上げに貢献されていて、普段から地図の縮尺感覚にバグが起きそうなほど軽やかに道内各地の勉強会を横断されている(参考:「北海道、徒歩圏内」)力強い方です。
本LTでも、道内各地の美味しいもの・開発合宿におすすめの温泉旅館トークから、来年度に開催が決まった「PHPカンファレンス北海道2024」の紹介をされていました。
tomioさんは勉強会やカンファレンスなどのコミュニティにおける、エンジニアや開発に関わる人同士が結びつく場(きっかけが持てず、摘まれてしまいそうな芽がのびのびと育てる場づくり)を大切にされていて、スライドで紹介されていた「純粋な興味と熱量を猛烈に焚き付けることこそが人を伸ばす」という言葉は、僕自身とても素敵だな、と感じるフレーズでした。
「ビーチ駆動開発のススメ by 鈴木孝之」
BDD(ビーチ駆動開発)を以下のように定義し、実際にやってみてどうだったか(海辺での開発は捗るのか?)をお話するという、躍動感あふれる内容のLTでした。
「プログラム開発手法の一種で、プログラムに必要な各機能について、最初にビーチに行き、動作する必要最低限な実装をとりあえず行った後、海に入る。」という短い工程を繰り返すスタイルである。」
会場内から笑いとツッコミが絶えず、とてもほっこりした気持ちになったLTでした。
PHPカンファレンス沖縄2023が今年3月に開催されるとのことなので、BDDを実践するチャンスかもしれません。
「RustみたいなSerialize/Deserialize by りうむ」
PHP8以上では、アノテーションに相当する言語機能としてAttributeというものが使えるため、これを活用したCrell/Serdeというライブラリを使えば、RustのserdeでSerialize/Deserializeを実装した型を作るのと同等のことができる、というお話でした。
僕もRustが好きなので、とても興味深い内容のLTでした。こういった別の言語と絡めたお話が聞けるのも、PHPカンファレンスの素敵なところだと感じます。
また、こちらのLTは23卒の方がされていて、そういった面でも力強いモチベーションをもらえました。
LT
Fusicホール最後のセッションは9名によるLT(ライトニングトーク/各5分)でした。
ここでは、その中のLTをいくつかご紹介します。
「その説明、コードコメントに書く?コミットメッセージに書く?プルリクエストに書く? by Shohei Okada」
https://fortee.jp/phpconfukuoka-2023/proposal/ae71f3a7-4c3c-4c87-8816-8426bcc8d325
コードで表現できないことを説明したいとき、それを書く場所はコードコメント、コミットメッセージ、プルリクエストといくつもの選択肢があります。
僕自身、コードコメントに何をどこまで書くべきか?で悩む場面が多々あります。
本トークでは、コードコメントvs.コミットメッセージ、コードコメントvs.プルリクエストという切り口からそれぞれの役割を比較した上で、「誰が」「いつ」読むのかを考えると、「どんな情報を書けば良いのか」が分かってくるというお話をされており、非常に勉強になりました。
「HTMLの複雑な仕様を忘れるためのMarkuplint by ゆうてん」
https://fortee.jp/phpconfukuoka-2023/proposal/8448787d-2176-4e13-9212-6fd84f11cd0e
ゆうてん(@cloud10designs)さんが自ら開発されたHTMLリンター『Markuplint』の紹介と導入方法が紹介されていました。
WAI-ARIAとHTMLのマークアップはエンジニアが覚えておくべき重要な技術仕様ですが、HTMLの仕様は想像以上に複雑です。
『Markuplint』を用いることで、このようなHTMLの複雑な仕様にとらわれず、より品質の高いWeb開発を行うことができそうです。
僕自身、過去にHTMLメールなどで仕様に悩まされたことがあったため、このようなHTMLリンターの存在はとてもありがたく、ぜひ導入していきたいです。
Ask the speaker & スポンサーブース
https://twitter.com/phpcon_fukuoka/status/1672429556693880832?s=20
会場内Cホールでは、登壇後のスピーカーの方に自由に質問ができる場が提供されていたり、スポンサー企業の方が紹介ブースを開かれたりしていました。
ここでスピーカーの方とお話したり、Pixiv(@pixiv @pixiv_corp)さんのブースでクイズに参加したり、サムライズム(@Samuraism)さんのブースでGitHub Enterpriseの特製Tシャツをいただいたりしました。
https://twitter.com/phpcon_fukuoka/status/1672449634026004480?s=20
https://twitter.com/phpcon_fukuoka/status/1672476881655070720?s=20
懇親会
セッション終了後は、会場内で立食形式での懇親会が行われました。
懇親会ではシルバースポンサーのpixivさんなど、他社の23卒エンジニアの方とも交流ができて、非常に良い刺激を受けることができました。
感想
PHPカンファレンスは今回が初参加でしたが、一日を通して非常に良い体験ができました。
運営に関わるPHPerの皆様の愛と熱意が伝わってくる、とても素敵なカンファレンスでした。
セッションの内容はもちろん、会場の廊下や懇親会では人と人との繋がりが生まれやすく、オフラインならではの良さが凝縮されていたと感じます。
初めましての方はもちろん、Twitterで繋がっていた方や過去のカンファレンスで知り合った方と会うことができたり、学生時代の知人経由で新たな繋がりが生まれたりと、多くの縁を育むことができました。
PHPカンファレンスは、次回は沖縄(2023年9月16日)と北海道(2024年1月12日、13日)での開催が予定されているそうです。
https://twitter.com/kanbo0605/status/1672530014389297152
https://twitter.com/yamato_sorariku/status/1670035943523516418
もっと力をつけて、次はスピーカーやスタッフとしても参加してみたいです!
レポート:渡辺
セッショントーク
「育成力 - エンジニアの才能を引き出す環境とチューターの立ち回り - by 岡嵜 雄平」
概要
本カンファレンスのスポンサーであるFusicの岡嵜(@Y_uuu)さんによる、育成力をテーマにしたセッションでした。今回はその中でも特に「新人研修」「メンターの立ち回り」について詳しくお話しされていました。
まず新人研修について、Fusicでは業務で必要な技術を2~6カ月かけて取り組み、最終的に社内システムの開発に取り組むようでした。この社内システムの開発は新人研修のラスボス的存在とされ、実際の受託案件さながらのふわっとしたお題が提示されるようです。ここでお客様役の社員と対話しながら「本当に求めているもの」を引き出し、どう具体化するか考え、実際に作り説明するといった一連の流れを踏むことにより、実戦に強いエンジニアが育つとお話しされていました。
また、チーム内から1人以上チューターがアサインされサポートをする仕組みになっていました。ゴールを教えるのではなく、進め方をサポートする役割です。ポイントとしては5つあり、
- 最初に研修のゴールや狙いを示す
- 理解度を測る課題を設ける
- 課題解決に頼れる社員を仲介する
- コミュニケーションできる場をたくさん用意する
- 本人の「やりたい」を尊重する
というものが挙げられていました。
感想
自分も「この課題を解決するにはどうしたらいいだろう」「どうやったら上手くいくか」ということを意識したときに大きく成長したため、共感できる内容でした。
個人的にチューターの立ち回りでは5つ目の「本人のやりたいを尊重する」がとても刺さりました。結局本人の興味のあるところが伸びるということなので、タスクや課題を押し付けるより「やりたいこと」「興味のありそうなこと」を一緒に見つけてあげられたらなと思います。執筆現在新卒4カ月目の自分には気が早いかもしれませんが(笑)
「脆弱性もバグ、だからテストしよう!と唱えて8年が経ちました by cakephper市川」
概要
本カンファレンスのスポンサーであるVAddyの市川(@cakephper)さんによる、脆弱性診断ツールVAddyの略歴と紹介のセッションでした。
VAddyは、立ち上げから8年の脆弱性診断SaaSです。ローンチしてから最初の3年は国外マーケットに注力していましたが、うまくスケールせず撤退の危機に瀕してしまいました(売れなさすぎてバイトの方が稼げるとまで…)。そこでターゲットを国内に変更し、顧客に寄り添うためにサインアップ数のKPIを廃止するなど使いやすさ重視に舵を切ったところ、売り上げが向上し、多くの企業に使われるツールとなったそうです!
感想
数字だけを追い求める(KPIに従う)だけでなく、顧客に寄り添うことは重要だと学びました。定量的に測れる指標にすがりたくなるのはエンジニアの性ですが、それだけではないのだと言い聞かせながら開発していきたいです。
また、3年同じ方針でやってきた後に大きく舵を切れる柔軟性も重要だと感じました。
「Laravel x Inertia.js『現代のモノリス方式』によるお手軽SPA開発 by tutida」
概要
tutida(@_tutida_)さんによるLaravelとInertia.jsを組み合わせたSPA開発についてのセッションでした。
最近顧客がWebアプリに求める”普通”のUI/UXレベルが上がっておりSPA構築の機会が増えている中で、バックエンドとフロントエンドを分割するとAPIスキーマの管理が必要であったり、開発スピードの初速が遅かったりといった課題が存在しました。
そんな中今回紹介されたinertia.jsは、バックエンドとフロントエンドをあえて密結合(モノリス)にすることのできるプラグインです。バックエンドにはLaravelやRails、フロントエンドにはVue.jsやReact、Svelte.jsなどが選べます。近年開発において密結合は解消するべきといった流れがありますが、MVPのようにスピーディーに動くアプリケーションを作る際などに有用であるとお話しされていました。
感想
”あえて”モノリスにするという考えは逆転の発想で目から鱗でした。その分拡張性やAPIスキーマによるモックが無いなどデメリットはありますが、「密結合だからよくない」と頭ごなしに否定せず、必要な場に必要なだけ使えるようにしたいと感じました。
「良いプロダクト作りのための組織育成 健全なコードは健全な組織、健全なチームから by zoe」
概要
池添誠(@for__3)さんによる良いプロダクトのための組織育成についてのセッションでした。
組織は急に良くなるものではなく、個人の育成が組織の育成につながるという背景のもとでお話しされていました。
特に被育成者の認知特性や性格に合わせたフィードバックやコミュニケーションを行うことがモチベーションを引き出すのに重要であるとしていました。ここではFFS(Five Factors & Stress)理論やソーシャルスタイル理論が挙げられていました。
また、組織の育成という面では成長と成果(質とスピード)がトレードオフであるとお話しされていました。具体的にプロダクトの品質を支えるために必要な「メンバーの成長」と成長のために必要な「フィードバックや学習の時間」が秤にかけられており、どちらかが偏った場合に健全で無い組織になってしまうとお話しされていました。
感想
今まで人に性格や得意な認知特性があること自体は知っていましたが、育成をする場面でそれを考えることがなかったためとても勉強になりました。来年は自分も育成側に回るので、意識していけたらと思いました。現状組織のスコープでプロダクトを見ることはないですが、視座を高く持つことは重要なため大きな刺激になりました。
「制約の力: 可能性を狭めるアプローチ by 新原雅司」
概要
新原雅司さん(@shin1x1)によるセッションでした。
変数に入る値を制御することで想定外の動作を防ぐという内容をお話しされていました。
ある関数にint型を想定したnumberという引数があったときに100のような数字や10 + 100のような式を渡せば想定通り動作しますが、’abc’ + 100といった文字列を渡してしまうとエラーになってしまいます。
これは動かしてみるまで分からず、業務で用いるような複雑に依存し合うプログラムでは不安定さを招いてしまいます。
このような課題に対してPHPでは状況に応じてdocコメントやif文での判定、型宣言を行うなどの方法で制約をつけることができます。
これらの制約により値の状態を限定することで、不要な状態を考慮する必要がなくなり、結果として簡潔にコードを表現することができるとお話しされていました。
感想
PHPの場合は動的型付けのため制約の付け方が難しいと感じました。
個人的にTypeScriptを多く使うためなんとなく型定義は重要なのだと感じてはいましたが、その具体的な重要性を知ることができたのは大きな学びになりました。
「ソフトウェア設計がプロジェクト管理にどのように影響を与えるか by きんじょうひでき」
概要
きんじょうひでき(@o0h_)さんによる、ソフトウェア設計の重要性や作る上でのマインドについてのセッションでした。
そもそもソフトウェア開発において、「要求は曖昧で仕様は変わるので難しい」としマインドセットを「全ては変わる、それだけが不変」というものに入れ替えることで、「捨てやすく」「変えやすい」コードを書くことができるというお話しをされていました。
変えやすいコードを書くために、「意思決定をギリギリまで遅らせる」「漸進的にコードを書く」という戦略があります。
具体的にはドメインを抽象化し詳細を分離することで「DBに何を選ぶかなどの詳細の実装を後回しにする」「タスクの順序を入れ替えやすくなる」といった効果が得られるようです。
感想
ソフトウェア開発における変化への対応について、個人的になかなか実践することができず変更が難しいソフトウェアを作り続けてきてしまいました。今回のセッションを通じ「全ては変わる、それだけが不変」というマインドに切り替えることで、変化に対して強いソフトウェアの開発に繋げられると感じました。
LT
「ChatGPTで簡単!余興に使えるAWSサーバーレスアプリ開発入門 by 吉野雅耶」
概要
先日結婚式を挙げた吉野(@ayasamind)さんが余興に使うアプリをChatGPT(GPT-4)とAWSサーバレスアーキテクチャを用いて余興アプリを開発したというLTでした。
アイデア出しから技術要件の提案、サーバレスフレームワークのyamlやLambdaのコードまでほぼ全ての工程でChatGPTにお任せすることで最低限の労力で必要なアプリケーション(今回は余興用のリアルタイム写真共有アプリ)を開発することができていました。
感想
全ての工程やコードをコピペで済ませることはまだできないようでしたが、今回のような比較的小さい規模のアプリやMVPであればほぼ労力をかけずに開発ができるようでとても衝撃を受けました。個人的に小さい規模のアプリケーションを開発することが多いので、こういったツールをうまく使ってみたいと感じました。
「月に一度の大規模リファクタリングでレガシーコードと向き合う取り組み by meihei」
概要
meihei(@app1e_s)さんによる定期的なリファクタリングの取り組みについてのLTでした。
PR TIMESでは現在月1回、レガシーコードに向き合うためにリファクタリングを行う日(リファクタリングデー)を設けているようです。
チケットを影響範囲と優先度ごとに分け、影響度と優先度が高いものを優先的にリリースすることで意味のある日にする工夫がありました。
また、リファクタリングは挙動が変わっていないことを保証することが重要であるため、確認作業としてSTG環境と本番環境で自動テストやE2Eテスト、手動テストなどを駆使して動作の保証を行っているようです。
しかし、失敗する時は失敗するので切り戻せる仕組みや雰囲気が重要であるともお話しされていました。
感想
個人的にとても素敵な取り組みだと感じました。多くの場合リファクタリングは、しようしようと思ってチケットを切ったものの、日々のタスクに埋まりいつしか忘れ去られる運命にありがちだと感じていました。定期的なイベントとして存在しているだけで、やるぞといった意識が高まり結果として良いプロダクトを維持し続けられるのではと良い刺激を得られました。
懇親会
懇親会では、カンファレンス参加者やスポンサーの方々と食事をしながら交流をしました。特に他社の23卒エンジニアと多く関わることができ、自社・他社問わずさまざまな話をし、多くの刺激を得られました!こういった経験は大きいカンファレンスならではと思うと同時に今後も積極的に参加したいなと感じました。
感想
全体を通してとても学びが多く、モチベーションアップに繋がる有意義なカンファレンスでした。
カンファレンス自体初参加だったのですが、PHPや開発にまつわる技術、組織の成長論などさまざまなセッションがあり、多くの刺激を受けることができました。
また、知人があまりおらずアウェイな環境だと思っていましたが、一つの縁から連鎖的に縁が生まれ、結果的に新しい繋がりが生まれるなど繋がりを多く感じました。
新卒としてまだ入社して2カ月であるにもかかわらず、会社の制度をフル活用することができたこともうれしく思います。これからも会社の支援制度を活かしながら自身の成長を目指していきたいです!