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.
PHP 5.3 + CakePHP 1.3
↓
PHP 7 + CakePHP 3
移行を決めた話
http://www.lancers.jp/
[2017/06/10 PHPカンファレンス福岡]
ランサーズ株式会社
インフラエンジニア
金澤 ...
© 2017 for LANCERS, inc All Rights Reserved
自己紹介
• 氏名
• 金澤 裕毅
• 出身
• 宮城県仙台市
• 入社時期
• 2013年11月
• 業務内容
• ランサーズの運用監視
• AWS全般
...
© 2017 for LANCERS, inc All Rights Reserved
本日お話しさせていただく内容
ランサーズ(株)のご紹介
バージョンアップ決定の経緯
バージョンアップ計画
バージョンアップ準備
現在の状況
最後に
© 2017 for LANCERS, inc All Rights Reserved
ランサーズ(株)のご紹介
バージョンアップ計画
バージョンアップ準備
現在の状況
最後に
バージョンアップ決定の経緯
© 2017 for LANCERS, inc All Rights Reserved
会社概要
所在地
〒150-0002 東京都渋谷区渋谷 3-10-13
TOKYU REIT 渋谷Rビル 9F
会社名
ランサーズ株式会社 (LANCERS...
ランサーズが提供する「クラウドソーシング」
Crowd(群衆) Sourcing(外注)
Web上で個人等に業務委託
※エスクロー決済
※プラットフォーム Fee
受託者
(ワーカー)
発注者
(クライアント)
発注
作業
納品
テクノロジーで...
国内市場における仕事受給の流れ
1600億円以上の仕事流通
依頼額の54%が
東京の企業
受注額の75%が
地方の個人
3.2%
3.5%
5.0%
8.5%
12.0%
13.6%
54.3%
5.0%
7.8%
11.2%
11.5%
19...
7
仕事の依頼例(一部のカテゴリを抜粋)
• コンペ方式
• プロジェクト方式
• タスク方式
ランサーからもスキル商品を出品可能
自分のスキルや得意を商品に見立てて出品、逆にできないことはお願いする
スキルサービスECを2016/4より開始しました
スキルはもちろん「得意なこと」も
詳しくは「ランサーズストア」で検索
チラシ、ライティング、SEOコンサル、似顔絵作成、WordPress構築など
個人が持つ多種多様な「スキルや得意」を相互に売り買いしています
© 2017 for LANCERS, inc All Rights Reserved
ランサーズの提供サービス
デジタルマーケティングクラウドソーシング シェアリングエコノミー
2008/12
サービス開始
2016/4
サービス開始
201...
© 2017 for LANCERS, inc All Rights Reserved
ランサーズを支える技術
© 2017 for LANCERS, inc All Rights Reserved
ランサーズの稼働環境
EC2
App S3
ELB
CloudFront
SQS
Cloud Search
Route53
EC2
instance
Web...
© 2017 for LANCERS, inc All Rights Reserved
ランサーズの開発環境
• Dockerで構築
• 本番環境とほぼ同じ構成をDockerで再現
• DockerマウントでPCとソースを共有
Virtualb...
© 2017 for LANCERS, inc All Rights Reserved
バージョンアップ決定の経緯
バージョンアップ計画
バージョンアップ準備
現在の状況
最後に
ランサーズ(株)のご紹介
© 2017 for LANCERS, inc All Rights Reserved
旧バージョンのサポート終了
• Amazon Linux AMI
• 2017.09版からPHP5.3、PHP5.4が削除される予定
• CakePHP 1...
© 2017 for LANCERS, inc All Rights Reserved
ライブラリバージョンアップへの追従
• AWS SDK PHP
• 最新バージョンのインストールにはPHP5.5上が必要
• FacebookSDK
• 最...
© 2017 for LANCERS, inc All Rights Reserved
開発生産性向上とエンジニア採用
• 最新バージョンの恩恵を受けたい
• 新しいPHPの関数が使えない
• 新しいPHPの仕様でコーディング出来ない
• エン...
© 2017 for LANCERS, inc All Rights Reserved
バージョンアップ計画
バージョンアップ決定の経緯
バージョンアップ準備
現在の状況
最後に
ランサーズ(株)のご紹介
© 2017 for LANCERS, inc All Rights Reserved
バージョンアップ条件の整理
PHP
バージョン
PHP
キャッシュ
CakePHP
対応バージョン
Apache
バージョン
PHP5.3 APC Cake...
© 2017 for LANCERS, inc All Rights Reserved
バージョンアップ計画
PHP
バージョン
PHP
キャッシュ
CakePHP
バージョン
Webパッケージ
バージョン(yum)
PHP5.3 APC Ca...
© 2017 for LANCERS, inc All Rights Reserved
Nginx + PHP-FPM化
• 現在の構成(Amazon Linuxの場合)
• PHP 5.3.29 + Apache 2.2 + mod_php
...
© 2017 for LANCERS, inc All Rights Reserved
Nginx + PHP-FPM化
• 移行完了
• レスポンスはほぼ同じ
• サーバーリソースの消費量もほぼ同じ
© 2017 for LANCERS, inc All Rights Reserved
PHP 5.3 → PHP 5.6 化
• PHP 5.3.29 + Nginx + PHP-FPM 5.3(Nginx移行後の構成)
• json.soの...
© 2017 for LANCERS, inc All Rights Reserved
PHP 5.3 → PHP 5.6 化
• PHP 5.6をインストールした開発環境のDockerコンテナを構築する
Virtualbox VM
Docke...
© 2017 for LANCERS, inc All Rights Reserved
PHP 5.3 → PHP 5.6 化
• PHP 5.6 版の開発環境(Dockerコンテナ)を構築
Virtualbox VM
Docker Machi...
© 2017 for LANCERS, inc All Rights Reserved
PHP 5.3 → PHP 5.6 化
• PHP 5.3コンテナ → PHP 5.6版コンテナに切り替え
• 今後はPHP 5.6版コンテナをメインに開発...
© 2017 for LANCERS, inc All Rights Reserved
PHP 5.3 → PHP 5.6 化
Virtualbox VM
Docker Machine
172.17.6.11
App
PHP5.3
ランサーズ本...
© 2017 for LANCERS, inc All Rights Reserved
PHP 5.6コンテナ切り替え結果(現状)
• 表向きは問題なく見える状態
• ログにWARNINGが多発
• Nginxのerror.log
• PHP-...
© 2017 for LANCERS, inc All Rights Reserved
CakePHP 1.3 → CakePHP 3 化
• 最大の難関
• 現在も方針を議論中
• CakePHP 1.3を直接カスタマイズしている問題
• ビ...
© 2017 for LANCERS, inc All Rights Reserved
CakePHP 1.3 → CakePHP 3 化
• 現在も方針を議論中
• CakePHP 1.3.6 → 1.3.21
• まずは確実にマイナーバージ...
© 2017 for LANCERS, inc All Rights Reserved
エンジニアブログで告知(5/26)
• いただいたフィードバック
• PHP 7.0にするなら7.1までバージョンアップした方が良い
• CakePHP 1...
© 2017 for LANCERS, inc All Rights Reserved
PHP 5.6 → PHP 7.x 化
• PHP7.0で多くの互換性が排除されている
• CakePHP 2以上になればPHP7にバージョンアップ可能
•...
© 2017 for LANCERS, inc All Rights Reserved
バージョンアップ準備
バージョンアップ決定の経緯
バージョンアップ計画
現在の状況
最後に
ランサーズ(株)のご紹介
© 2017 for LANCERS, inc All Rights Reserved
移行しやすいソースにするために
• 対応完了したもの
• CakePHP View Cache(NFSに格納)の廃止
• 2016/6に完全廃止(Memca...
© 2017 for LANCERS, inc All Rights Reserved
移行しやすいソースにするために
• 現在対応中のもの
• レスポンシブ対応
• モバイル用の処理をごっそり削除できる
• モバイル判定処理
• モバイル用の...
© 2017 for LANCERS, inc All Rights Reserved
移行しやすいソースにするために
• 今後対応していきたいもの
• フルhttps化
• http⇔httpsリダイレクト処理が不要に
• AWS ELBのS...
© 2017 for LANCERS, inc All Rights Reserved
コーディングガイドラインの共有
• PHP 7化への布石
• PHPバージョン間での禁止事項をまとめる
• http://php.net/manual/ja...
© 2017 for LANCERS, inc All Rights Reserved
UT Green化計画
• CakePHP Test Suiteのテストジョブがエラーのまま放置されている
• バージョンアップによるエラーを素早く検知でき...
© 2017 for LANCERS, inc All Rights Reserved
現在の状況
バージョンアップ決定の経緯
バージョンアップ計画
バージョンアップ準備
最後に
ランサーズ(株)のご紹介
© 2017 for LANCERS, inc All Rights Reserved
エンジニア合宿(5/27-5/28)
• エラーテストジョブを潰しまくる
• 合宿直前:約1800 → 約160まで削減
• 芋づる式に削減できるところから...
© 2017 for LANCERS, inc All Rights Reserved
UT実行時間の短縮
• 余計なfixtureでのDB生成をやめる
• Fixture設定があってもDB生成しないようにする
• fixtureを利用しない親...
© 2017 for LANCERS, inc All Rights Reserved
UT実行時間の短縮
• Web上で実行するよりCLIで実行した方が早い
• CLIでグループ単位で1個ずつ実行する
• グループ数:約300グループ
• 実...
© 2017 for LANCERS, inc All Rights Reserved
新サービスをPHP7+CakePHP3で開発
• 新サービスを新バージョンで開発し、予め知見を貯めておく
• Lancers Top(2017夏リリース予定...
© 2017 for LANCERS, inc All Rights Reserved
最後に
バージョンアップ決定の経緯
バージョンアップ計画
バージョンアップ準備
現在の状況
ランサーズ(株)のご紹介
© 2017 for LANCERS, inc All Rights Reserved
CakePHP 3.4 ソースコードリーディング
• 第1回(2017/03/22)- リクエストのライフサイクル
• http://bit.ly/2rI6...
© 2017 for LANCERS, inc All Rights Reserved
PHPエンジニア採用中!
46
エントリーはこちら!
https://www.wantedly.com/projects/88797/
ご清聴ありがとうございました!
ランサーズ株式会社
インフラエンジニア
金澤 裕毅 [Kanazawa Yuki]
[2017/06/10 PHPカンファレンス福岡]
http://www.lancers.jp/
「テクノロジーで、個をエンパワ...
Upcoming SlideShare
Loading in …5
×

【PHPカンファレンス福岡】PHP 5.3 + CakePHP 1.3 → PHP 7 + CakePHP 3 移行を決めた話

3,470 views

Published on

PHPカンファレンス福岡2017で発表したスライドです。
http://phpcon.fukuoka.jp/2017/

ランサーズを、CakePHP 1.3 + PHP 5.3 から CakePHP 3 + PHP 7に移行することを決めた話です。絶賛移行中で、なぜ決めたか、どのような方法、順序で進めているかについてお話しいたします。

Published in: Engineering
  • Be the first to comment

【PHPカンファレンス福岡】PHP 5.3 + CakePHP 1.3 → PHP 7 + CakePHP 3 移行を決めた話

  1. 1. PHP 5.3 + CakePHP 1.3 ↓ PHP 7 + CakePHP 3 移行を決めた話 http://www.lancers.jp/ [2017/06/10 PHPカンファレンス福岡] ランサーズ株式会社 インフラエンジニア 金澤 裕毅 [Kanazawa Yuki] 「テクノロジーで、個をエンパワーメントする」
  2. 2. © 2017 for LANCERS, inc All Rights Reserved 自己紹介 • 氏名 • 金澤 裕毅 • 出身 • 宮城県仙台市 • 入社時期 • 2013年11月 • 業務内容 • ランサーズの運用監視 • AWS全般 • パフォーマンス改善 • コーディングも少々 • 開発支援 • 開発環境構築 • インフラ関連の支援 • 言語歴 • C、C++、VB、Java、PHP、 Golang • 趣味 • 将棋とか(一応初段) PHPエンジニア(上野)も 連れてきました。
  3. 3. © 2017 for LANCERS, inc All Rights Reserved 本日お話しさせていただく内容 ランサーズ(株)のご紹介 バージョンアップ決定の経緯 バージョンアップ計画 バージョンアップ準備 現在の状況 最後に
  4. 4. © 2017 for LANCERS, inc All Rights Reserved ランサーズ(株)のご紹介 バージョンアップ計画 バージョンアップ準備 現在の状況 最後に バージョンアップ決定の経緯
  5. 5. © 2017 for LANCERS, inc All Rights Reserved 会社概要 所在地 〒150-0002 東京都渋谷区渋谷 3-10-13 TOKYU REIT 渋谷Rビル 9F 会社名 ランサーズ株式会社 (LANCERS,INC.) 設立 2008 年 4 月 従業員 約 160 名( 2017年4月現在 ) 事業 クラウドソーシング事業 http://www.lancers.jp/ 2016/5に 福岡支社を開設
  6. 6. ランサーズが提供する「クラウドソーシング」 Crowd(群衆) Sourcing(外注) Web上で個人等に業務委託 ※エスクロー決済 ※プラットフォーム Fee 受託者 (ワーカー) 発注者 (クライアント) 発注 作業 納品 テクノロジーで 誰もが自分らしく働ける社会を創る 141のカテゴリ
  7. 7. 国内市場における仕事受給の流れ 1600億円以上の仕事流通 依頼額の54%が 東京の企業 受注額の75%が 地方の個人 3.2% 3.5% 5.0% 8.5% 12.0% 13.6% 54.3% 5.0% 7.8% 11.2% 11.5% 19.6% 20.2% 24.7% 東京 中部 関西 東京以外の関東 東京 関西 東京以外の関東 中部 九州 北海道、東北中四国 九州 中四国北海道、東北 東京 54.3% 東京以外 75.3%
  8. 8. 7 仕事の依頼例(一部のカテゴリを抜粋) • コンペ方式 • プロジェクト方式 • タスク方式
  9. 9. ランサーからもスキル商品を出品可能 自分のスキルや得意を商品に見立てて出品、逆にできないことはお願いする スキルサービスECを2016/4より開始しました
  10. 10. スキルはもちろん「得意なこと」も 詳しくは「ランサーズストア」で検索 チラシ、ライティング、SEOコンサル、似顔絵作成、WordPress構築など 個人が持つ多種多様な「スキルや得意」を相互に売り買いしています
  11. 11. © 2017 for LANCERS, inc All Rights Reserved ランサーズの提供サービス デジタルマーケティングクラウドソーシング シェアリングエコノミー 2008/12 サービス開始 2016/4 サービス開始 2017/6末 サービス開始 予定 2017夏 サービス開始 予定 2016/4 サービス開始 5/16 TVQ九州放送(テレビ東京系) 「ガイアの夜明け」で紹介
  12. 12. © 2017 for LANCERS, inc All Rights Reserved ランサーズを支える技術
  13. 13. © 2017 for LANCERS, inc All Rights Reserved ランサーズの稼働環境 EC2 App S3 ELB CloudFront SQS Cloud Search Route53 EC2 instance WebSocket ErastiCache Memcached ErastiCache Redis Aurora Reader Aurora Writer • OS:Amazon Linux • 2016/9にCentOS6から移行 • 言語:PHP 5.3.29 • CakePHP 1.3.6 • Webサーバー:Apache 2.2 • mod_php
  14. 14. © 2017 for LANCERS, inc All Rights Reserved ランサーズの開発環境 • Dockerで構築 • 本番環境とほぼ同じ構成をDockerで再現 • DockerマウントでPCとソースを共有 Virtualbox VM Docker Machine 172.17.6.11 App ランサーズ本体 172.17.4.51 WordPress コーポレート、ブログ SSH 172.17.51.11 MySQL 3306 9000 172.17.4.152 WebSocket メッセージサービス ディレクトリ 共有 SQLクライアント 開発環境(エディタ)ターミナル
  15. 15. © 2017 for LANCERS, inc All Rights Reserved バージョンアップ決定の経緯 バージョンアップ計画 バージョンアップ準備 現在の状況 最後に ランサーズ(株)のご紹介
  16. 16. © 2017 for LANCERS, inc All Rights Reserved 旧バージョンのサポート終了 • Amazon Linux AMI • 2017.09版からPHP5.3、PHP5.4が削除される予定 • CakePHP 1.3 • 2015/11/01 1.3.21でサポート終了 • PHP 5.3 • 2014/08/14 5.3.29でサポート終了 • バグが発見されたら自分たちで対応が必要な状態 • 過去には致命的なバグも • この後のLTで話します
  17. 17. © 2017 for LANCERS, inc All Rights Reserved ライブラリバージョンアップへの追従 • AWS SDK PHP • 最新バージョンのインストールにはPHP5.5上が必要 • FacebookSDK • 最新バージョンのインストールにはPHP5.4以上が必要 • PHP旧バージョンのサポート終了が早い • 現バージョンはすでにPHP 5.3をサポートしていない • PHP 5.3サポートのfork版で対応 • 現在更新停止 • 独自に手を加えて対応せざるを得ない状態
  18. 18. © 2017 for LANCERS, inc All Rights Reserved 開発生産性向上とエンジニア採用 • 最新バージョンの恩恵を受けたい • 新しいPHPの関数が使えない • 新しいPHPの仕様でコーディング出来ない • エンジニアにとって魅力のある開発環境を提供したい • 常に最新の技術やバージョンに追従したい • 特にフリーランスや外部パートナーの開発者には 死活問題 • PHP、CakePHPにもOSS貢献したい • 会社の成長フェーズの変化 • 技術を重視した方針が採用されやすくなった • バージョンアップすることを社外に宣言 • PHPコミュニティにも積極参加するようになった • CakePHP MeetUpへの参加 • 2017/04/17(第5回) • 会場提供と登壇 • PHPカンファレンスへの協賛 • 2017/06/08 • PHPカンファレンス福岡へ登壇 • 2017/10/08 • PHPカンファレンスへ協賛予定 • Cake Fest (NewYork)への協賛 • 2017/06/08 – 06/11開催中 • 弊社社員が参加中
  19. 19. © 2017 for LANCERS, inc All Rights Reserved バージョンアップ計画 バージョンアップ決定の経緯 バージョンアップ準備 現在の状況 最後に ランサーズ(株)のご紹介
  20. 20. © 2017 for LANCERS, inc All Rights Reserved バージョンアップ条件の整理 PHP バージョン PHP キャッシュ CakePHP 対応バージョン Apache バージョン PHP5.3 APC CakePHP1.3 CakePHP2 Apache 2.2 PHP5.4 CakePHP1.3 CakePHP2 Apache 2.4 PHP5.5 OPCache APCu CakePHP1.3 CakePHP2 Apache 2.4 PHP5.6 OPCache APCu CakePHP1.3 CakePHP2 CakePHP3 Apache 2.4 PHP7.0 OPCache APCu CakePHP2 CakePHP3 Apache 2.4 バージョン アップが必要 CakePHP 1.3は まともに動かない CakePHP 3 未サポート 現在の構成 json.soの インストールに問題 最も対応している PHPバージョン • ※Amazon Linuxの場合 • yumでインストールした場合 PHPとセットで インストールされる
  21. 21. © 2017 for LANCERS, inc All Rights Reserved バージョンアップ計画 PHP バージョン PHP キャッシュ CakePHP バージョン Webパッケージ バージョン(yum) PHP5.3 APC CakePHP1.3 Apache 2.2 + mod_php PHP5.3 APC CakePHP1.3 Nginx + PHP-FPM 5.3 PHP5.6 OPCache APCu CakePHP1.3 Nginx + PHP-FPM 5.6 PHP5.6 OPCache APCu CakePHP2 Nginx + PHP-FPM 5.6 PHP5.6 OPCache APCu CakePHP3 Nginx + PHP-FPM 5.6 PHP7.0 OPCache APCu CakePHP3 Nginx + PHP-FPM 7.0 Nginx + PHP-FPM に置き換え PHP 5.6まで 一気にバージョンアップ 現在の構成 最大の難関 カスタマイズ 問題を解決
  22. 22. © 2017 for LANCERS, inc All Rights Reserved Nginx + PHP-FPM化 • 現在の構成(Amazon Linuxの場合) • PHP 5.3.29 + Apache 2.2 + mod_php • PHPをバージョンアップすると、Apacheも2.4になる • Apache 2.2 → 2.4に設定ファイルをそのまま移行することは困難 • 一から設定し直しになる • それなら別の構成も検討したい • Nginx + PHP-FPM を採用 • パフォーマンスの向上に期待 • ※Nginxはソースからインストールする
  23. 23. © 2017 for LANCERS, inc All Rights Reserved Nginx + PHP-FPM化 • 移行完了 • レスポンスはほぼ同じ • サーバーリソースの消費量もほぼ同じ
  24. 24. © 2017 for LANCERS, inc All Rights Reserved PHP 5.3 → PHP 5.6 化 • PHP 5.3.29 + Nginx + PHP-FPM 5.3(Nginx移行後の構成) • json.soのインストールがうまく行かず • CentOS6時代にビルドしたバイナリをそのまま利用 • PHP 5.4 + Nginx + PHP-FPM 5.4 • json.soのインストールがうまく行かず • PHP 5.6 + Nginx + PHP-FPM 5.6 • 問題なし • CakePHP 1.3、CakePHP 2、CakePHP 3全てのバージョンに対応 • PHP 5.3 → PHP 5.6まで一気にバージョンアップ • 移行時に必要な修正 • PHP 5.3.x から PHP 5.4.x への移行 • http://php.net/manual/ja/migration54.php • PHP 5.4.x から PHP 5.5.x への移行 • http://php.net/manual/ja/migration55.php • PHP 5.5.x から PHP 5.6.x への移行 • http://php.net/manual/ja/migration56.php • ※Dockerコンテナをそれぞれ用意し、併用しながら修正する • PHP 5.6コンテナ • PHP 5.3コンテナ
  25. 25. © 2017 for LANCERS, inc All Rights Reserved PHP 5.3 → PHP 5.6 化 • PHP 5.6をインストールした開発環境のDockerコンテナを構築する Virtualbox VM Docker Machine 172.17.6.11 App PHP5.3 ランサーズ本体 ディレクトリ 共有 開発環境(エディタ) 9000
  26. 26. © 2017 for LANCERS, inc All Rights Reserved PHP 5.3 → PHP 5.6 化 • PHP 5.6 版の開発環境(Dockerコンテナ)を構築 Virtualbox VM Docker Machine 172.17.6.11 App PHP5.3 ランサーズ本体 172.17.6.11 App PHP 5.6 ランサーズ本体 ディレクトリ 共有 開発環境(エディタ) 9000
  27. 27. © 2017 for LANCERS, inc All Rights Reserved PHP 5.3 → PHP 5.6 化 • PHP 5.3コンテナ → PHP 5.6版コンテナに切り替え • 今後はPHP 5.6版コンテナをメインに開発 • レガシーなコードを排除していく Virtualbox VM Docker Machine 172.17.6.11 App PHP5.3 ランサーズ本体 172.17.6.11 App PHP 5.6 ランサーズ本体 ディレクトリ 共有 開発環境(エディタ) 9000
  28. 28. © 2017 for LANCERS, inc All Rights Reserved PHP 5.3 → PHP 5.6 化 Virtualbox VM Docker Machine 172.17.6.11 App PHP5.3 ランサーズ本体 172.17.6.11 App PHP 5.6 ランサーズ本体 ディレクトリ 共有 開発環境(エディタ) 9000 • 互換性を検証したいときだけPHP 5.3版コンテナに戻す
  29. 29. © 2017 for LANCERS, inc All Rights Reserved PHP 5.6コンテナ切り替え結果(現状) • 表向きは問題なく見える状態 • ログにWARNINGが多発 • Nginxのerror.log • PHP-FPMのerror.log 2017/06/08 01:38:06 [error] 12029#0: *87 FastCGI sent in stderr: "PHP message: PHP Strict Standards: Non-static method Configure::getInstance() should not be called statically in /var/www/lancers/cake/bootstrap.php on line 38 PHP message: PHP Strict Standards: Non-static method CakeLog::handleError() should not be called statically in /var/www/lancers/cake/libs/cake_log.php on line 290 PHP message: PHP Strict Standards: Non-static method CakeLog::handleError() should not be called statically in /var/www/lancers/cake/libs/debugger.php on line 707" while reading response header from upstream, client: 172.17.0.5, server: dev.lancers.jp, request: "GET /user/login?1496853486&ref=header_menu HTTP/1.1", upstream: "fastcgi://unix:/var/run/php-fpm/php-fpm.sock:", host: "dev.lancers.jp", referrer: http://dev.lancers.jp/ PHP message: PHP Warning: curl_setopt() expects parameter 2 to be long, string given in /var/www/lancers/app/vendors/AmazonSDK/lib/requestcore/requestcore.class.php on line 610 [08-Jun-2017 01:44:52] WARNING: [pool www] child 13007 said into stderr: "NOTICE: PHP message: PHP Strict Standards: Non-static method CakeLog::handleError() should not be called statically in /var/www/lancers/cake/libs/cake_log.php on line 290" [08-Jun-2017 01:44:52] WARNING: [pool www] child 13007 said into stderr: "NOTICE: PHP message: PHP Strict Standards: Non-static method CakeLog::handleError() should not be called statically in /var/www/lancers/cake/libs/debugger.php on line 707" [08-Jun-2017 01:44:52] WARNING: [pool www] child 13006 said into stderr: "NOTICE: PHP message: PHP Strict Standards: Non-static method Configure::getInstance() should not be called statically in /var/www/lancers/cake/bootstrap.php on line 38"
  30. 30. © 2017 for LANCERS, inc All Rights Reserved CakePHP 1.3 → CakePHP 3 化 • 最大の難関 • 現在も方針を議論中 • CakePHP 1.3を直接カスタマイズしている問題 • ビューキャッシュ関連処理不具合の暫定対応 • スマホ用ビューキャッシュの生成処理を追加 • disableCacheをオーバーロード • ドメイン判定の正規表現を変更 • ページネーターの表示が途中で止まる問題の対応 • リンクをクエリストリング形式にするセッションの問題 • ページネーターのオーバーライド • Amazon RDS デフォルトUTC問題の対応 • validationエラー時にログを吐き出す • ページングの“次” “前” が無い場合にNULL表示出来ない問題の修正 • beforeActionメソッドを追加 • URLの「order」パラメーターを削除 • SQLインジェクション対策 • Securityコンポーネントのフォームの改竄チェック周りの修正 • テストコードの修正 • 致命的なバグの回避 • この後のLTで話します • 他多数
  31. 31. © 2017 for LANCERS, inc All Rights Reserved CakePHP 1.3 → CakePHP 3 化 • 現在も方針を議論中 • CakePHP 1.3.6 → 1.3.21 • まずは確実にマイナーバージョンアップしたい • 現在、一部だけ手動マージしている状態 • カスタマイズ箇所をまずは何とかしないと • CakePHP 1.3 → 2 • CakePHP 1.3 → 2へのマイグレーションスクリプトが不安 • カスタマイズのソース量と影響範囲が広すぎる • 一気に書き換えることは困難では? • →現在検証中 • CakePHP 2 → 3 • CakePHP 1.3 → 2よりも大変 • モデル周りが全て変更されている • CakePHP 1.3 → 2 が成功すれば環境的にはやりやすくなるはず • 独自のカスタマイズがない状態で進められる • CakePHP 1.3 → 3(一気にバージョンアップする案) • CakePHP 2 → 3自体がそもそも大変 • それなら、まとめてやってしまう案 • 一部を差し替える or 振り分ける方法とか… • CakePHP 3から呼び出す方法とか… • CakePHP1.3のbootstrap.phpから、URIパス指定で3.4.xに切り替える方法とか… • ご意見ください!(詳しい方、経験者)
  32. 32. © 2017 for LANCERS, inc All Rights Reserved エンジニアブログで告知(5/26) • いただいたフィードバック • PHP 7.0にするなら7.1までバージョンアップした方が良い • CakePHP 1.3 → 2にとどめておいた方が良い • CakePHP 1.3 → 3をやるなら、3で新しく作ったほうが効率的 • Apache 2.4のバージョンアップはそれほど大変ではない • Nginx + php-fpm移行は後回しにしてもよいのでは? • ヤバい • ツラい
  33. 33. © 2017 for LANCERS, inc All Rights Reserved PHP 5.6 → PHP 7.x 化 • PHP7.0で多くの互換性が排除されている • CakePHP 2以上になればPHP7にバージョンアップ可能 • CakePHPバージョンアップ後にじっくり行う • 移行時に必要な修正 • PHP 5.6.x から PHP 7.0.x への移行 • http://php.net/manual/ja/migration56.php • PHP 7.0.x から PHP 7.1.x への移行 • http://php.net/manual/ja/migration71.php • ※Amazon Linuxの場合 • PHP7.0 • yumでインストール可能(AMI 2016.09以降) • PHP7.1 • remiリポジトリならインストール可能
  34. 34. © 2017 for LANCERS, inc All Rights Reserved バージョンアップ準備 バージョンアップ決定の経緯 バージョンアップ計画 現在の状況 最後に ランサーズ(株)のご紹介
  35. 35. © 2017 for LANCERS, inc All Rights Reserved 移行しやすいソースにするために • 対応完了したもの • CakePHP View Cache(NFSに格納)の廃止 • 2016/6に完全廃止(Memcachedで代替) • NFSも撤廃 • View Cache関連処理を削除中 • 画面が真っ白になる不具合が発生していた • CakePHP本体を修正して対応していた • CakePHP HTML Cacheの廃止 • 2017/4に完全廃止(Memcachedで代替) • HTML Cache関連の処理を削除 EC2 EC2 instance NFS App MemCached EC2 instance View Cache HTML Cache
  36. 36. © 2017 for LANCERS, inc All Rights Reserved 移行しやすいソースにするために • 現在対応中のもの • レスポンシブ対応 • モバイル用の処理をごっそり削除できる • モバイル判定処理 • モバイル用のView実装 • 2017/6/5 TOPページリニューアル(レスポンシブ化) モバイル用の View実装 PC用の View実装 PC用の View実装 PC用の View実装 PC用の View実装
  37. 37. © 2017 for LANCERS, inc All Rights Reserved 移行しやすいソースにするために • 今後対応していきたいもの • フルhttps化 • http⇔httpsリダイレクト処理が不要に • AWS ELBのSSL Terminationを考慮した判定ロジックも不要に • http⇔httpsのクロスドメイン問題の考慮が不要に • Batchソースの分離 • Batch専用に最新環境でプロジェクトを作成 • PHP 7 • CakePHP 3(※必要な処理のみ利用) • GC問題を抱えやすいため • DigDag • cronの代替
  38. 38. © 2017 for LANCERS, inc All Rights Reserved コーディングガイドラインの共有 • PHP 7化への布石 • PHPバージョン間での禁止事項をまとめる • http://php.net/manual/ja/migration54.incompatible.php • http://php.net/manual/ja/migration55.incompatible.php • http://php.net/manual/ja/migration56.incompatible.php • http://php.net/manual/ja/migration70.incompatible.php • CIで品質レベルの向上&維持 • PSR(PHP Standards Recommendations)への準拠 • http://www.php-fig.org/psr/ • PHP-CS-Fixerの導入 • https://github.com/fabpot/PHP-CS-Fixer • PSR-0, PSR-1、PSR-2に準拠したフォーマットにソースを全書き換え • pre-commit時に作動して自動修正 • Circle CIでマージ前にチェック • 各エディターでも対応(PHPStormのreformat等) • PHP7.0でのsyntaxチェック • Circle CIをPHP7.0でビルドしてPHP構文チェック • UTを継続実行 • 計画中
  39. 39. © 2017 for LANCERS, inc All Rights Reserved UT Green化計画 • CakePHP Test Suiteのテストジョブがエラーのまま放置されている • バージョンアップによるエラーを素早く検知できる体制にしておきたい • CIで回せるレベルまで持っていく • 現状 • 全テストジョブ:約10000 • エラージョブ:約1800 • 全テストの実行時間:約22時間
  40. 40. © 2017 for LANCERS, inc All Rights Reserved 現在の状況 バージョンアップ決定の経緯 バージョンアップ計画 バージョンアップ準備 最後に ランサーズ(株)のご紹介
  41. 41. © 2017 for LANCERS, inc All Rights Reserved エンジニア合宿(5/27-5/28) • エラーテストジョブを潰しまくる • 合宿直前:約1800 → 約160まで削減 • 芋づる式に削減できるところから着手 • 合宿直後:約160→16まで削減 • 現在:16→
  42. 42. © 2017 for LANCERS, inc All Rights Reserved UT実行時間の短縮 • 余計なfixtureでのDB生成をやめる • Fixture設定があってもDB生成しないようにする • fixtureを利用しない親クラスを作成 • fixture不要なメソッドを別ファイルへ分離 • →1テストの実行時間が1/70~1/1000に短縮
  43. 43. © 2017 for LANCERS, inc All Rights Reserved UT実行時間の短縮 • Web上で実行するよりCLIで実行した方が早い • CLIでグループ単位で1個ずつ実行する • グループ数:約300グループ • 実行時間:約22時間 → 約4時間に短縮 • 1グループあたりの実行時間:最長で約8分 • チューニング継続中 • 現在の実行時間:約48分 • CIで回すなら10分は切りたい • 並列で回すとか… • DB生成、破棄をDockerレベルで行うとか… 1 ../../cake/console/cake -noclear 1 testsuite app case basic.payments | awk '{print substr($0, index($0, "1/1"))}' 2 ../../cake/console/cake -noclear 1 testsuite app case behaviors/affiliate_manager | awk '{print substr($0, index($0, "1/1"))}' 3 ../../cake/console/cake -noclear 1 testsuite app case behaviors/approved_expert_user | awk '{print substr($0, index($0, "1/1"))}' 4 ../../cake/console/cake -noclear 1 testsuite app case behaviors/billing | awk '{print substr($0, index($0, "1/1"))}' … 298 ../../cake/console/cake -noclear 1 testsuite app case models/work_task | awk '{print substr($0, index($0, "1/1"))}' 299 ../../cake/console/cake -noclear 1 testsuite app case models/work2 | awk '{print substr($0, index($0, "1/1"))}' 300 ../../cake/console/cake -noclear 1 testsuite app case models/works_label | awk '{print substr($0, index($0, "1/1"))}’ 301 ../../cake/console/cake -noclear 1 testsuite app case vendors/price_calculations | awk '{print substr($0, index($0, "1/1"))}' 302 ../../cake/console/cake -noclear 1 testsuite app case vendors/sfdc_adapter | awk '{print substr($0, index($0, "1/1"))}'
  44. 44. © 2017 for LANCERS, inc All Rights Reserved 新サービスをPHP7+CakePHP3で開発 • 新サービスを新バージョンで開発し、予め知見を貯めておく • Lancers Top(2017夏リリース予定) • PHP 7.0 + CakePHP 3.4 で開発中 • Amazon Linux AMI 2017.03 • yumでPHP 7.0をインストール • PHP 7.1にバージョンアップ予定 • remiリポジトリからPHP 7.1をインストール 上野が開発中
  45. 45. © 2017 for LANCERS, inc All Rights Reserved 最後に バージョンアップ決定の経緯 バージョンアップ計画 バージョンアップ準備 現在の状況 ランサーズ(株)のご紹介
  46. 46. © 2017 for LANCERS, inc All Rights Reserved CakePHP 3.4 ソースコードリーディング • 第1回(2017/03/22)- リクエストのライフサイクル • http://bit.ly/2rI6KG6 • 第2回(2017/04/04)- ORMパッケージ • http://bit.ly/2rR7QBL • 第3回(2017/06/22 予定) • http://bit.ly/2sxCsWG
  47. 47. © 2017 for LANCERS, inc All Rights Reserved PHPエンジニア採用中! 46 エントリーはこちら! https://www.wantedly.com/projects/88797/
  48. 48. ご清聴ありがとうございました! ランサーズ株式会社 インフラエンジニア 金澤 裕毅 [Kanazawa Yuki] [2017/06/10 PHPカンファレンス福岡] http://www.lancers.jp/ 「テクノロジーで、個をエンパワーメントする」

×