Yuki猫のおうち

気ままに自由に日々を生きるエンジニアのブログ

PHP5.6からPHP7.3への移行対応

概要

会社の業務で、PHP5.6環境で動作しているプロダクトをPHP7.3環境に移行する対応を行ったので、対応内容を忘備録として残しておく。

一度に記事を書くのは大変なので、この記事をハブページとして、項目別にいくつかの記事に分けて投稿していく予定。

PHP5.6のサポートが切れている

公式サイトによると、PHP5.6のサポートは2019年1月に切れていることになっている。

PHP Manual:Supported Versions

f:id:yukineko4you:20191212002011p:plain
PHPのバージョン毎サポート情報 (PHP公式サイトから抜粋)

セキュリティサポートが切れているといっても、なにも今すぐ危険だというわけではない。とはいえ、今後致命的なセキュリティバグが発見されても修正されないということなので、そのまま放置していいものでもない。

PHP7

およそ10年ぶりのメジャーアップデートというのもあり、PHP5と比べると処理性能もメモリ使用量もかなり改善されている。
理論値では、およそ2倍になるケースもあるのだとか。

「PHP 7」登場。10年ぶりのメジャーバージョンアップで実行速度はPHP 5の2倍以上に、PHPの生みの親が語る。PHPカンファレンス2015(前編) - Publickey

単純にサーバー処理時間が短くなるのでレスポンス速度が速くなるし、CPU負荷も下がるのでスケールアウトしているサービスであればサーバー台数を削減できるかもしれない。
これは移行しない手はない。

対応方針

今回の移行にあたって、メンテナンス期間なしで移行対応を行うことになった。
方法としては、スケールアウトされているサーバー群に対して、PHP7環境のサーバーをサービスインしてPHP5環境をサービスアウトする、という方法で徐々にPHP7環境へと移行していく方式をとる。
その性質上、一時的にPHP5とPHP7のサーバーが混在する期間が発生するため、コードをPHP5でもPHP7でも動作する互換性のあるコードに修正していく方針となった。

下位互換性のない変更点

メジャーアップデートなので、当然(?)下位互換性のない変更点というのがいくつかある。

詳細は公式サイトにまとまっているが、全てのソースコードを目で確認するのは土台無理な話である。
そこで、静的チェックツールを活用しつつ下位互換性のない変更点を修正していくことになる。

https://www.php.net/manual/ja/migration70.php

静的チェックツールを利用した互換性のない処理の洗い出し

今回はPHPCompatibilityを使用した。

PHPCompatibility

github.com

導入方法は別記事で書く。

(予定)macにcomposerをインストールする
(予定)macでPHP5とPHP7の環境を切り替えられるようにする
(予定)composerでPHPCompatibilityをインストールしてコードを静的チェックする

互換コードへの修正対応

これはたくさんあるので後日別記事で書く。
(予定)PHPCompatibilityを活用してPHP5系とPHP7系どちらでも動作する互換コードに書き換える
(予定)PHPCompatibilityではチェックしきれない下位互換性のない変更点の修正