Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Sign up for free
Menu
Search
Features
All features
Private URLs
Password Protection
Custom URLS
Scheduled publishing
Remove Branding
Restrict embedding
Deck Collections
Notes
Features
All features
Private URLs
Password Protection
Custom URLS
Scheduled publishing
Remove Branding
Restrict embedding
Deck Collections
Notes
Explore
Featured decks
Featured speakers
Programming
Technology
Storyboards
Explore
Featured decks
Featured speakers
Programming
Technology
Storyboards
Pricing
Search
Sign in
Sign up for free
3ヶ月でphp5.5から7.2にバージョンアップした現在と今後の向き合い方 #PHPerKai...
Search
Sponsored
·
Your Podcast. Everywhere. Effortlessly.
Share. Educate. Inspire. Entertain. You do you. We'll handle the rest.
→
kosa3
March 30, 2019
Technology
4.3k
1
Share
Embed
Copy iframe code
Copy JS code
Copy link
Start on current slide
3ヶ月でphp5.5から7.2にバージョンアップした現在と今後の向き合い方 #PHPerKaigi 2019
PHPerKaigi 2019での発表資料です。
kosa3
March 30, 2019
More Decks by kosa3
See All by kosa3
今からでも間に合うphp5.5からphp7.2にバージョンアップした話 #phpcon
kosa3
5
1.8k
Other Decks in Technology
See All in Technology
ペアプロの価値はコードを書くことだけじゃない
codmoninc
PRO
0
210
20260906 「AWS運用入門」著者が教える、運用業務への生成AI活用入門
masaruogura
0
260
クロスボーダーM&AのValue Upを支えるプロダクト開発。日米チームのハブになったプロダクトエンジニアの実践 / Product Engineering Conference 2026
genda
0
120
WAF 運用改善の承認サイクル/SRE_BizReach_MIXI_1
visional_engineering_and_design
2
620
多層防御と最⼩権限で実現する、安全なAIエージェント設計パターン
lycorptech_jp
PRO
1
280
Sigmaで作る業務アプリ
kazushiro_honma
0
130
From Vanilla Kubernetes to a Batteries-Included Platform: Developer Experience at 1,300+ Clusters
yosshi_
0
700
2026/09/10 Spring Bootから Jakarta EE/MicroProfileへの移行
megascus
0
350
SQL文一行も書けない人事がCortexもろもろを使って人事業務を楽にしてみる
ponponmikankan
1
230
フルカイテン株式会社 エンジニア向け採用資料
fullkaiten
0
12k
コスト最適化の「めんどくさい」を AWS FinOps Agent でチョット楽にする
classmethod_kaz
0
330
消えない 動かない 効かない
yama3133
1
120
Featured
See All Featured
How to audit for AI Accessibility on your Front & Back End
davetheseo
0
530
Scaling GitHub
holman
464
140k
Everyday Curiosity
cassininazir
0
320
個人開発の失敗を避けるイケてる考え方 / tips for indie hackers
panda_program
123
22k
The AI Revolution Will Not Be Monopolized: How open-source beats economies of scale, even for LLMs
inesmontani
PRO
3
3.7k
The browser strikes back
jonoalderson
0
1.7k
SEOcharity - Dark patterns in SEO and UX: How to avoid them and build a more ethical web
sarafernandez
0
270
How to train your dragon (web standard)
notwaldorf
97
6.8k
KATA
mclloyd
PRO
35
15k
RailsConf & Balkan Ruby 2019: The Past, Present, and Future of Rails at GitHub
eileencodes
141
35k
A brief & incomplete history of UX Design for the World Wide Web: 1989–2019
jct
2
500
Color Theory Basics | Prateek | Gurzu
gurzu
0
460
Transcript
3ヶ月でphp5.5から7.2に バージョンアップした現在と 今後の向き合い方 菅原 佑太 / kosa3 株式会社ウエディングパーク
PHPバージョンアップしてますか?
Web業界のPHPバージョンアップの実態 その他 21.1% PHP 78.9% WebサイトにPHPを採用している企業 (2018/11/21) ・中でもPHP5系のWebサイトは61.6%! ・PHP5系 2018年内でのサポート終了
=>多くの企業でPHPのセキュリティ サポートがきれてしまう… 参照:https://techtarget.itmedia.co.jp/tt/news/1811/21/news07.html
・自己紹介 & 会社紹介 ・PHPバージョンアップの過程とハマりポイントの共有 ・PHPバージョンアップ後のサイトの変化 ・今後のPHPバージョンアップを見据えてやりたかったこと アジェンダ
・結婚・婚約指輪の口コミサイト 「Ringraph(リングラフ)」の 運用・開発責任者 ・サーバーサイドエンジニア ・PHPer歴 3年 ・Goやjs界隈も好きです 菅原 佑太 株式会社ウエディングパーク
新卒3年目/チーフエンジニア kosa3
公式キャラクター「ウエパ」
PHILOSOPHY
運営サービス
・ウエディングパークの姉妹サイト ・指輪選びの決め手が見つかるクチコミ サイト ・2015年 9月からサービススタート(3歳) ・クチコミ数2万件以上 Ringraph
・PHP5.5 ・Codeigniter 3.0 ・インフラはAWSで構成 当時のシステム
? 内部セキュリティチェッ ク実施 リリース 2018/8 2018/9 2018/10 2018/11 2018/12 ?
?
・社内でセキュリティチェック実施での指摘 ・RingraphとPhotoraitがバージョンアップ対象 ・2018年内にリリースMust リリースまで約3ヶ月、、、。 PHPバージョンアップのきっかけ
・3ヶ月のタイトなスケジュール ・PHPのバージョンアップのノウハウ不足 ・人員リソース不足 当時の運用体制(エンジニア・デザイナー・ディレクタ1名ずつ) PHPバージョンアップの不安点
まずは調査開始
None
None
phpの公式ドキュメントから 移行について洗い出し、 該当するか調べる 調査 その1
None
None
大体つまずきそうなところは分かった!
Docker環境を作り PHPのバージョンをあげて検証してみる 調査 その2
None
$ docker-compose up
None
まぁまぁここまでは想定内… きっと他のミドルやモジュールの 関係だろう
調査結果
・Codeigniter Framework ・CentOS ・Apache ・node.js ・ruby ・composer ・mod_small_light module ・mcrypt
module ・その他モジュールやクライアントライブラリなど PHP以外に必要なバージョンアップ
None
・1人での開発リソースは半年程の見積もり ・運用案件の並行開発 ・2018年内リリース[Must] 10月からエンジニアを2名増員! 急遽エンジニア2名増員
スケジュール調整 基盤環境構築・開発 ? 内部セキュリティチェッ ク実施 リリース 2018/8 2018/9 2018/10 2018/11
2018/12 ?
・管理画面と公開画面の基盤作成 ・10月エンジニア2名のスムーズな参画の準備 9月 PJキックオフ
・Memcachedモジュール問題 ・mcryptモジュールの非推奨に伴うリプレイス ・画像リサイズmod_small_lightモジュールリプレイス 9月 初期画面表示までにハマったこと
・Memcachedモジュール問題 ・mcryptモジュールの非推奨に伴うリプレイス ・画像リサイズmod_small_lightモジュールリプレイス 9月 初期画面表示までにハマったこと
memcached libMemcachedのバージョン依存問題 /usr/local/src/php-memcached/php_libmemcached_compat.h:56: error: expected '=', ',', ';', 'asm' or
'__attribute__' before 'php_memcached_instance_st' *wgetで最新のソースからインストールする必要がある。 memcache 現在開発が止まっていてphp7に対応していない。 歴史のあるサイトだとmemcachedあるいは別サービスを利用 するなどの検討も。 Memcachedモジュール問題
・Memcachedモジュール ・mcryptモジュールの非推奨に伴うリプレイス ・画像リサイズmod_small_lightモジュールリプレイス 9月 初期画面表示までにハマったこと
・PHP7.2からmcrypt暗号化モジュールが完全非推奨 => 全てOpenSSLに変更 mcryptの完全非推奨
mcryptよりOpenSSLの方が処理速度も良い mcryptの完全非推奨
openssl vs mcrypt 環境:MacOS, PHP7.0(mcrypt), PHP7.2(openssl) 暗号化、復号化回数: 1000回 key: Seattle
Mariners value: イチロー引退 method: AES-128-ECB 暗号化、復号化の速度検証。。!
openssl vs mcrypt 環境:MacOS, php7.0(mcrypt), php7.2(openssl) 暗号化、復号化回数: 1000回 key: Seattle
Mariners value: イチロー引退 method: AES-128-ECB mcrypt encrypt time: 0.078732013702393 decrypt time: 0.068650007247925
openssl vs mcrypt 環境:MacOS, php7.0(mcrypt), php7.2(openssl) 暗号化、復号化回数: 1000回 key: Seattle
Mariners value: イチロー引退 method: AES-128-ECB openssl encrypt time: 0.00084805488586426 decrypt time: 0.00096797943115234
mcryptで暗号化された値をOpenSSLで復号化 mcryptのpaddingの仕様で暗号化の差異が発生する => 無理に合わせる関数を作るか、OpenSSLに移行する か。。 mcryptの完全非推奨
・Memcachedモジュール ・mcryptモジュールの非推奨に伴うリプレイス ・画像リサイズmod_small_lightモジュールリプレイス 9月 初期画面表示までにハマったこと
・memcachedモジュール ・mcryptモジュールの非推奨に伴うリプレイス ・画像リサイズmod_small_lightモジュールリプレイス 9月 初期画面表示までにハマったこと =>姉妹サイトの「Weddingpark DRESS」がlambdaでの 画像リサイズを導入していたので横展させてもらう
・mod_dimsなど他モジュールで代用 ・コンテンツサーバーを用意 ・有償CDN (imgix, Fastly Image Optimizer...) ・lambda でリサイズ関数を作成 画像リサイズmod_small_lightのアーキテクチャ変更
要件) 画像のリサイズ、 短い工数で、 サーバー負荷抑えたい
・mod_dimsなど他モジュールで代用 ・コンテンツサーバーを用意 ・有償CDN (imgix, Fastly Image Optimizer...) ・lambda でリサイズ関数を作成 画像リサイズmod_small_lightのアーキテクチャ変更
要件) 画像のリサイズ、 短い工数で、 サーバー負荷抑えたい
アーキテクチャ
スケジュール調整 基盤環境構築・開発 ? 内部セキュリティチェッ ク実施 新エンジニア2人参画 PHPバージョンアップ開 発 リリース 2018/8
2018/9 2018/10 2018/11 2018/12
開発体制 10月 新エンジニア参画・開発 タスク管理 エラー検知
・動くようにする ・ログなどのエラーが出ないようにする ・リファクタリング(コードレビュー負荷軽減、 余計なロジック周りのテストの影響範囲を抑える) やるべきこと やらないこと プロジェクトルール
・PHP7.2からのcountの仕様変更 ・Cloudfrontの導入によるIP問題 ・php7系のエラーハンドリングの仕様変更 ・既存システムの不具合 10月 開発時にハマったこと
・PHP7.2からのcountの仕様変更 ・Cloudfrontの導入によるIP問題 ・php7系のエラーハンドリングの仕様変更 ・既存システムの不具合 10月 開発時にハマったこと
・PHP7.2から配列またはcontableインタフェースで 実装されたObject以外だとWarningエラーを出力 Warning: count(): Parameter must be an array or
an object that implements Countable サイト全体的に影響が大きい仕様変更 PHP7.2からのcountの仕様変更
・PHP7.3からcountの判定をするメソッドが実装された PHP7.2からのcountの仕様変更
・php7.2からのcountの仕様変更 ・Cloudfrontの導入によるIP問題 ・php7系のエラーハンドリングの仕様変更 ・既存システムの不具合 10月 開発時にハマったこと
サイト全体にCDNを導入 クチコミ投稿時やログなどの記録で固定のipが入る $ip = $_SERVER['REMOTE_ADDR']; // CloudfrontのIPが入る $ip = $_SERVER['HTTP_X_FORWARDED_FOR'];
// アクセスIP元まで取得 *またCloudfrontのデフォルトオリジンレスポンスタイムアウトは30秒 レポートなど処理の長い時間がかかる場合は注意 Cloudfront導入によるIP問題
・PHP7.2からのcountの仕様変更 ・Cloudfrontの導入によるIP問題 ・PHP7系のエラーハンドリングの仕様変更 ・既存システムの不具合 10月 開発時にハマったこと
PHP7系から大半のエラーがErrorクラスとして例外を 報告するようになり、php5系でのcatchして Exceptionを検知するだけでは十分ではなくなった。 ThrowableはErrorとExceptionで実装されている *Errorクラスのduplicateに注意 php7系のエラーハンドリングの仕様変更
・php7.2からのcountの仕様変更 ・Cloudfrontの導入によるIP問題 ・PHP7系のエラーハンドリングの仕様変更 ・既存システムの不具合 10月 開発時にハマったこと
・全体に及ぶ影響から全範囲を開発・テスト ・意図せぬ不具合を発覚(Sentry, 監査) ・修正 & 報告書 => 工数に入れていない&対応に時間がかかる 既存システムの不具合
スケジュール調整 基盤環境構築・開発 外部セキュリティチェッ ク実施 内部セキュリティチェッ ク実施 新エンジニア2人参画 PHPバージョンアップ開 発 リリース
2018/8 2018/9 2018/10 2018/11 2018/12
・2~3週間でセキュリティチェック実施 ・大きな問題なしでリソースに余裕が発生 リソースに余裕が出たので11月はテストコードを導入 社外セキュリティチェック
・Controller、Model中心に導入 カバレッジ (70~80%) ・CircleCIで自動テスト実施 unitテスト導入
スケジュール調整 基盤環境構築・開発 外部セキュリティチェッ ク実施 内部セキュリティチェッ ク実施 新エンジニア2人参画 PHPバージョンアップ開 発 リリース
2018/8 2018/9 2018/10 2018/11 2018/12
・早朝のアクセスが少ない時間にメンテナンス画面 ・新サーバーへのDNS切り替え ・リリース完了! リリース方法
リリース後のサイト
画面平均1.2秒の改善へ!姉妹サイトも同様に改善 サイトパフォーマンス
よかったこと ・PJ開発ルールの統一 ・ミドルのバージョンをモダンにできた ・WAF、CloudFrontなどアーキテクチャを追加 ・SEO対策、パフォーマンス施策など打てた ・php-cs-fixerを導入し、コードの統一した ・テストコードを導入し、CircleCIで自動テストを運用できた ・姉妹サイトと連携を取りながら進めることができた
課題だったこと ・全体工数見積もりの算出 ・既存システムの不具合にかかるリソースコスト ・現行システムの運用案件の並行開発
次回やってみたいこと
・CIでPHP最新バージョンのテスト実行環境準備 ・ALBのコンテントベースルーティングでの開発 ・本番環境のコンテナ化 ・E2Eテスト ・カナリアデプロイ ・PHP7を活かしたコードへのリファクタリング 次回やってみたいこと
まとめ
・PHPの下位互換性が大きい ・サイト構成の見直しのきっかけができた ・廃止された関数やモジュールは事前にチェック ・実施後はサイトパフォーマンスやSEOへの評価が向上 ・エンジニアのモチベーションアップ まとめ
最後に
バージョンアップをする際には いつまでに何をどこまでするかを事前に目標立てることで バージョンアップ以上の成果を出すことができる!
よきバージョンアップライフを!
ご静聴ありがとうございました