ランサーズ等のサービスを開発・運用する中で得た知識やノウハウを紹介しています。

Labels:  CakePHP, PHP 投稿者:kanazawa

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

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フェーズ以降は、もっと早く完了させたいと考えています。

  • ランサーズではサービスを成長させてくれるエンジニア、デザイナーを募集しています!
    ご興味がある方は、以下URLよりご応募ください。


    【中途採用】
    サービスリードエンジニア
    テックリード(アーキテクト)
    フロントエンドエンジニア
    サーバーサイドエンジニア
    業務エンジニア(社内システム基盤・基幹システム)

    【インターン・学生バイト】
    19新卒対象サマーインターン
    エンジニアインターン

    その他採用情報

    関連記事

    ランサーズ開発ランチ(Lunchers#3)~ねこもり高橋さん PHPバージョンアップ編~

    エンジニアのshinです。 ランサーズでは4月から、ゲストを招いてランチを食べながら話をするランサーズ開発ランチ(Lunchers)という取り組みを実施しています。 5/16に実施した第3回の内容をご紹介します。   第3回のゲスト紹介 合同会社ねこ …

    ランサーズ開発合宿2017@湯河原温泉おんやど恵

    こんにちは。ランサーズの @sayaです。 先月末、湯河原温泉で第3回開発合宿をしてきたので、その模様をレポートします。 今回は幸運にも「湯かけまつり」という楽しいお祭りの開催と重なり、大いに盛り上がる合宿となりました。 テーマ 今回のテーマは「開発を最大化す …

    CakePHP 3.4 Console で Rails Console のように SQL クエリログを表示する方法

    ステラ・ルーのぬいばが欲しい nakajiman です。 Rails Console と同じように CakePHP 3 Console を使いたいんですが、CakePHP Console ってモデルを操作しても、Console にクエリログが表示されないんです …