はじめに
PHP案件のバージョンアップを行う機会がありましたので、進め方を紹介します。 表題の通り、PHP7.4から8.2へのアップデートでした。
バージョンアップに向けた心構え
システムの規模に比例してバージョンアップのインパクトも大きくなっていきます。
バージョンアップを行うことで今まで動いていたコードが動かなくなることがあり、この動かなくなる部分 = バージョンアップ向けの改修 がどの程度発生するかの規模感を知るところから始めます。
(闇雲にバージョンアップ作業から始めてもスケジュールを立てられず、苦しいです)
大体は何かしら動かなくなる部分が出てきてしまい、バージョンアップ用の修正が必要となります。
バージョンアップ時の注意点を以下にまとめます。
- 関数の振る舞いが変わる、廃止される等、互換性がなくなりソースの修正が必要になることがある
- オフィシャルの変更点一覧など、一通り確認しておくと良い
- (複数回のメジャーバージョンアップが必要な場合、バージョンアップよりも最新バージョンをベースに作り直したほうがトータルで安くつくこともある)
- ライブラリもPHPの新しいバージョンに合わせて更新
- 依存関係の問題で使えなくなる場合もある
- ライブラリの更新が止まっており、PHPの新しいバージョンに追従できないこともある
- バージョンアップ作業後は一通りの機能に問題がないか、実際に動かして検証する必要がある
- 目に見える形でエラーは出ていないがバリデーションのかかり方が以前と異なる、のように実際に動かしてみないとわからないケースもある
また、日々進んでいる改修作業を止められない場合、本流の環境とは別にバージョンアップ環境を準備し、平行で進めていくとよいケースもあります。
- STEP1:バージョンアップの検証環境にて、バージョンアップ作業を行いとりあえずで動くところまでを目指す
- STEP2:バージョンアップの検証環境にて、入念に検証を行う
- STEP2.5:本流の改修で出た差分を取り込む
- STEP3:2~2.5でエラーや問題が出れば修正する
- STEP4:2~3を繰り返し、安定した頃合いで本番へリリース
- ※改修は止まっている、または本番を一定期間止めてもOKということであれば、直接本流の環境で作業を行うほうが対応コストは低いです
調査方法
ソースコードに修正が必要な箇所がどれだけ存在するか確認を行っていきますが、目検でソースコードを一つずつチェックしていくのはしんどいです。
PHPにはバージョンアップ時にも使える便利な静的解析ツールが存在しています。
静的解析ツールだけで100%の検証が保証されるというものではなく、あくまでも最低限確実に変更が必要な箇所を見つけてくれる程度であり、実際に動かしての検証は必ず行うものと考えておくと良いです。
機械的に必要箇所を見つけてくれるだけでも作業はかなり楽になるものです。
今回はPHP8向けの以下のツールを使用させていただきました。 (製作者様、大変感謝🙏 )
コーディング規約をチェックをするphp_codesnifferをベースに、PHP8の規約に違反していないか、というルールを追加するphp-compatibilityとの組み合わせになります。 インストール手順はリンク先のページを参照ください。
実行例
実行してみると上記のように変更が必要な箇所を知らせてくれます。 ちなみに、今回のケースではERRORが230件、WARNが228件の結果です。...なかなかの件数が出てしまっていますね。
ERRORは互換性がなくなる等必ず修正しなくてはいけないもの、WARNは今後非推奨の予定が立っている等どうせなら一緒に修正したほうが良いもの、と理解しています。もしかしたらWARNでも修正しないと動かないというものがあるのかもしれません。
終わりに
今回はPHPのバージョンを8系へアップデートする際にphp_codesniffer+php-compatibilityの組み合わせで静的解析を行う話をまとめさせていただきました。
実行結果が出るとどの程度コードに影響が出るかを知れるだけではなく、実際には修正して再実行してというサイクルをERROR/WARNが0件になるまで繰り返していくという流れになります。
適切なツールを使用することで雪かきのような作業の負荷を軽減し、本来注力したい作業にリソースを向けていけると良いですね。