今年もPHP Conference Japanに行きました!!

今年もPHP Conference 2023(ぺちこん)に参加しました!!

今年もPHP Conference Japanに行きました!!

今年もPHP Conference Japan 2023の季節がやってきました。
PHP Conference Japanは2000年から続き、24回目の開催とのことです。

私的ベスト登壇

今年のPHPカンファレンスは6トラック同時進行という聖徳太子もびっくりのカンファレンスで、1日で53トークもあったようです。(多すぎ!)

私が拝聴できた登壇の中で、特に書き留めておきたい登壇をピックアップしてご紹介します。(長いと誰も見てくれないので……激選3つ!!)

Webアプリケーションのパフォーマンス・チューニングの勘所

Webアプリケーションのパフォーマンス・チューニングの勘所
Webアプリケーションは生き物です。作って終わりではなく、日々運用を行っていかなければいけません。しかし、日々成長するWebアプリケーションは突然パフォーマンスが問題になり、サービス障害を生み出します。 そこで今日はシンプルなLAMP環境で動くようなWerbアプリケーションのパフォーマンス・チューニングの勘所についてご紹介します。 # 話すこと- MySQLやPostgreSQLのスロークエリの見方と対応方法- プロファイラの使い方や計測の仕方- キャッシュの種類と選び方と使い方 # 対象者- 大規模ではなく、レンタルサーバーやシンプルなLAMPやLAPPの環境の人- PH…

カンファレンスでおなじみそーだいさんの発表です。

発表が極めて分かりやすいので、個人的に覚えておきたい部分だけ挙げます。

  • 推測するな、計測せよ。
  • 記録する。(普段からCPU使用率が6割なのかデプロイ後に6割になったのかなど、常に記録していないとそれが正常なのか異常なのかすら分からない)
  • スロークエリはログでわかるが、N+1系は統計情報から推測するしか無い
  • DBのデッドロックはタイムアウトを短くしてアプリケーション側でリトライが良い
  • キャッシュは麻薬、使わなくて済むなら使わないほうが良い
  • キャッシュを使う場合は最小限かつ元のデータから取ること

運用中の大規模オンラインゲームで8年ぶりにPHPバージョンアップをした話

運用中の大規模オンラインゲームで8年ぶりにPHPバージョンアップをした話
常に機能追加が続く運用中の大規模オンラインゲームプロジェクトで、PHPを5.5から8.1にバージョンアップしました。言語バージョンアップに伴い、PHPUnitも4.5から10に更新しました。 今回のバージョンアップについて、以下のポイントで話したいと思っています。- バージョンアップの計画と結果(平均レスポンスタイムが42%短縮)- PHPのバージョンアップでPHP_CodeSnifferをベースにして修正箇所を特定していった話や、そこで起こった問題へ対応- PHPUnit10にバージョンアップする際、代替手段なしに削除されたメソッドへの対応など- PHP5.5とPHP8.1を並行…

プロ驚き屋になってもいいレベルの偉業なのですが、淡々と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を積むとは「物語を書く」ことである

commitを積むとは「物語を書く」ことである
PHPカンファレンス2024LT発表

自分自身、gitのコミットメッセージと内容は気をつけよう(dotfilesなど文脈不要なものは除く)と心がけていたため、とても共感できる内容でした。
(いろいろなリポジトリでコミットメッセージやブランチが整っているといいチームだって感じたりします。)

発表によるとコミットで大事なのは

  • 不要な文脈を削る
  • WHYやWHATを伝える
  • テストコードはそれぞれのcommitに入れる

で、例えば「fix 考慮漏れ」でなく「fix XXがYYの時判定されないので修正」とするといった具合です。
まさにそうで、コードの文脈が分からない時にgit blameで出てきたコミット名でコードの意図が分かれば、コードの意図を当時の開発者に聞く必要もなくなり、みんな幸せになれます。

またレビュー受けての修正コミットを「[review-fix] 変数名揃える」のようにするというアイデアは個人的に初耳で、取り入れようと思いました。

キレイなコミットを積んでいくことで、プルリクエスト時に物語としてレビュワーに伝えることができます。もちろん最初から全てできるわけではないので、rebaseで整える形です。ちなみにPhpStormではrebaseが簡単にできるらしいですよ。

コミットは書き手と読み手が繋がる部分で、コミットを積むとは「物語を書く」ことであると言うことでした。国語の作者の気持ちを答えなさいと同じです。

ちなみにPHP製で有名なフレームワークLaravelはwipコミットがたくさんありますが……

Laravel のメインブランチの中に存在している “wip” コミットを洗い出してみた - Qiita
背景Laravel には,「コミットメッセージ書くのめんどくせぇ!全部 wip でいいわ」という信仰に従って(?),メインブランチにも堂々と 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を使わない企業なので、この世界から距離が離れる事実に少し物寂しさすらあるほどです。