SlideShare une entreprise Scribd logo
1  sur  66
ランサーズ株式会社
エンジニア / 秋山 茂昌
バージョンアップ施策について
〜 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等
ご応募お待ちしてます
ご視聴ありがとうございました!

Contenu connexe

Tendances

Cakephp Ajax
Cakephp AjaxCakephp Ajax
Cakephp Ajax
mick
 
CakePHP PHP Framework
CakePHP PHP FrameworkCakePHP PHP Framework
CakePHP PHP Framework
ryota ichie
 

Tendances (20)

5分で詰め込む フロントエンド最適化
5分で詰め込む フロントエンド最適化5分で詰め込む フロントエンド最適化
5分で詰め込む フロントエンド最適化
 
決済金融から始めるデータドリブンカンパニー #yjmu
決済金融から始めるデータドリブンカンパニー #yjmu決済金融から始めるデータドリブンカンパニー #yjmu
決済金融から始めるデータドリブンカンパニー #yjmu
 
Yahoo! JAPANのコンテンツプラットフォームを支えるSpring Cloud Streamによるマイクロサービスアーキテクチャ #jsug #sf_52
Yahoo! JAPANのコンテンツプラットフォームを支えるSpring Cloud Streamによるマイクロサービスアーキテクチャ #jsug #sf_52Yahoo! JAPANのコンテンツプラットフォームを支えるSpring Cloud Streamによるマイクロサービスアーキテクチャ #jsug #sf_52
Yahoo! JAPANのコンテンツプラットフォームを支えるSpring Cloud Streamによるマイクロサービスアーキテクチャ #jsug #sf_52
 
Cakephp Ajax
Cakephp AjaxCakephp Ajax
Cakephp Ajax
 
比較サイトの検索改善(SPA から SSR に変換)
比較サイトの検索改善(SPA から SSR に変換)比較サイトの検索改善(SPA から SSR に変換)
比較サイトの検索改善(SPA から SSR に変換)
 
Arachne Unweaved (JP)
Arachne Unweaved (JP)Arachne Unweaved (JP)
Arachne Unweaved (JP)
 
Cake Php開発事例
Cake Php開発事例Cake Php開発事例
Cake Php開発事例
 
5年しかもたない最高のシステムとの向き合い方
5年しかもたない最高のシステムとの向き合い方5年しかもたない最高のシステムとの向き合い方
5年しかもたない最高のシステムとの向き合い方
 
CakePHP × 国産! baserCMS3の深化と今後の拡がり
CakePHP × 国産! baserCMS3の深化と今後の拡がりCakePHP × 国産! baserCMS3の深化と今後の拡がり
CakePHP × 国産! baserCMS3の深化と今後の拡がり
 
20151205 中国地方db勉強会 dbm_fs
20151205 中国地方db勉強会 dbm_fs20151205 中国地方db勉強会 dbm_fs
20151205 中国地方db勉強会 dbm_fs
 
1年くらいScalaプロジェクトに関わった結果 #ichigayageek
1年くらいScalaプロジェクトに関わった結果 #ichigayageek1年くらいScalaプロジェクトに関わった結果 #ichigayageek
1年くらいScalaプロジェクトに関わった結果 #ichigayageek
 
WordPress on HHVM + Hack
WordPress on HHVM + HackWordPress on HHVM + Hack
WordPress on HHVM + Hack
 
CakePHP PHP Framework
CakePHP PHP FrameworkCakePHP PHP Framework
CakePHP PHP Framework
 
サービスのスケール化のための検索システム改善
サービスのスケール化のための検索システム改善サービスのスケール化のための検索システム改善
サービスのスケール化のための検索システム改善
 
XP lives, XP dies, XP lives again !!
XP lives, XP dies, XP lives again !!XP lives, XP dies, XP lives again !!
XP lives, XP dies, XP lives again !!
 
5分でわかるPhalconPHP
5分でわかるPhalconPHP5分でわかるPhalconPHP
5分でわかるPhalconPHP
 
The Internal of Serverless Plugins
The Internal of Serverless PluginsThe Internal of Serverless Plugins
The Internal of Serverless Plugins
 
スマートフォンWebアプリ最適化”3つの極意”
スマートフォンWebアプリ最適化”3つの極意”スマートフォンWebアプリ最適化”3つの極意”
スマートフォンWebアプリ最適化”3つの極意”
 
OSS Gateワークショップ(チュートリアル) - OSS開発手順
OSS Gateワークショップ(チュートリアル) - OSS開発手順OSS Gateワークショップ(チュートリアル) - OSS開発手順
OSS Gateワークショップ(チュートリアル) - OSS開発手順
 
PHP版レガシーコード改善に役立つ新パターン #wewlc_jp
PHP版レガシーコード改善に役立つ新パターン #wewlc_jp PHP版レガシーコード改善に役立つ新パターン #wewlc_jp
PHP版レガシーコード改善に役立つ新パターン #wewlc_jp
 

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

DevOpsを実現する為のChef実践テクニック Chef12対応版
DevOpsを実現する為のChef実践テクニック Chef12対応版DevOpsを実現する為のChef実践テクニック Chef12対応版
DevOpsを実現する為のChef実践テクニック Chef12対応版
Yusuke Ando
 
Cake Matsuri Nanapi
Cake Matsuri NanapiCake Matsuri Nanapi
Cake Matsuri Nanapi
Shuichi Wada
 
CakePHP最新情報 PHPカンファレンス関西2012
CakePHP最新情報 PHPカンファレンス関西2012CakePHP最新情報 PHPカンファレンス関西2012
CakePHP最新情報 PHPカンファレンス関西2012
ichikaway
 
How to manage Cakephp @CakePHP_Fukuoka_2
How to manage Cakephp @CakePHP_Fukuoka_2 How to manage Cakephp @CakePHP_Fukuoka_2
How to manage Cakephp @CakePHP_Fukuoka_2
ichikaway
 
Cakephp tokyo5
Cakephp tokyo5Cakephp tokyo5
Cakephp tokyo5
ichikaway
 
第2回勉強会資料 岩本(配布用)
第2回勉強会資料 岩本(配布用)第2回勉強会資料 岩本(配布用)
第2回勉強会資料 岩本(配布用)
Takahisa Iwamoto
 
なぜ、PHPのmbstring.func_overloadをdeprecatedにするのに5年かかったのか? - 慢心、環境の違い
なぜ、PHPのmbstring.func_overloadをdeprecatedにするのに5年かかったのか? - 慢心、環境の違い なぜ、PHPのmbstring.func_overloadをdeprecatedにするのに5年かかったのか? - 慢心、環境の違い
なぜ、PHPのmbstring.func_overloadをdeprecatedにするのに5年かかったのか? - 慢心、環境の違い
sasezaki
 

Similaire à LancersのCakePHPバージョンアップ施策について (20)

【PHPカンファレンス福岡】PHP 5.3 + CakePHP 1.3 → PHP 7 + CakePHP 3 移行を決めた話
【PHPカンファレンス福岡】PHP 5.3 + CakePHP 1.3 → PHP 7 + CakePHP 3 移行を決めた話【PHPカンファレンス福岡】PHP 5.3 + CakePHP 1.3 → PHP 7 + CakePHP 3 移行を決めた話
【PHPカンファレンス福岡】PHP 5.3 + CakePHP 1.3 → PHP 7 + CakePHP 3 移行を決めた話
 
DevOpsを実現する為のChef実践テクニック Chef12対応版
DevOpsを実現する為のChef実践テクニック Chef12対応版DevOpsを実現する為のChef実践テクニック Chef12対応版
DevOpsを実現する為のChef実践テクニック Chef12対応版
 
Cake Matsuri Nanapi
Cake Matsuri NanapiCake Matsuri Nanapi
Cake Matsuri Nanapi
 
DevOpsを実現するChef活用テクニック
DevOpsを実現するChef活用テクニックDevOpsを実現するChef活用テクニック
DevOpsを実現するChef活用テクニック
 
最近、僕がハマったFuelPHPの紹介
最近、僕がハマったFuelPHPの紹介最近、僕がハマったFuelPHPの紹介
最近、僕がハマったFuelPHPの紹介
 
Cakephp勉強会@tokyo #4
Cakephp勉強会@tokyo #4Cakephp勉強会@tokyo #4
Cakephp勉強会@tokyo #4
 
あるあるLT〜サーバーサイドエンジニア〜 Vol.3
あるあるLT〜サーバーサイドエンジニア〜 Vol.3あるあるLT〜サーバーサイドエンジニア〜 Vol.3
あるあるLT〜サーバーサイドエンジニア〜 Vol.3
 
CakePHP最新情報 PHPカンファレンス関西2012
CakePHP最新情報 PHPカンファレンス関西2012CakePHP最新情報 PHPカンファレンス関西2012
CakePHP最新情報 PHPカンファレンス関西2012
 
PhpStormを使おう --高槻からは快速急行が早くなります #jbugj
PhpStormを使おう --高槻からは快速急行が早くなります #jbugjPhpStormを使おう --高槻からは快速急行が早くなります #jbugj
PhpStormを使おう --高槻からは快速急行が早くなります #jbugj
 
CakePHP3.x での各種実装例 ~| PHP Tech Bash 20171121 ~
CakePHP3.x での各種実装例 ~| PHP Tech Bash 20171121 ~CakePHP3.x での各種実装例 ~| PHP Tech Bash 20171121 ~
CakePHP3.x での各種実装例 ~| PHP Tech Bash 20171121 ~
 
CakePHP3使ってみて
CakePHP3使ってみてCakePHP3使ってみて
CakePHP3使ってみて
 
Java Clientで入門する Apache Kafka #jjug_ccc #ccc_e2
Java Clientで入門する Apache Kafka #jjug_ccc #ccc_e2Java Clientで入門する Apache Kafka #jjug_ccc #ccc_e2
Java Clientで入門する Apache Kafka #jjug_ccc #ccc_e2
 
How to manage Cakephp @CakePHP_Fukuoka_2
How to manage Cakephp @CakePHP_Fukuoka_2 How to manage Cakephp @CakePHP_Fukuoka_2
How to manage Cakephp @CakePHP_Fukuoka_2
 
Cakephp tokyo5
Cakephp tokyo5Cakephp tokyo5
Cakephp tokyo5
 
OSC2013@FUKUOKA
OSC2013@FUKUOKAOSC2013@FUKUOKA
OSC2013@FUKUOKA
 
Sencha と CakePHP の連携について
Sencha と CakePHP の連携についてSencha と CakePHP の連携について
Sencha と CakePHP の連携について
 
第2回勉強会資料 岩本(配布用)
第2回勉強会資料 岩本(配布用)第2回勉強会資料 岩本(配布用)
第2回勉強会資料 岩本(配布用)
 
研究生のためのC++ no.7
研究生のためのC++ no.7研究生のためのC++ no.7
研究生のためのC++ no.7
 
NetBeansではじめる FuelPHP
NetBeansではじめる FuelPHPNetBeansではじめる FuelPHP
NetBeansではじめる FuelPHP
 
なぜ、PHPのmbstring.func_overloadをdeprecatedにするのに5年かかったのか? - 慢心、環境の違い
なぜ、PHPのmbstring.func_overloadをdeprecatedにするのに5年かかったのか? - 慢心、環境の違い なぜ、PHPのmbstring.func_overloadをdeprecatedにするのに5年かかったのか? - 慢心、環境の違い
なぜ、PHPのmbstring.func_overloadをdeprecatedにするのに5年かかったのか? - 慢心、環境の違い
 

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

Notes de l'éditeur

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