Page 1
n 年塩漬けされていたプロジェクトを
8.2移行するときにやったこと
Migrate a PHP project that has been neglected for several years to 8.2.
pixiv Inc.
USAMI Kenta
2023-11-29 PHP勉強会@東京 #phpstudy
公開日:
by USAMI Kenta@tadsan
に東京都渋谷区のJPR千駄ヶ谷ビル5Fで開催された『第158回 PHP勉強会@東京』でライトニングトーク(5分)として発表しました。
2023-11-29 PHP勉強会@東京 #phpstudy
お前誰よ
PHP 8.3リリースされましたね🎉
みなさまが愛したPHP7.xは全てEOL
社内のプロダクトは全て8.2移行済み
その前にPHPバージョンアップの定石おさらい
開発を止めずにバージョン更新する
開発メンバーには互換性を維持して開発してもらう
というわけで無事にPHP 8.2化🎉
ContestCMS
モノレポで運用しているが、歴史的経緯により合流せずに存続している
塩漬けにしていたのはほかならぬ私です😇
10年前のプロジェクト
ここが辛い
年季の入った放置プロジェクトあるある
まるで配慮していないのでひたすら警告が出まくる
嘆いても仕方ないので直す
0. 通らないなりにPHPStanを入れる
PHPStanの導入
その都度baselineを再生成して変な差分が出ていないかチェックする
シェル風の "${var}" と "{$var}" が両方使えた
2. インターフェイスの非互換
SessionHandlerInterface::gc(int $max_lifetime): int|false
PHP 8.1の非互換変更 (その2)
刺さらない
ここで手間暇かけて両バージョン対応を諦める(社内サービスなので)
3. PHPUnitのバージョンを上げる
PHPUnit 9.5
4. Smartyのアップデート
定義だったときに func($var) に置き換えられたが、4.0から非互換に
5.その他パッケージのアップデート
composer install時に書き換えられる
composer-patches用のパッチを簡単に作れるのでおすすめ
composer require --devしないように注意
5. E_WARNINGを潰す
E_WARNING
PHP 8からE_WARNINGに昇格した
エラーハンドラのカスタマイズ
だらだらとエラーログに流し続けない(フィルタできるようにする)
PHP7.xからの移行は最後は地道なもぐら叩き
本番環境も活用しながら完全は求めず安全に移行しような
