PHPバージョンアップを対応しました
こんにちは、テクノロジーGの岩橋です。以前Laravelのバージョンアップについての記事を公開しましたが、PHPについてもバージョンアップを実施したのでそちらをご紹介しようと思います。
進め方
PHPバージョンアップは以下のように進めました。
PHPCompatibilityを利用して、互換性のない箇所を洗い出す
公式ドキュメントを参照し、調査が必要そうな変更について調査タスクとしてチケット化
ターゲットバージョン用のphp.iniを追加
現行バージョンのデフォルト設定と、ソース管理されているphp.iniの設定を比較
現行バージョンと、ターゲットバージョンのphp.ini設定で変更点を調査
上記で確認した差分をターゲットバージョンのphp.ini設定に上書き
CIでテストを目的のPHPバージョンでも並行して実行できるようにする
テストでエラーになった箇所を修正
エラーになる内容は同じ対応で修正可能なことが多いので、エラーをある程度の粒度に分けてチケット化
検証環境へデプロイし、動作確認
リリース
Laravelの時と同じように5%カナリアリリースを行ったのち、問題ないことが確認できたら本番にリリース、という流れで行いました
PHPCompatibilityについて
PHP_CodeSnifferを利用してPHPのバージョン間の非互換な記述を検出できるルールです。例えばPHP7系で書かれたプログラムに対してPHP8系のルールで互換性のない記述がないかということをチェックしたりできます。公式のドキュメントはもちろん確認するのですが、このようなツールも併用するとよりバージョンアップに関してのリスクを低減することができ、助かります。
pcovを導入
クラシコムではコードカバレッジの計測にphpdbgを利用していたのですが、新しいPHPバージョンでCIのテスト実行が`segmentation fault`で失敗するようになってしまいました。このまま調査を続行し解決する方法もあったのですが、エラーの内容的に調査に時間がかかりそうなこととphpdbgを利用しなければ発生しないことも分かっており、phpdbgに拘る理由もなくpcovの方がメモリ使用量もすくないなどメリットもあるため導入しました。
今後できると良いこと
PHP自体はバージョンアップできたのですがコード自体は古い書き方が残っているため、php-cs-fixerのようなツールを利用して一括で変換したいのと、今後追加していくコードについても個々人によって書き方が違って来るのでCIなどに組み込んで、意識せずとも統一した書き方をできるようにしたいなと思っています。
バージョンアップを振り返って
今回のPHPバージョンアップではLaravelバージョンアップなど前回の経験を踏まえてタスク分けや、動作確認手順、CI及び検証環境、リリース戦略などが型としてあったことで、大きな問題もなく進めることができました。各バージョンアップ毎に振り返りしていたことで、それらの改善と実行がうまくサイクルとして回ったのかなと思います。
さいごに
LaravelとPHPと無事バージョンアップができたのですが、フロントエンドのソースが重複して管理されているなど、まだまだ課題はたくさんあります。もしクラシコムに少しでも興味をお持ち頂けたらお話聞きに来ていただけるととても嬉しいです。