PHP Conference 2023 に参加してきた
株式会社カンリーでバックエンドエンジニアをしています、小泉です。
入社してから弊社のメインプロダクトであるカンリーの開発をしてきましたが、7月からフクリーというプロダクト開発に携わっています。
フクリーは地図のUIをベースにした、クーポンメディアです。サービスを導入している企業の従業員は、現在地周辺で限定クーポンが使えるお店を探し、様々なサービスを安価で利用することができます。
開発しているプロダクトは変わったと言えど、言語は変わらずPHPを使っています。
そこで今回、10月9日に大田区産業プラザPiOで行われたPHPカンファレンスにオフラインで初参加してきました。
セッションで学んだことや、その所感、また「オンラインではなくオフラインに参加するべき!」と思ったのでその理由を説明できればと思います。
参加したきっかけ
まず、PHPカンファレンスに参加することになったきっかけは、社内のメンバーに誘われたからです。
カンファレンスと聞くと、つよつよエンジニアたちが集まるイベントで、敷居が高い気がしていたため一人で乗り込むのには怖気付いていました。それにアーカイブ配信があるので、それを見ようと思っていました。
ですが、複数人での参加なら怖くない!!ということで、乗り込んできました。
行く前には業務をこなす上で疑問に感じていることがありました。
具体的には
単体テストは導入したけど、本当にこの書き方で本来やりたかったことがカバーできているか?今後プロダクトの機能拡大に耐えられるテスト運用であるか?
レビュー速度をより上げ、レビュアーの負担をなるべく減らすことができる仕組みはないか?
定義したタイプヒントから脱していたら、レビュアーに指摘される前にレビュイーが気付けるようにしたい
などです。
「こんなこと感じているのは自分の性格が影響しているのかな〜」と考えて他の人に伝える必要性を感じていませんでした。
ですが、PHPカンファレンス2023のセッションを聞いて
「みんなが直面している問題なのかもしれない」
ということを知ることができたのはとても大きな収穫だったと思います。
参加したセッション
ではここからはわたしが聞いたセッションと、ポイントだと思ったことを書いていきます。
数百億の大規模リクエストを捌く広告配信を支える技術と、Generative AIとの新たな一歩
Generative AIの事業への活用と、業務効率化の二つの観点からの取り組みを説明されていました。
特に業務効率化では、生産性向上を目的に全エンジニアにGitHub Copilotの導入をしている。3ヶ月後もほとんどのエンジニアが導入しているとのことです。
カンリーでも先月Copilotの勉強会があり、その後わたしもコードの補完や自分の書いたコードのリファクタリング提案をしてもらっています。
良いテストとは何か:持続可能で保守性の高いテストを書く by 当田 昇
単体テストを早期に行う利点として「ドキュメンテーションとなっていく」点が挙げられていたのが印象的でした。(資料)
フクリーの開発フェーズ的に、「単体テストを書く時間を新機能の開発に使った方がいいのでは?」という意見がありました。結果的には単体テストを導入しましたが、テストメソッドをtest○○○(メソッド名)_テスト内容と結果を日本語で書くと決めたため、テストメソッド名を見るとコードを読み解く前にテスト内容をある程度つかむことができるようになっています。
今後はより 開発→レビュー→リリース のサイクルを速めるためにCIによるテスト自動化を急ぎたいところです。
Webアプリケーションのパフォーマンス・チューニングの勘所 by 曽根 壮大
パフォーマンスの改善はなにからはじめるべきなのか、どういう情報を取得するべきか、という話でした。
以下、覚えておきたい言葉です。
日頃から記録し、それらを整理、比較する。
常に記録していないとそれが正常なのか異常なのか判断できない。(毎日体重計に乗るのが大切なのと一緒!)
DBのデッドロックを減らすのは難しい。タイムアウトを短くしてアプリケーション側でリトライするのが吉
そもそも不要な仕様ではないか検討する
「みんながやってるから必要でしょ!」は信頼しない
キャッシュは麻薬
使わなくて済むなら使わない
エラー時に考えることが増える
使う場合は最小限にし、元のデータを参照する
スケーラブルサービス――疎結合に成長するシステムに不可欠な要素 by 成瀬 允宣
システムと開発力のスケーリングのお話でした。
ユースケースを用いて1つずつ課題を解決しながら理想のスケーラブルシステムへと向かっていくような内容になっていました。
イベントソーシングやメッセージブローカなどがなぜ必要なのかを紐解きながらのお話されていました。
圧倒的ボリュームですべて吸収しきれていないので見直したいセッションです。
リーダブル プルリクエスト (分割プルリクエスト編) by @suzuki
レビューをする人が理解しやすいと感じるために、PRを分割すること、分割の単位を紹介されていました。
特に発表者の鈴木さんは、作業する前に「全体像を考えてから作り始める」ことが何よりも大切だとし、UML図を用いてMAPを作成してから分割作業を行う、とのことでした。
MAPを作成するとPR作成時に「このPRではMAPのこの範囲を実装しています〜」ということが可視化できるのでレビューする側の負担は確かに減少すると思いました。
安全にPHPでWebアプリ開発するために実践していること by 篠田 北斗
PHPでWebアプリを作る際にどのような仕組みにしたら追加実装や変更変更を安心安全に行えるか、が紹介されていました。
テストをさらに堅牢化するテスト戦略を立てる
自動テストの理想的なバランスを示す「テストピラミッド」の形となるようにする
テストカバレッジの隙間を静的解析でカバーする
レビュワーの負担も減る
MTTR(Mean Time To Repair/平均修復時間)を縮めるトラッキングツールの導入
エラーが起きたらSlack通知を飛ばすようにするのは必須
リアルタイム性に意味がある
業務時間外に通知が鳴ったらどうするか決めておく
フクリーでは未だ大規模な障害は起こっていませんが、業務時間外の通知に関しては先んじてチームメンバーと話し合って資料化しておきたいと思いました。
運用中の大規模オンラインゲームで8年ぶりにPHPバージョンアップをした話 by 福田 陽介
PHP5.5 から PHP8.1へバージョンアップした際の開発方針、どうやって移行したか、遭遇したトラブルが挙げられていました。
なるべく差分を少なくバージョンアップリリースする工夫として、前バージョンでも動作するものは事前リリースする
独立しているバッチ処理やPHPUnitのメソッドなど、優先度の低いものは一旦後回しにした
特にユニットテストのおかげでデバッグ時のバグが抑えられたということで、私も日々の機能開発でめんどくさがらずきちんと押さえていこうと思いました。
オンライン参加でも良くない?と思ったあなた
ここまでの内容を振り返ると、「オンラインで参加できるじゃん」という意見が聞こえてきそうです。
たしかに資料はネットに上がっているし、2023/10/24日現在ではまだですが後にアーカイブ配信もアップされるとのことなので、セッション内容はオンラインで見ることができます。
しかし、わたしはオフラインでの参加をおすすめしたいです。
まず、1Fの大セッションスペースの横に、協賛企業さんたちがブースを出していて、いろんな人と直接会話することができました。
話しかけにくい。。。
と思われるかもしれませんが、運営の方々がスタンラリーを仕掛けてくださっており、各ブースに行くとスタンプが押してもらえるようになっています。
「スタンプ押してください〜」と近づいて行きましょう
ブースでくじ引きイベントや自社プロダクトのデモ体験を準備してくださっているので自然と会話が進みます。
プロダクトの今後の展開を教えていただいたり、PHPのここが嫌!といった話をしたり、自社自慢をノートに書いたり….と技術の話から会社の文化の話までしました。
PHPerに会えたのもとても嬉しかったです。
最近は「React、Go書いてます!」「Next.js使ってます!」という人はいても、「PHP、Laravel使ってます!」という人にはあまり会わなくなっている気がしていたからです。
年齢層は20代〜60代ぐらいのような印象で、9割以上男性だったと思います。女性エンジニアとしては、社内社外問わず女性が増えてほしいばかりです。
まとめ
敷居が高くて参加しにくいと思っていましたが、実際はそんなことは全然ありませんでした。
むしろ、自分の最近の悩みや考えていたことはみんな抱えていることだと知り安心しました。それと同時に、聞いたことない単語もあってこれからの開発に取り入れられるようキャッチアップしていきたいと思えるものもありました。
また、オフラインで参加することによって技術に関する知見を得るだけでなく、他社のプロダクトや文化を直に触れることができ、普段の業務をこなすだけではなかなかできないであろう、「一つ広い視野」から自分の現在地を見つめ直すきっかけとなりました。
受動的でなく能動的に参加していくことにより、参加体験も全く異なるものになると改めて感じたので、来年のカンファレンスでは、手を上げて質問することを目標にしたいと思います!