PHP Conference Japan 2024に行ってきました。 PHP Conferenceは初参加です。
トラック1とトラック2は配信があったので、それ以外のトラックを主に見て回りました。 見たセッションはテスト系の話が多く、参考になりました。
PHPの今とこれから2024 by 廣川 類
- PHPは1995年の登場からwebの進化とともに成長してきた
- 今年は日本人がたくさん開発に参加した年
- EOLバージョンの対応
- ディストリビューションがメンテ
- Remiバックポート(非公式)
- 8.4の新機能
- JITの改善
- 中間表現を使用
- プロパティアクセスフック
- 非対称プロパティ可視性
- 遅延オブジェクト
- Lazyゴースト、プロキシの2種類ある
- HTML5対応、DOM対応改善
- HTML5はすでに廃止された など
- JITの改善
- FRANKENPHP
- PHPは進化し続けることが必要
良いテストコードを書くためのガイドライン〜作成から運用まで〜 by rikuto
- 開発者が行う自動テスト
- なぜテストするのか
- バグを早い段階で検出する
- 良いテスト
- 実装の詳細ではなく振る舞いをテストする
- ふるまいのテスト
- 得られた値が想定通りかのテスト
- 実装の詳細のテスト
- モックを利用したテスト
- 関数内での呼び出しを確認するのみ
- 仕様の変更に追従できない
- 関数内での呼び出しを確認するのみ
- モックを利用したテスト
- ふるまいのテストをできるコードにする意
- 実装の詳細を公開すると、ふるまいをテストしにくい
- ふるまいだけを公開する
- 実装の詳細を公開すると、ふるまいをテストしにくい
- モックの利用は最小限にする
- 自分たちの管理街にあるもの
- 外部APIなど
- 自分たちの管理街にあるもの
- どこにどんなテストを書けばよいのか
- テストレベル
- 単体<統合<E2E
- 下位レベルのテストで担保しているものは高レベルでは省略できる
- テストレベル
- ガイドラインの作成
- 本のコピー、抜粋ではなく現場の例で具体的に
- ルールを厳しくしすぎない
- 重要度別に優先度を設定
- 作って終わりにしてはいけない
- 定着するところまでする
PSR-15 はあなたのためのものではない? by やまゆ
RequestHandlerInterface
PHP-FIG
- Laravelなど入っていない
- Symfony/Laravelは後方互換性を重要視したため
- Laravelなど入っていない
PSRs
PHPの本来の役割を抽象化したものがPSR
PSR-15はドメインロジックとは関係ない
- HTTPの外側
- FWやLibraryのためのもの
- だが準拠したFWは意外と少ない
- FWやLibraryのためのもの
- HTTPの外側
PHPUnitでモックとスタブを使いこなす by asumikam
テストコード
- 作者の意図を俯瞰して理解しやすくする
単体テスト
- ユニットが対象
- 実行時間が短い
- 本物を使うと遅くなる
- 隔離された状態で実行
- 本物を使うと隔離できない?
テストダブル(モック、スタブ)にする対象
- 依存
- プロパティ
- 引数
モックとスタブの使い分け
- モック
- 模倣+検証
- モック
スタブ
- 模倣のみ
- 副作用がない処理
- 重要度で判断
- 模倣のみ
テストコードでif文があるならテストを分ける
テストコード書いてみませんか? by おのぽん
テストコードを書く理由
- エンジニアの心理的安全性を担保するため
phpunit用のコンテナを分ける
保守しやすいテストコード
- テストコード内で分岐は避ける
- 可読性が下がる
- テストを分ける
- テストコード内で分岐は避ける
プロダクトの寿命を延ばすためにエンジニアが考えるべきこと 〜バージョンアップってなんのためにやるのか〜 by 牧 良摩
PHPやLaravelのバージョンアップ
なんのためにやるのか
- セキュリティサポートが切れたもの
- 攻撃される要因となる
- 開発効率が悪い
- 競合に競争力で負ける
- エンジニアのモチベーション低下
- セキュリティサポートが切れたもの
カオナビでは
- バージョンアップチームがいる
- 移行ガイド確認
- Composerパッケージ確認
- ツールを使った互換性チェック
- コード修正
- バージョンアップチームがいる
プロダクト開発で取り組むべきこと
- テストを書く
- 必要のないコードは消す
- コードの影響範囲を分かりやすくする
- 移行ガイドを読む
- 非推奨な書き方をしない
- 修正できるところは修正する
誰のためにやるのか
- サービスにかかわるすべての人のため
Laravel 11 へアップグレード、15分 で終わるのか!? by 勝佐拓也
migration
config
ハッシュ
10時間かかった
EC2からECSへ:念願のコンテナ移行と巨大レガシーPHPアプリケーションの再構築 by 江口 純矢
ローカルと本番で差分が生じやすい
リリースにかかる時間が長い
コンテナ化の必要性は認識しながら数年放置
イメージ共通化のためにしたこと
- 環境依存をイメージから追い出す
- 環境依存をコンテナ起動時に取得する
- SecretsManager
本番リリースにかかる時間
- 14分→4分
apache eventは負荷試験でエラーが出ることがあった
- fastcgi moduleを採用
公開前の動作カウ人
- ALBにOIDCでの認証を入れた
移行
- Route53ではなくALBで加重設定をする
Blue/Greenデプロイは制約が多い