ランサーズ株式会社
エンジニア / 秋山 茂昌
バージョンアップ施策について
〜 1.3系から3.x系までの道のり 〜
はじめに
cakephp1.3から2.8で詰まったところ
● ランサーズとは
はじめに
● ランサーズとは
なぜ、バージョンアップするの?
なぜ、バージョンアップするのか?
● 過去にもリプレース行おうとしていた
なぜ、バージョンアップするのか?
● 過去にもリプレース行おうとしていた
● KPI改善や機能追加/改善を優先的に行ってきた
なぜ、バージョンアップするのか?
● 過去にもリプレース行おうとしていた
● KPI改善や機能追加/改善を優先的に行ってきた
→ ソースコードの肥大化
→ UTがほとんどない状態
なぜ、バージョンアップするのか?
● ソースコード量
ファイル数 行数
コントローラー 174 約6万
バッチファイル 127 約5万
UT 505 約20万
UT抜き 1,386 約40万
全体 1,891 約60万
なぜ、バージョンアップするのか?
目的:開発リソースの最大化
なぜ、バージョンアップするのか?
目的:開発リソースの最大化
● レガシーコードからの脱却
なぜ、バージョンアップするのか?
目的:開発リソースの最大化
● レガシーコードからの脱却
● サポートが終了している
○ cakephp1.3, php5.3等
なぜ、バージョンアップするのか?
目的:開発リソースの最大化
● レガシーコードからの脱却
● サポートが終了している
○ cakephp1.3, php5.3等
● cakephp2系もサポート終了しそう
なぜ、バージョンアップするのか?
目的:開発リソースの最大化
● レガシーコードからの脱却
● サポートが終了している
○ cakephp1.3, php5.3等
● cakephp2系もサポート終了しそう
● CakePHP3.x, PHP7.xだったりするサービスも
なぜ、バージョンアップするのか?
なぜ、バージョンアップするのか?
どんな感じで進めるの?
どんな感じで進めるの?
● バージョンアップの前準備として
どんな感じで進めるの?
今あるUTを動くようにする
Nginx + php-fpm化
● バージョンアップの前準備として
どんな感じで進めるの?
1.3 → 2.8
2.8 → 2.9
2.9 → 3.3
3.3 → 3.4
3.4 → 3.5
5.3 → 5.6
5.6 → 7.1
3.5 → 3.6 .. more
誰がバージョンアップやってるの?
部署: 開発部
名前: 秋山 茂昌
関西弁のなかなか出ない大阪出身
● インフラ
● 金澤さん
● エンジニア
● 小林さん
● リーダー
誰がバージョンアップやってるの?
cakephp1.3から2.8で詰まったところ
cakephp1.3から2.8で詰まったところ
● Upgrade Shellの実行だけでは動かない
○ cakephp2.0から2.8の差分を取り込んでいるわけでな
かった
○ 変更点ドキュメントを2.0から読み直すことになった
cakephp1.3から2.8で詰まったところ
● エラーが不明確
PHP Fatal error:
Allowed memory size of 536870912 bytes exhausted (tried to allocate 1664
bytes) in
/path/to/vendor/cakephp/cakephp/lib/Cake/Controller/Controller.php on line 335
PHP Fatal error:
Access to undeclared static property:App::$_classMap in
/path/to/vendor/cakephp/cakephp/lib/Cake/Core/App.php on line 535
cakephp1.3から2.8で詰まったところ
● エラーが不明確
● こんなエラーはだいたいComponent, Helperの
読み込み失敗
PHP Fatal error:
Allowed memory size of 536870912 bytes exhausted (tried to allocate 1664
bytes) in
/path/to/vendor/cakephp/cakephp/lib/Cake/Controller/Controller.php on line 335
PHP Fatal error:
Access to undeclared static property:App::$_classMap in
/path/to/vendor/cakephp/cakephp/lib/Cake/Core/App.php on line 535
cakephp1.3から2.8で詰まったところ
● HtmlHelper::link, FormHelper::selectの
仕様が変わっている
○ 仕様に合わせたラッパークラスの作成をして、
そっちを利用するようにテンプレートの修正
■ HtmlHelper::linkはjavascript::confirm()でアラート表示する方法が
変わってたり
■ FormHelper::selectはselectedの指定方法が変更になっていたり
cakephp1.3から2.8で詰まったところ
● HtmlHelper::link, FormHelper::selectの
仕様が変わっている
○ 仕様に合わせたラッパークラスの作成をして、
そっちを利用するようにテンプレートの修正
■ HtmlHelper::linkはjavascript::confirm()でアラート表示する方法が
変わってたり
■ FormHelper::selectはselectedの指定方法が変更になっていたり
○ その他にも修正点が多く時間がかかる
cakephp1.3から2.8で詰まったところ
● CakePHPに則ってLancersが組み立てられていない
cakephp1.3から2.8で詰まったところ
● CakePHPに則ってLancersが組み立てられていない
○ 親クラスを意識して作られていなかったり
○ 1ファイル内のコード量の多さ
○ 冗長コードがたくさん
○ Noticeがたくさん
cakephp1.3から2.8で詰まったところ
● CakePHPに則ってLancersが組み立てられていない
○ 親クラスを意識して作られていなかったり
○ 1ファイル内のコード量の多さ
○ 冗長コードがたくさん
○ Noticeがたくさん
cakephp1.3から2.8で詰まったところ
どんな感じですすめているのか
● CakePHP2.8にアップデートしたブランチを作成して、
そっちで動作を確認しつつコントローラー単位で修正を
行っていました。
どんな感じですすめているのか
● CakePHP2.8にアップデートしたブランチを作成して、
そっちで動作を確認しつつコントローラー単位で修正を
行っていました。
● また、別軸でCakePHP2.8の動作担保として
Codeceptionを利用し手動チェックを減らしています。
どんな感じですすめているのか
● CakePHP2.8にアップデートしたブランチを作成して、
そっちで動作を確認しつつコントローラー単位で修正を
行っていました。
● また、別軸でCakePHP2.8の動作担保として
Codeceptionを利用し手動チェックを減らしています。
● が、
毎週masterから最新を取り込むのが面倒くさく、、
どんな感じですすめているのか
● CakePHP2.8にアップデートしたブランチを作成して、
そっちで動作を確認しつつコントローラー単位で修正を
行っていました。
● また、別軸でCakePHP2.8の動作担保として
Codeceptionを利用し手動チェックを減らしています。
● が、
毎週masterから最新を取り込むのが面倒くさく、、
● 同じような修正点が多くて辛い、、、
どんな感じですすめているのか
オレオレupgrade shellを作った
オレオレUpgrade Shellを作った
● App::import → App::uses
オレオレUpgrade Shellを作った
● App::import → App::uses
● new FooHelper() → new FooHelper(new View())
オレオレUpgrade Shellを作った
● App::import → App::uses
● new FooHelper() → new FooHelper(new View())
● new HogeComponent() →
new HogeComponent(new ComponentCollection())
オレオレUpgrade Shellを作った
● App::import → App::uses
● new FooHelper() → new FooHelper(new View())
● new HogeComponent() →
new HogeComponent(new ComponentCollection())
● new BarController() →
new BarController(
new CakeRequest(), new CakeResponse()
)
オレオレUpgrade Shellを作った
● $this->param, $this->data等の参照変更
→ $this->request->param, $this->request->data
オレオレUpgrade Shellを作った
● $this->param, $this->data等の参照変更
→ $this->request->param, $this->request->data
● その他多数
ピボットしました
ピボットしました
● 事前にCakePHP1.3で出来ることをする
ピボットしました
● 事前にCakePHP1.3で出来ることをする
○ viewファイルで、Helperの参照方法
■ $lancers → $this->Lancers
ピボットしました
● 事前にCakePHP1.3で出来ることをする
○ viewファイルで、Helperの参照方法
■ $lancers → $this->Lancers
○ $this->param, $this->dataの参照変更
■ $this->request->param, $this->request->data
ピボットしました
● CircleCIでチェックし変更をお願いする
● 纏めてCakePHP2.8に切り替える怖さより
1コントローラーずつでも移行できたら安心感あるよね
ピボットしました
● 纏めてCakePHP2.8に切り替える怖さより
1コントローラーずつでも移行できたら安心感あるよね
● CakePHP1.3のapp/webroot/index.phpに細工
ピボットしました
ピボットしました
● CakePHP1.3とCakePHP2.8の同居!
ピボットしました
● CakePHP1.3とCakePHP2.8の同居!
● 事前にComponent, Helper, Viewあたりは
CakePHP2.8側に用意する
ピボットしました
● CakePHP1.3とCakePHP2.8の同居!
● 事前にComponent, Helper, Viewあたりは
CakePHP2.8側に用意する
● 1コントローラー毎に移行
○ UTも含めて移行
○ Codeceptionで動作を担保
ピボットしました
● 纏めてどっかんより、協力を求めるような形で出来る
ピボットしました
● 纏めてどっかんより、協力を求めるような形で出来る
● いつ変更するのか不安感を無くす事ができる
今後はどんな感じで進めるのか
今後はどんな感じで進めるのか
● phpのバージョンアップ
○ カナリアテスト
● phpのバージョンアップ
○ カナリアテスト
● CakePHPのバージョンアップ
今後はどんな感じで進めるのか
今後はどんな感じで進めるのか
● phpのバージョンアップ
○ カナリアテスト
● CakePHPのバージョンアップ
○ 2バージョンを用意して置き換えていく
○ Codeceptionがあるから安心
○ UTも2バージョンを用意する
まとめ
まとめ
● 事前にできることはやる
● Upgrade shellをあまり信じないこと
● 実はバージョン間の同居できる
● これからも慎重かつ大胆にバージョンアップ
いつもの
絶賛、募集中
ランサーズではエンジニアを絶賛募集中です!
● 弊社HP、Wantedly等
ご応募お待ちしてます
ご視聴ありがとうございました!

LancersのCakePHPバージョンアップ施策について

Editor's Notes

  • #6 いつでも、どこでも、個人と企業がマッチング。 クラウドソーシングで「働く」を変える。
  • #8 2年ぐらい前に? 2年ぐらいはかかるからリソースは割けない
  • #17 サービスの説明 cakephp3系、php7.1
  • #18 サービスの説明 cakephp3系、php7.1
  • #21 ブログでもお話したように。 社内で少しずつやったり開発合宿とかUT準備。
  • #24 機能改善/追加行いつつこのメンバーでやって行きます的な