ランサーズ(Lancers)エンジニアブログ > PHP > CakePHP > CakePHP1.3→2.8移行が完了しました

CakePHP1.3→2.8移行が完了しました

kanazawa|2019年02月06日
CakePHP

SREチームの金澤です。

1年以上かけて取り組んできた、CakePHP1.3→2.8バージョンアップが完了しましたので報告いたします。

ランサーズ社のCakePHPの取り組み

ランサーズは現在11年目ですが、永らくバージョンアップをしておらず、PHP 5.3 + CakePHP1.3の環境で稼働していました。

2017/2に全社的にバージョンアップを決断し、その後の取り組みをまとめたものが以下になります。

また、毎週木曜日にCakePHP 3.xクックブック & ソースコードリーディングを開催し、社外からの参加者も交えて40回近く開催することができました。

2017年は開発部全体でのPHP活動が盛り上がっていましたが、
2018年は地道にCakePHP2.8対応を継続した年になりました。

バージョンアップ後の後片付け

ランサーズのCakePHP1.3→2.8移行は、普段の開発を止めず、コントローラー単位で徐々に移行していくアプローチをとりました。

CakePHP1.3→2.8移行は、2017/11から本格的に着手しました。

  • 2018.12.16 PHPカンファレンス2018に登壇しました
    で登壇したときは、コントローラー移行率が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フェーズ以降は、もっと早く完了させたいと考えています。