PHP5.3→5.6移行が完了しましたPHP5.3→5.6移行が完了しましたblog_admin|2019年04月17日Ansible33Twitter58Facebook8B!Bookmark12PocketSREチームの金澤です。PHP5.3→5.6バージョンアップが完了しましたので報告いたします。CakePHP1.3→2.8バージョンアップが完了してから約2カ月での移行となりました。2019/03/20にコネヒトさんで開催されたPHP勉強会で、その詳細について発表させていただきました。(このときは管理画面、バッチサーバーまで移行完了していました)PHPのバージョンアップ自体は3月中に完了していましたが、その後関連ライブラリのバージョンアップも併せて行いました。バージョンアップに向けたCI改善2019/2/5にCakePHP1.3→2.8バージョンアップが完了し、その後すぐにCI周りの改善に取り掛かりました。その詳細をPHP5.6化に向けたCircleCIのアップデートにまとめています。目的は以下の2点です。PHP5.6の文法に対応する@PSR2を設定@PHP56Migrationを設定CIでUTを回すUTが通らなければマージできないようにする※PHP5.6との互換性を検証したく@PHP56Migrationを設定しましたが、これはあまり活躍しませんでした。(PHP-CS-Fixerの@PHP56MigrationはPow関数の対応しかサポートされていないようです)https://mlocati.github.io/php-cs-fixer-configurator/?version=2.2PHP5.6バージョンアップ準備PEARライブラリのコード管理ランサーズは一部の機能にPEARライブラリを利用しています。installでインストールしていました。installでインストールすると/usr/share/srcに配置されるため、ライブラリ管理がOS側に依存していました。2019/1にpear.php.netが数週間停止する事態が起きたこともあり、php.pear.netに依存しないサーバー構築手順に変更しました。利用していたPEARライブラリは以下2つです。Browfishは依存関係があり、単純にVendorディレクトリに配置するだけでは動作しないため、composer.jsonに以下のように記述して管理するようにしました。}※これらのライブラリはPHP7に対応していないので、代替手段を用意しておきたいところです。SDKについては、V2をメインに利用していましたが、S3関連の処理だけV1を利用していました。Warningを出してしまうため、すべてV2に統一しました。PHP5.6コンテナの構築と切り替えまず開発用コンテナのPHP5.6化から始めました。ランサーズの開発環境はDockerを利用しており、docker-compose.ymlには以下のように記述しております。~/www:/var/wwwPHP5.3環境とPHP5.6環境をすぐに切り替えられるようにしました。構築したPHP5.6のコンテナはタグ名を5.6とし、docker-compose.override.ymlを以下のように記述します。-dとすれば、PHP5.6コンテナにすぐに切り替わります。-dとすれば戻ります。Warningを出していました。Warningを出している箇所が残っていました。親クラスと子クラスの引数を合わせる一番多かったのは、親クラスと子クラスの引数が一致していないパターンです。PHP5.3では警告されませんでしたが、PHP5.6では以下の警告が出力されます。afterSave($created)親クラスのModel.phpでは、以下のように定義されていました。array())CakePHP1.3→2.8にバージョンアップした過程で引数の仕様変更があったためです。以下のソースの子クラス全関数の引数をチェックし、親クラスと引数を一致させるように修正しました。Model.phpBehavior.phpController.phpComponent.php参照を引数に取る関数の対応PHP5.4からの仕様変更。reference参照を引数にとる関数は一度変数に格納する必要がありました。array_shift($keys);参照が戻り値の関数の対応PHP5.4からの仕様変更。referenceこれは実体のまま受け取るように修正して対応しました。...オブジェクトのメンバ変数を初期化する場合は、まずオブジェクト自体の初期化が必要です。'key1';PHP5.6化後のパフォーマンスサーバーレスポンス移行前に160ms前後であったものが140ms前後に改善。OPCacheになりましたが、その効果が出ていると推測しています。時間がかかっていた7時間のバッチが、30分ほど短縮されました。全体的には、約1.13倍程度のパフォーマンスアップになりました。関連ライブラリのバージョンアップPHP5.6化に伴い、composerで管理している各種ライブラリのバージョンアップも行いました。詳細は別途ブログに書きたいと思います。バージョンアップ資料の共有PHP5.6バージョンアップ手順の詳細をGithubで公開しました。https://github.com/LancersDevTeam/PHP_versionup今更感はありますが、今後、移行する方の参考になりましたら幸いです。今後の予定ランサーズのPHP、CakePHPバージョンアップは、以下のフェーズに分けて取り組んでいます。2.10今回、第3フェーズを終えることができました。続きまして、第4フェーズである、CakePHP2.10化に着手いたします。これが終われば、いよいよPHP7化に着手できます。PHP5.6もすでにセキュリティサポートが切れていますのでできるだけ早くPHP7化に着手したいところです。©Lancers,inc.。