Slide 1

Slide 1 text

今からでも間に合う php5.5からphp7.2に バージョンアップした話 菅原 佑太 / kosa3 株式会社ウエディングパーク

Slide 2

Slide 2 text

・結婚・婚約指輪の口コミサイト  「Ringraph」の運用・開発責任者 ・サーバーサイドエンジニア ・Serverless Framework, Nuxt.js勉強中 菅原 佑太 株式会社ウエディングパーク 新卒3年目/チーフエンジニア kosa3

Slide 3

Slide 3 text

・ウエディングパークの姉妹サイト ・2015年 9月からサービススタート(3歳) ・クチコミ数2万件以上 ・php + CodeIgniterで構成

Slide 4

Slide 4 text

それは突然のことでした…

Slide 5

Slide 5 text

「社内で実施している セキュリティチェックで 1つお願いしたいことがあるんだが...」 上司

Slide 6

Slide 6 text

「なんですか?」 ぼく

Slide 7

Slide 7 text

「PHPのバージョンアップを お願いしてもよいかな?」 上司

Slide 8

Slide 8 text

「いつまでにですか?」 ぼく

Slide 9

Slide 9 text

「3ヶ月くらいで…」 上司

Slide 10

Slide 10 text

「ちょ、調査します!!!」 ぼく

Slide 11

Slide 11 text

No content

Slide 12

Slide 12 text

既に2016年でサポート終了

Slide 13

Slide 13 text

今回あげるバージョンは7.2

Slide 14

Slide 14 text

早速、工数見積もり調査を開始

Slide 15

Slide 15 text

phpの公式ドキュメントから 移行について洗い出し、 該当するか調べる 調査 その1

Slide 16

Slide 16 text

No content

Slide 17

Slide 17 text

大体つまずきそうなところは分かった!

Slide 18

Slide 18 text

Docker環境を作り、 phpのバージョンをあげて検証してみる 調査 その2

Slide 19

Slide 19 text

$ docker-compose up

Slide 20

Slide 20 text

No content

Slide 21

Slide 21 text

まぁまぁここまでは想定内… きっと他のミドルやモジュールの 関係だろう

Slide 22

Slide 22 text

調査結果

Slide 23

Slide 23 text

・Codeigniter Framework ・CentOS ・Apache ・node.js ・ruby ・composer ・mod_small_light module ・mcrypt module ・その他モジュールやクライアントライブラリなど PHP以外に必要なバージョンアップ

Slide 24

Slide 24 text

No content

Slide 25

Slide 25 text

3ヶ月で終わるのこれ…

Slide 26

Slide 26 text

急遽エンジニア2人増員

Slide 27

Slide 27 text

・動くようにする ・ログなどのエラーが出ないようにする ・リファクタリング(コードレビュー負荷軽減、  余計なロジック周りのテストの影響範囲を抑える) やるべきこと やらないこと

Slide 28

Slide 28 text

バージョンアップPJでの課題3選 ・暗号化モジュールmcryptの完全非推奨 ・画像リサイズmod_small_lightのアーキテクチャ変更 ・既存システムの不具合

Slide 29

Slide 29 text

バージョンアップPJでの課題3選 ・暗号化モジュールmcryptの完全非推奨 ・画像リサイズmod_small_lightのアーキテクチャ変更 ・既存システムの不具合

Slide 30

Slide 30 text

・php7.2からmcrypt暗号化モジュールが完全非推奨  => 全てOpenSSLに変更 mcryptの完全非推奨

Slide 31

Slide 31 text

mcryptよりOpenSSLの方が処理速度も良いらしい 【参照】 http://yut.hatenablog.com/entry/20140228/1393543543 mcryptの完全非推奨

Slide 32

Slide 32 text

バージョンアップPJでの課題3選 ・暗号化モジュールmcryptの完全非推奨 ・画像リサイズmod_small_lightのアーキテクチャ変更 ・既存システムの不具合

Slide 33

Slide 33 text

・mod_dimsなど他モジュールで代用 ・コンテンツサーバーを用意 ・serverless でリサイズ関数を作成する 画像リサイズmod_small_lightのアーキテクチャ変更 mod_small_lightの後継者探し (サーバー負荷も抑えたい)

Slide 34

Slide 34 text

・mod_dimsなど他モジュールで代用 ・コンテンツサーバーを用意 ・serverless でリサイズ関数を作成する 画像リサイズmod_small_lightのアーキテクチャ変更 Apache2.4でmod_small_lightの後継者探し (ついでにサーバー負荷も抑えたい) =>姉妹サイトの「DRESPIC」がlambdaでの   画像リサイズを導入していたので横展させてもらう

Slide 35

Slide 35 text

アーキテクチャ

Slide 36

Slide 36 text

バージョンアップPJでの課題3選 ・暗号化モジュールmcryptの完全非推奨 ・画像リサイズmod_small_lightのアーキテクチャ変更 ・既存システムの不具合

Slide 37

Slide 37 text

・全体に及ぶ影響から全範囲を開発・テストする ・意図せぬ不具合を発覚(Sentry, 監査) ・修正 & 報告書 => 工数に入れていない&対応に時間がかかる 既存システムの不具合

Slide 38

Slide 38 text

まとめ

Slide 39

Slide 39 text

よかったこと ・PJ開発ルールの統一 ・ミドルのバージョンをモダンにできた ・WAF、CloudFrontなどアーキテクチャを追加 ・SEO対策、パフォーマンス施策など打てた ・php-cs-fixerを導入し、コードの統一した ・テストコードを導入し、CircleCIで自動テストを運用できた

Slide 40

Slide 40 text

課題だったこと ・全体工数見積もりの算出 ・既存システムの不具合にかかるリソースコスト ・現行システムの運用案件の並行開発

Slide 41

Slide 41 text

最後に

Slide 42

Slide 42 text

タイトなスケジュールでも 事前にやることやらないことを 明確化することで最低限のリソースで 進めることができました (今回だけかも…)

Slide 43

Slide 43 text

でもやっぱり バージョンはこまめにあげましょう

Slide 44

Slide 44 text

ご静聴ありがとうございました