今年もPHP Conference Japan 2023の季節がやってきました。
PHP Conference Japanは2000年から続き、24回目の開催とのことです。
私的ベスト登壇
今年のPHPカンファレンスは6トラック同時進行という聖徳太子もびっくりのカンファレンスで、1日で53トークもあったようです。(多すぎ!)
私が拝聴できた登壇の中で、特に書き留めておきたい登壇をピックアップしてご紹介します。(長いと誰も見てくれないので……激選3つ!!)
Webアプリケーションのパフォーマンス・チューニングの勘所
カンファレンスでおなじみそーだいさんの発表です。
発表が極めて分かりやすいので、個人的に覚えておきたい部分だけ挙げます。
- 推測するな、計測せよ。
- 記録する。(普段からCPU使用率が6割なのかデプロイ後に6割になったのかなど、常に記録していないとそれが正常なのか異常なのかすら分からない)
- スロークエリはログでわかるが、N+1系は統計情報から推測するしか無い
- DBのデッドロックはタイムアウトを短くしてアプリケーション側でリトライが良い
- キャッシュは麻薬、使わなくて済むなら使わないほうが良い
- キャッシュを使う場合は最小限かつ元のデータから取ること
運用中の大規模オンラインゲームで8年ぶりにPHPバージョンアップをした話
プロ驚き屋になってもいいレベルの偉業なのですが、淡々とPHP5.5.13からPHP8.1へアップグレードしたことが紹介されていました。
- 期間は半年
- 同時並行で機能追加も行う
- 1000~7000リクエスト/秒のゲーム向けバックエンド
- PHP5.5.13→PHP8.1
のような難易度がめちゃくちゃ高い要件をクリアされたとのことでした。
取り組み方としては
- count関数の対応やexpectedExtentionの廃止など事前にできるものは事前にリリース(最終的に修正箇所の50%は事前リリース済みとなった)
- PHP8.1用のブランチを作って、機能追加時はPHP5.5.13を使うメインのブランチとPHP8.1用のブランチの両方に入れる
- バージョンアップ時はサーバーのエンドポイントを分けることで対処
のような形で、
- バージョンアップのための修正の67%はテストコードの修正
- PHPUnitのバージョンアップのほうがPHP本体のバージョンアップより大変
だったようです。
またバージョンを上げたことで
- バージョンアップ起因のバグはなし
- レスポンス速度42%改善
- テスト速度50%改善
とのことでした。
レスポンス速度が早くなりすぎてタイムアウトのテストがうまく動かなくなったという話は笑ってしまいました。
またどの程度変わったか、どの程度変更したかが数値で示されていて、きちんとデータが取られていると感じ敬服でした。
私も資料を作るときはきちんと数値で示せる人間になりたいです。
私は過去にPHPのパッチバージョンのバージョンアップだけで本番環境を破壊したことがあります。
バージョンアップ対応はとても大変です。まとめてやらざるをえず、周囲にバージョンアップの大切さの理解も必要で、さらに暗黙的な型変換の挙動変更や依存するライブラリの挙動変更など問題の発見自体も難しいです。
この登壇を聞いて、ちょっとしたバージョンアップに苦しむ自分が小さく感じられて、聞いてよかったなって思いました。
(LTでも「これから始める!ニ段飛ばしのPHPバージョンアッププロジェクト戦略」にてPHP5系かPHP8系へのアップグレード事例が紹介されてて、こちらも興味深かいです)
commitを積むとは「物語を書く」ことである
自分自身、gitのコミットメッセージと内容は気をつけよう(dotfilesなど文脈不要なものは除く)と心がけていたため、とても共感できる内容でした。
(いろいろなリポジトリでコミットメッセージやブランチが整っているといいチームだって感じたりします。)
発表によるとコミットで大事なのは
- 不要な文脈を削る
- WHYやWHATを伝える
- テストコードはそれぞれのcommitに入れる
で、例えば「fix 考慮漏れ」でなく「fix XXがYYの時判定されないので修正」とするといった具合です。
まさにそうで、コードの文脈が分からない時にgit blameで出てきたコミット名でコードの意図が分かれば、コードの意図を当時の開発者に聞く必要もなくなり、みんな幸せになれます。
またレビュー受けての修正コミットを「[review-fix] 変数名揃える」のようにするというアイデアは個人的に初耳で、取り入れようと思いました。
キレイなコミットを積んでいくことで、プルリクエスト時に物語としてレビュワーに伝えることができます。もちろん最初から全てできるわけではないので、rebaseで整える形です。ちなみにPhpStormではrebaseが簡単にできるらしいですよ。
コミットは書き手と読み手が繋がる部分で、コミットを積むとは「物語を書く」ことであると言うことでした。国語の作者の気持ちを答えなさいと同じです。
ちなみにPHP製で有名なフレームワークLaravelはwipコミットがたくさんありますが……
スタンプラリーとブース
今年のPHPカンファレンスは1日の開催にも関わらずスポンサー企業53社という大規模なイベントでした。
スポンサーブースは37社あり、スタンプラリーではこの全ブースを巡ってスタンプを集めました。最初はちょっとだけ埋めようとおもっていたのですが、気持ちが乗って(豪華景品に目が眩んで)全ブース制覇してしまいました。いろいろな企業の話も聞けて、スタンプラリー文化良いですね……
感想としては、いろいろな需要が社会にはあって、いろいろな人が解決しているんだという小学生の社会科見学みたいな感想になってしまいました。でも本当に、社会ニーズもドメインも様々で、社会ってすごいなと感じています。
次のカンファレンス
エンディングでは次のカンファレンスの案内も行われました。
- 2023/1 PHPカンファレンス北海道 2024
- 2023/2 PHPカンファレンス関西 2024
- 2023/3 PHPerKaigi 2024
- 2023/4 PHPカンファレンス小田原 2024
- 2023/5 PHPカンファレンス香川 2024
- 未定 PHPカンファレンス福岡 2024
といった具合です。PHPコミュニティ盛り上がりすぎていません……???
世はまさに大PHP時代!
おわり
KEYNOTEでもありましたが、PHP is deadは毎年言われている言葉です。
ですがそれとは裏腹にPHPコミュニティはどんどん盛り上がっているように感じます。(外部の評判と当事者間であまりにも乖離がありすぎます……)
今年のPHPカンファレンスはスタッフだけでも92人で、参加人数は900人を超えています。
学生の私の戯言ですが、PHPはコミュニティが成熟しているだけでなく、カンファレンスの登壇内容も成熟していると感じます。RubyVMやJVMをPHPで実装するといった技術的挑戦や、アーキテクチャやパフォーマンスの改善、技術的負債の解消といった実プロダクト運用上の知見など、他の言語に負けないくらい最高に面白くてつよい世界が形成されていると感じました。
来年から就職で、就職先はPHPを使わない企業なので、この世界から距離が離れる事実に少し物寂しさすらあるほどです。