Successfully reported this slideshow.
We use your LinkedIn profile and activity data to personalize ads and to show you more relevant ads. You can change your ad preferences anytime.

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

2,918 views

Published on

〜 1.3系から3.x系までの道のり 〜

Published in: Engineering
  • Be the first to comment

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

  1. 1. ランサーズ株式会社 エンジニア / 秋山 茂昌 バージョンアップ施策について 〜 1.3系から3.x系までの道のり 〜
  2. 2. はじめに
  3. 3. cakephp1.3から2.8で詰まったところ ● ランサーズとは
  4. 4. はじめに ● ランサーズとは
  5. 5. なぜ、バージョンアップするの?
  6. 6. なぜ、バージョンアップするのか? ● 過去にもリプレース行おうとしていた
  7. 7. なぜ、バージョンアップするのか? ● 過去にもリプレース行おうとしていた ● KPI改善や機能追加/改善を優先的に行ってきた
  8. 8. なぜ、バージョンアップするのか? ● 過去にもリプレース行おうとしていた ● KPI改善や機能追加/改善を優先的に行ってきた → ソースコードの肥大化 → UTがほとんどない状態
  9. 9. なぜ、バージョンアップするのか? ● ソースコード量 ファイル数 行数 コントローラー 174 約6万 バッチファイル 127 約5万 UT 505 約20万 UT抜き 1,386 約40万 全体 1,891 約60万
  10. 10. なぜ、バージョンアップするのか? 目的:開発リソースの最大化
  11. 11. なぜ、バージョンアップするのか? 目的:開発リソースの最大化 ● レガシーコードからの脱却
  12. 12. なぜ、バージョンアップするのか? 目的:開発リソースの最大化 ● レガシーコードからの脱却 ● サポートが終了している ○ cakephp1.3, php5.3等
  13. 13. なぜ、バージョンアップするのか? 目的:開発リソースの最大化 ● レガシーコードからの脱却 ● サポートが終了している ○ cakephp1.3, php5.3等 ● cakephp2系もサポート終了しそう
  14. 14. なぜ、バージョンアップするのか? 目的:開発リソースの最大化 ● レガシーコードからの脱却 ● サポートが終了している ○ cakephp1.3, php5.3等 ● cakephp2系もサポート終了しそう ● CakePHP3.x, PHP7.xだったりするサービスも
  15. 15. なぜ、バージョンアップするのか?
  16. 16. なぜ、バージョンアップするのか?
  17. 17. どんな感じで進めるの?
  18. 18. どんな感じで進めるの? ● バージョンアップの前準備として
  19. 19. どんな感じで進めるの? 今あるUTを動くようにする Nginx + php-fpm化 ● バージョンアップの前準備として
  20. 20. どんな感じで進めるの? 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
  21. 21. 誰がバージョンアップやってるの?
  22. 22. 部署: 開発部 名前: 秋山 茂昌 関西弁のなかなか出ない大阪出身 ● インフラ ● 金澤さん ● エンジニア ● 小林さん ● リーダー 誰がバージョンアップやってるの?
  23. 23. cakephp1.3から2.8で詰まったところ
  24. 24. cakephp1.3から2.8で詰まったところ ● Upgrade Shellの実行だけでは動かない ○ cakephp2.0から2.8の差分を取り込んでいるわけでな かった ○ 変更点ドキュメントを2.0から読み直すことになった
  25. 25. 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
  26. 26. 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
  27. 27. cakephp1.3から2.8で詰まったところ ● HtmlHelper::link, FormHelper::selectの 仕様が変わっている ○ 仕様に合わせたラッパークラスの作成をして、 そっちを利用するようにテンプレートの修正 ■ HtmlHelper::linkはjavascript::confirm()でアラート表示する方法が 変わってたり ■ FormHelper::selectはselectedの指定方法が変更になっていたり
  28. 28. cakephp1.3から2.8で詰まったところ ● HtmlHelper::link, FormHelper::selectの 仕様が変わっている ○ 仕様に合わせたラッパークラスの作成をして、 そっちを利用するようにテンプレートの修正 ■ HtmlHelper::linkはjavascript::confirm()でアラート表示する方法が 変わってたり ■ FormHelper::selectはselectedの指定方法が変更になっていたり ○ その他にも修正点が多く時間がかかる
  29. 29. cakephp1.3から2.8で詰まったところ ● CakePHPに則ってLancersが組み立てられていない
  30. 30. cakephp1.3から2.8で詰まったところ ● CakePHPに則ってLancersが組み立てられていない ○ 親クラスを意識して作られていなかったり ○ 1ファイル内のコード量の多さ ○ 冗長コードがたくさん ○ Noticeがたくさん
  31. 31. cakephp1.3から2.8で詰まったところ ● CakePHPに則ってLancersが組み立てられていない ○ 親クラスを意識して作られていなかったり ○ 1ファイル内のコード量の多さ ○ 冗長コードがたくさん ○ Noticeがたくさん
  32. 32. cakephp1.3から2.8で詰まったところ
  33. 33. どんな感じですすめているのか
  34. 34. ● CakePHP2.8にアップデートしたブランチを作成して、 そっちで動作を確認しつつコントローラー単位で修正を 行っていました。 どんな感じですすめているのか
  35. 35. ● CakePHP2.8にアップデートしたブランチを作成して、 そっちで動作を確認しつつコントローラー単位で修正を 行っていました。 ● また、別軸でCakePHP2.8の動作担保として Codeceptionを利用し手動チェックを減らしています。 どんな感じですすめているのか
  36. 36. ● CakePHP2.8にアップデートしたブランチを作成して、 そっちで動作を確認しつつコントローラー単位で修正を 行っていました。 ● また、別軸でCakePHP2.8の動作担保として Codeceptionを利用し手動チェックを減らしています。 ● が、 毎週masterから最新を取り込むのが面倒くさく、、 どんな感じですすめているのか
  37. 37. ● CakePHP2.8にアップデートしたブランチを作成して、 そっちで動作を確認しつつコントローラー単位で修正を 行っていました。 ● また、別軸でCakePHP2.8の動作担保として Codeceptionを利用し手動チェックを減らしています。 ● が、 毎週masterから最新を取り込むのが面倒くさく、、 ● 同じような修正点が多くて辛い、、、 どんな感じですすめているのか
  38. 38. オレオレupgrade shellを作った
  39. 39. オレオレUpgrade Shellを作った ● App::import → App::uses
  40. 40. オレオレUpgrade Shellを作った ● App::import → App::uses ● new FooHelper() → new FooHelper(new View())
  41. 41. オレオレUpgrade Shellを作った ● App::import → App::uses ● new FooHelper() → new FooHelper(new View()) ● new HogeComponent() → new HogeComponent(new ComponentCollection())
  42. 42. オレオレ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() )
  43. 43. オレオレUpgrade Shellを作った ● $this->param, $this->data等の参照変更 → $this->request->param, $this->request->data
  44. 44. オレオレUpgrade Shellを作った ● $this->param, $this->data等の参照変更 → $this->request->param, $this->request->data ● その他多数
  45. 45. ピボットしました
  46. 46. ピボットしました ● 事前にCakePHP1.3で出来ることをする
  47. 47. ピボットしました ● 事前にCakePHP1.3で出来ることをする ○ viewファイルで、Helperの参照方法 ■ $lancers → $this->Lancers
  48. 48. ピボットしました ● 事前にCakePHP1.3で出来ることをする ○ viewファイルで、Helperの参照方法 ■ $lancers → $this->Lancers ○ $this->param, $this->dataの参照変更 ■ $this->request->param, $this->request->data
  49. 49. ピボットしました ● CircleCIでチェックし変更をお願いする
  50. 50. ● 纏めてCakePHP2.8に切り替える怖さより 1コントローラーずつでも移行できたら安心感あるよね ピボットしました
  51. 51. ● 纏めてCakePHP2.8に切り替える怖さより 1コントローラーずつでも移行できたら安心感あるよね ● CakePHP1.3のapp/webroot/index.phpに細工 ピボットしました
  52. 52. ピボットしました ● CakePHP1.3とCakePHP2.8の同居!
  53. 53. ピボットしました ● CakePHP1.3とCakePHP2.8の同居! ● 事前にComponent, Helper, Viewあたりは CakePHP2.8側に用意する
  54. 54. ピボットしました ● CakePHP1.3とCakePHP2.8の同居! ● 事前にComponent, Helper, Viewあたりは CakePHP2.8側に用意する ● 1コントローラー毎に移行 ○ UTも含めて移行 ○ Codeceptionで動作を担保
  55. 55. ピボットしました ● 纏めてどっかんより、協力を求めるような形で出来る
  56. 56. ピボットしました ● 纏めてどっかんより、協力を求めるような形で出来る ● いつ変更するのか不安感を無くす事ができる
  57. 57. 今後はどんな感じで進めるのか
  58. 58. 今後はどんな感じで進めるのか ● phpのバージョンアップ ○ カナリアテスト
  59. 59. ● phpのバージョンアップ ○ カナリアテスト ● CakePHPのバージョンアップ 今後はどんな感じで進めるのか
  60. 60. 今後はどんな感じで進めるのか ● phpのバージョンアップ ○ カナリアテスト ● CakePHPのバージョンアップ ○ 2バージョンを用意して置き換えていく ○ Codeceptionがあるから安心 ○ UTも2バージョンを用意する
  61. 61. まとめ
  62. 62. まとめ ● 事前にできることはやる ● Upgrade shellをあまり信じないこと ● 実はバージョン間の同居できる ● これからも慎重かつ大胆にバージョンアップ
  63. 63. いつもの
  64. 64. 絶賛、募集中 ランサーズではエンジニアを絶賛募集中です! ● 弊社HP、Wantedly等 ご応募お待ちしてます
  65. 65. ご視聴ありがとうございました!

×