SREチームの金澤です。
1年以上かけて取り組んできた、CakePHP1.3→2.8バージョンアップが完了しましたので報告いたします。
ランサーズ社のCakePHPの取り組み
ランサーズは現在11年目ですが、永らくバージョンアップをしておらず、PHP 5.3 + CakePHP1.3の環境で稼働していました。
2017/2に全社的にバージョンアップを決断し、その後の取り組みをまとめたものが以下になります。
- 2017.05.26 PHP、CakePHPバージョンアップの決断
- 2017.06.12 PHPカンファレンス福岡 2017に登壇しました
- 2017.06.27 PHP, CakePHPバージョンアップに向けてCIで品質を担保・向上していく
- 2017.09.05 ランサーズのNginx+PHP-FPM化
- 2017.10.10 PHPカンファレンス2017 に登壇してきました
- 2017.10.10 [イベント報告] phpcon2017でのPHPクイズ ~答え合わせ編~
- 2017.11.21 CakePHP3.5における各種実装例 ~ LancersTop 開発現場より ~
- 2018.06.18 PHPカンファレンス福岡2018に登壇しました
- 2018.12.16 PHPカンファレンス2018に登壇しました
また、毎週木曜日にCakePHP 3.xクックブック & ソースコードリーディングを開催し、社外からの参加者も交えて40回近く開催することができました。
2017年は開発部全体でのPHP活動が盛り上がっていましたが、
2018年は地道にCakePHP2.8対応を継続した年になりました。
バージョンアップ後の後片付け
ランサーズのCakePHP1.3→2.8移行は、普段の開発を止めず、コントローラー単位で徐々に移行していくアプローチをとりました。
CakePHP1.3→2.8移行は、2017/11から本格的に着手しました。
で登壇したときは、コントローラー移行率が99%でした。
年末には100%に達していたのですが、その後、CakePHP1.3を削除する作業が残っていました。
工数的にはそれほど大変ではないものの、慎重に作業したため、約1か月かけての作業となりました。
- 各種ディレクトリの移動
- tmp
- logs
- vendor
- composer
- webroot
- CakePHP1.3側のソースを削除
- Nginxを変更(CakePHP2.8のindex.phpを直接呼び出す)
- composer autoloadの参照をCakePHP2.8に移動
- リリースシステムの設定変更
レスポンス、サーバー負荷の改善
CakePHPを2にバージョンアップするとパフォーマンスが改善することを聞いていましたが、
ピーク時のサーバー台数が2台ほど減りました(ピーク時6~8台→4~5台)
また、移行完了当日に、サーバーレスポンスの過去最速を記録し、初めて200msを切ることができました。
App::usesによる遅延ローディング等の効果が出ていると推測しています。
※移行中に多少のパフォーマンスチューニングも行ったのでその効果もあるかと思います。
バージョンアップ資料の共有
ランサーズのソース(60万行、200コントローラー)を移行した過程で得た、バージョンアップのノウハウを
GitHubで公開しました。
https://github.com/LancersDevTeam/PHP_versionup
今更感はありますが、今後、移行する方の参考になりましたら幸いです。
今後の予定
ランサーズのPHP、CakePHPバージョンアップは、以下のフェーズに分けて取り組んでいます。
Apache + mod_php + PHP 5.3 + CakePHP 1.3
↓(第1フェーズ)
Nginx + PHP-FPM + PHP 5.3 + CakePHP 1.3
↓(第2フェーズ)
Nginx + PHP-FPM + PHP 5.3 + CakePHP 2.8
↓(第3フェーズ)
Nginx + PHP-FPM + PHP 5.6 + CakePHP 2.8
↓(第4フェーズ)
Nginx + PHP-FPM + PHP 5.6 + CakePHP 2.10
↓(第5フェーズ)
Nginx + PHP-FPM + PHP 7.x + CakePHP 2.10
今回、第2フェーズを終えることができました。
続きまして、第3フェーズである、PHP5.6化に着手いたします。
しかしながら、PHP5.6も2018/12でサポートが終了してしまいましたので、なるべく早くPHP7にバージョンアップしたいところです。
CakePHPのバージョンアップはコントローラー単位で1年以上かけて取り組みましたが、
第3フェーズ以降は、もっと早く完了させたいと考えています。