できるphp7アップグレード...•pearを利用した独自フレームワーク...
TRANSCRIPT
![Page 1: できるPHP7アップグレード...•PEARを利用した独自フレームワーク •ユニットテスト カバレッジ率 1%未満(感覚値) PHPアプリケーション 9](https://reader035.vdocuments.pub/reader035/viewer/2022071105/5fdf96c779ed1a24c36fe5b3/html5/thumbnails/1.jpg)
バーチー / GMO PEPABO inc. 2017.10.08 / PHPカンファレンス2017
できるPHP7アップグレード
![Page 3: できるPHP7アップグレード...•PEARを利用した独自フレームワーク •ユニットテスト カバレッジ率 1%未満(感覚値) PHPアプリケーション 9](https://reader035.vdocuments.pub/reader035/viewer/2022071105/5fdf96c779ed1a24c36fe5b3/html5/thumbnails/3.jpg)
![Page 4: できるPHP7アップグレード...•PEARを利用した独自フレームワーク •ユニットテスト カバレッジ率 1%未満(感覚値) PHPアプリケーション 9](https://reader035.vdocuments.pub/reader035/viewer/2022071105/5fdf96c779ed1a24c36fe5b3/html5/thumbnails/4.jpg)
PHP5.2からPHP7.1にアップグレード!
4
![Page 5: できるPHP7アップグレード...•PEARを利用した独自フレームワーク •ユニットテスト カバレッジ率 1%未満(感覚値) PHPアプリケーション 9](https://reader035.vdocuments.pub/reader035/viewer/2022071105/5fdf96c779ed1a24c36fe5b3/html5/thumbnails/5.jpg)
•PHP5.2から7.1へアップグレードする困難
•PHPアップグレードを安全かつ短期間で遂行するための計画と戦略 •PHPアップグレードのその後
今日お話すること
5
![Page 6: できるPHP7アップグレード...•PEARを利用した独自フレームワーク •ユニットテスト カバレッジ率 1%未満(感覚値) PHPアプリケーション 9](https://reader035.vdocuments.pub/reader035/viewer/2022071105/5fdf96c779ed1a24c36fe5b3/html5/thumbnails/6.jpg)
•特定バージョンにおける課題の解決方法
話さないこと
6
![Page 7: できるPHP7アップグレード...•PEARを利用した独自フレームワーク •ユニットテスト カバレッジ率 1%未満(感覚値) PHPアプリケーション 9](https://reader035.vdocuments.pub/reader035/viewer/2022071105/5fdf96c779ed1a24c36fe5b3/html5/thumbnails/7.jpg)
•PHPアップグレードの流れを理解してイメージが湧く
•PHPアップグレード検討中の方の後押しをする
ゴール
7
![Page 8: できるPHP7アップグレード...•PEARを利用した独自フレームワーク •ユニットテスト カバレッジ率 1%未満(感覚値) PHPアプリケーション 9](https://reader035.vdocuments.pub/reader035/viewer/2022071105/5fdf96c779ed1a24c36fe5b3/html5/thumbnails/8.jpg)
PHP5.2から7.1へアップグレードする困難
![Page 9: できるPHP7アップグレード...•PEARを利用した独自フレームワーク •ユニットテスト カバレッジ率 1%未満(感覚値) PHPアプリケーション 9](https://reader035.vdocuments.pub/reader035/viewer/2022071105/5fdf96c779ed1a24c36fe5b3/html5/thumbnails/9.jpg)
•サービス開始から8年目 •PHP 5.2
•Composerが使えない
•PEARを利用した独自フレームワーク
•ユニットテスト カバレッジ率 1%未満(感覚値)
PHPアプリケーション
9
(2016年10月当時)
![Page 10: できるPHP7アップグレード...•PEARを利用した独自フレームワーク •ユニットテスト カバレッジ率 1%未満(感覚値) PHPアプリケーション 9](https://reader035.vdocuments.pub/reader035/viewer/2022071105/5fdf96c779ed1a24c36fe5b3/html5/thumbnails/10.jpg)
アップグレード対象は4ロール
10
top
機能 サービス紹介ユーザー申し込み
ホームページ作成契約 ホームページ閲覧 バッチ処理
メール配信
PHPバージョン 5.2 5.2 5.2 5.2
PHPコード行数 4万 25万 6万 4万
admin shop stats
![Page 11: できるPHP7アップグレード...•PEARを利用した独自フレームワーク •ユニットテスト カバレッジ率 1%未満(感覚値) PHPアプリケーション 9](https://reader035.vdocuments.pub/reader035/viewer/2022071105/5fdf96c779ed1a24c36fe5b3/html5/thumbnails/11.jpg)
① PHP 7.0.0 MySQL関数削除 アプリケーション全体でMySQL関数を使用 約260箇所のPDO切り替え
② PHP 5.4.0 マジッククォート削除 SQLを文字列結合している。SQLインジェクション対策のため、約230箇所のプレースホルダー化
当初から分かっていた課題は3つ
11
![Page 12: できるPHP7アップグレード...•PEARを利用した独自フレームワーク •ユニットテスト カバレッジ率 1%未満(感覚値) PHPアプリケーション 9](https://reader035.vdocuments.pub/reader035/viewer/2022071105/5fdf96c779ed1a24c36fe5b3/html5/thumbnails/12.jpg)
③ PHP5.2 から 7.1間の仕様変更、 下位互換性のない変更点の全容 を知らない
当初から分かっていた課題は3つ
12
![Page 13: できるPHP7アップグレード...•PEARを利用した独自フレームワーク •ユニットテスト カバレッジ率 1%未満(感覚値) PHPアプリケーション 9](https://reader035.vdocuments.pub/reader035/viewer/2022071105/5fdf96c779ed1a24c36fe5b3/html5/thumbnails/13.jpg)
もう一つ困難があります
13
![Page 14: できるPHP7アップグレード...•PEARを利用した独自フレームワーク •ユニットテスト カバレッジ率 1%未満(感覚値) PHPアプリケーション 9](https://reader035.vdocuments.pub/reader035/viewer/2022071105/5fdf96c779ed1a24c36fe5b3/html5/thumbnails/14.jpg)
作業許可をもらうこと
14
![Page 15: できるPHP7アップグレード...•PEARを利用した独自フレームワーク •ユニットテスト カバレッジ率 1%未満(感覚値) PHPアプリケーション 9](https://reader035.vdocuments.pub/reader035/viewer/2022071105/5fdf96c779ed1a24c36fe5b3/html5/thumbnails/15.jpg)
•現状でも「開発は」出来る
•開発リソースが足りない
•KPI改善や機能開発優先
理解されにくいアップグレード業務
15
![Page 16: できるPHP7アップグレード...•PEARを利用した独自フレームワーク •ユニットテスト カバレッジ率 1%未満(感覚値) PHPアプリケーション 9](https://reader035.vdocuments.pub/reader035/viewer/2022071105/5fdf96c779ed1a24c36fe5b3/html5/thumbnails/16.jpg)
•ユーザーメリット •タイミング
説得のポイント
16
![Page 17: できるPHP7アップグレード...•PEARを利用した独自フレームワーク •ユニットテスト カバレッジ率 1%未満(感覚値) PHPアプリケーション 9](https://reader035.vdocuments.pub/reader035/viewer/2022071105/5fdf96c779ed1a24c36fe5b3/html5/thumbnails/17.jpg)
ユーザーメリット
17http://php.net/releases/7_0_0.php
•PHP 7.0.0で2倍高速化! •開発効率改善で開発スピード向上! •安定サービス提供
![Page 18: できるPHP7アップグレード...•PEARを利用した独自フレームワーク •ユニットテスト カバレッジ率 1%未満(感覚値) PHPアプリケーション 9](https://reader035.vdocuments.pub/reader035/viewer/2022071105/5fdf96c779ed1a24c36fe5b3/html5/thumbnails/18.jpg)
•2016年前期にお申し込み数2倍に! •更なる成長のためエンジニア数2.5倍に!
タイミング:いい波が来た
18https://speakerdeck.com/hypermkt/timuquan-yuan-deoshen-siip-mishu-wo2bei-nisitahua
![Page 19: できるPHP7アップグレード...•PEARを利用した独自フレームワーク •ユニットテスト カバレッジ率 1%未満(感覚値) PHPアプリケーション 9](https://reader035.vdocuments.pub/reader035/viewer/2022071105/5fdf96c779ed1a24c36fe5b3/html5/thumbnails/19.jpg)
サービスの更なる発展、安定・安全・高速なサービス提供、そして開発スピード改善のため、
PHPのアップグレードをさせてください!
いいよ!
![Page 20: できるPHP7アップグレード...•PEARを利用した独自フレームワーク •ユニットテスト カバレッジ率 1%未満(感覚値) PHPアプリケーション 9](https://reader035.vdocuments.pub/reader035/viewer/2022071105/5fdf96c779ed1a24c36fe5b3/html5/thumbnails/20.jpg)
PHP7.1化が決定
20
![Page 21: できるPHP7アップグレード...•PEARを利用した独自フレームワーク •ユニットテスト カバレッジ率 1%未満(感覚値) PHPアプリケーション 9](https://reader035.vdocuments.pub/reader035/viewer/2022071105/5fdf96c779ed1a24c36fe5b3/html5/thumbnails/21.jpg)
•アップグレード対象の4ロールをPHP5.2からPHP7.1にする
ゴール
21
![Page 22: できるPHP7アップグレード...•PEARを利用した独自フレームワーク •ユニットテスト カバレッジ率 1%未満(感覚値) PHPアプリケーション 9](https://reader035.vdocuments.pub/reader035/viewer/2022071105/5fdf96c779ed1a24c36fe5b3/html5/thumbnails/22.jpg)
スケジュールを立てよう
![Page 23: できるPHP7アップグレード...•PEARを利用した独自フレームワーク •ユニットテスト カバレッジ率 1%未満(感覚値) PHPアプリケーション 9](https://reader035.vdocuments.pub/reader035/viewer/2022071105/5fdf96c779ed1a24c36fe5b3/html5/thumbnails/23.jpg)
•スケジュール
•担当者
•見積もり
•着手順序
•リリース目安
決めること
23
![Page 24: できるPHP7アップグレード...•PEARを利用した独自フレームワーク •ユニットテスト カバレッジ率 1%未満(感覚値) PHPアプリケーション 9](https://reader035.vdocuments.pub/reader035/viewer/2022071105/5fdf96c779ed1a24c36fe5b3/html5/thumbnails/24.jpg)
開発 @hypermkt
Goope開発経験2年以上のエンジニア2名
24
インフラ @hfm
![Page 25: できるPHP7アップグレード...•PEARを利用した独自フレームワーク •ユニットテスト カバレッジ率 1%未満(感覚値) PHPアプリケーション 9](https://reader035.vdocuments.pub/reader035/viewer/2022071105/5fdf96c779ed1a24c36fe5b3/html5/thumbnails/25.jpg)
アップグレード対象は4ロール
25
top
機能 サービス紹介ユーザー申し込み
ホームページ作成契約 ホームページ閲覧 バッチ処理
メール配信
PHPバージョン 5.2 5.2 5.2 5.2
PHPコード行数 4万 25万 6万 4万
admin shop stats
![Page 26: できるPHP7アップグレード...•PEARを利用した独自フレームワーク •ユニットテスト カバレッジ率 1%未満(感覚値) PHPアプリケーション 9](https://reader035.vdocuments.pub/reader035/viewer/2022071105/5fdf96c779ed1a24c36fe5b3/html5/thumbnails/26.jpg)
どこから着手すべきか?
26
![Page 27: できるPHP7アップグレード...•PEARを利用した独自フレームワーク •ユニットテスト カバレッジ率 1%未満(感覚値) PHPアプリケーション 9](https://reader035.vdocuments.pub/reader035/viewer/2022071105/5fdf96c779ed1a24c36fe5b3/html5/thumbnails/27.jpg)
簡単かつ短期間で完了出来るものから着手しよう!
27
結論
![Page 28: できるPHP7アップグレード...•PEARを利用した独自フレームワーク •ユニットテスト カバレッジ率 1%未満(感覚値) PHPアプリケーション 9](https://reader035.vdocuments.pub/reader035/viewer/2022071105/5fdf96c779ed1a24c36fe5b3/html5/thumbnails/28.jpg)
•我々はPHPアップグレード未経験者
•特定バージョンの課題解決法や効率的な作業手順を知らない
•まずは1回PHPアップグレードを経験することで、 一通りの課題解決方法を学び、非効率な方法も経験する
•次からは作業の効率化と作業時間軽減も出来る!
なぜか
28
![Page 29: できるPHP7アップグレード...•PEARを利用した独自フレームワーク •ユニットテスト カバレッジ率 1%未満(感覚値) PHPアプリケーション 9](https://reader035.vdocuments.pub/reader035/viewer/2022071105/5fdf96c779ed1a24c36fe5b3/html5/thumbnails/29.jpg)
ぴーえいちぴー
MySQL関数の削除ならお任せください!
ereg系関数は一発置換で仕留めるぜ
![Page 30: できるPHP7アップグレード...•PEARを利用した独自フレームワーク •ユニットテスト カバレッジ率 1%未満(感覚値) PHPアプリケーション 9](https://reader035.vdocuments.pub/reader035/viewer/2022071105/5fdf96c779ed1a24c36fe5b3/html5/thumbnails/30.jpg)
どうやって難易度を測るか?
30
![Page 31: できるPHP7アップグレード...•PEARを利用した独自フレームワーク •ユニットテスト カバレッジ率 1%未満(感覚値) PHPアプリケーション 9](https://reader035.vdocuments.pub/reader035/viewer/2022071105/5fdf96c779ed1a24c36fe5b3/html5/thumbnails/31.jpg)
•ユーザー影響度(= リスク)が小さいもの
•PHPコード行数が少ない
•検証が楽なもの(バッチ処理は手間)
難易度の決め方
31
![Page 32: できるPHP7アップグレード...•PEARを利用した独自フレームワーク •ユニットテスト カバレッジ率 1%未満(感覚値) PHPアプリケーション 9](https://reader035.vdocuments.pub/reader035/viewer/2022071105/5fdf96c779ed1a24c36fe5b3/html5/thumbnails/32.jpg)
難易度top
機能 サービス紹介ユーザー申し込み ホームページ閲覧 ホームページ作成
決済
ユーザー管理バッチ処理メール配信
PHPコード行数 4万 6万 25万 4万
ユーザー影響度 小 中 大 大
検証 楽 楽 普通 難
難易度 楽 普通 難 難
adminshop stats
![Page 33: できるPHP7アップグレード...•PEARを利用した独自フレームワーク •ユニットテスト カバレッジ率 1%未満(感覚値) PHPアプリケーション 9](https://reader035.vdocuments.pub/reader035/viewer/2022071105/5fdf96c779ed1a24c36fe5b3/html5/thumbnails/33.jpg)
•作業に入ってみないと分からないのでざっくりと。
•目安程度
•目安とはいえ数値として提示することが大切
見積もり
33
![Page 34: できるPHP7アップグレード...•PEARを利用した独自フレームワーク •ユニットテスト カバレッジ率 1%未満(感覚値) PHPアプリケーション 9](https://reader035.vdocuments.pub/reader035/viewer/2022071105/5fdf96c779ed1a24c36fe5b3/html5/thumbnails/34.jpg)
作業見積もりtop
機能 サービス紹介ユーザー申し込み ホームページ閲覧 ホームページ作成
決済
ユーザー管理バッチ処理メール配信
PHPコード行数 4万 6万 25万 4万
ユーザー影響度 小 中 大 大
検証 楽 楽 普通 難
難易度 楽 普通 難 難
作業見積もり 1.5ヶ月 1ヶ月 2ヶ月 1ヶ月
adminshop stats
![Page 35: できるPHP7アップグレード...•PEARを利用した独自フレームワーク •ユニットテスト カバレッジ率 1%未満(感覚値) PHPアプリケーション 9](https://reader035.vdocuments.pub/reader035/viewer/2022071105/5fdf96c779ed1a24c36fe5b3/html5/thumbnails/35.jpg)
作業順序とリリース目安
35
top
機能 サービス紹介ユーザー申し込み ホームページ閲覧 ホームページ作成
決済ユーザー管理バッチ処理メール配信
PHPコード行数 4万 6万 25万 4万
ユーザー影響度 小 中 大 大
検証 楽 楽 普通 難
難易度 楽 普通 難 難
作業見積もり 1.5ヶ月 1ヶ月 2ヶ月 1ヶ月
作業順序 ① ② ③ ④リリース目安 2016/12末 2017/01末 2017/03末 2017/04末
adminshop stats
![Page 36: できるPHP7アップグレード...•PEARを利用した独自フレームワーク •ユニットテスト カバレッジ率 1%未満(感覚値) PHPアプリケーション 9](https://reader035.vdocuments.pub/reader035/viewer/2022071105/5fdf96c779ed1a24c36fe5b3/html5/thumbnails/36.jpg)
時系列2016/11
2016/12
2017/01
2017/02
2017/03
2017/04
2017/05
top PHP7.1化完了
PHP7化プロジェクトスタート!
shop PHP7.1化完了
stats PHP7.1化完了
admin PHP7.1化完了
🎍
🌸
🎅
![Page 37: できるPHP7アップグレード...•PEARを利用した独自フレームワーク •ユニットテスト カバレッジ率 1%未満(感覚値) PHPアプリケーション 9](https://reader035.vdocuments.pub/reader035/viewer/2022071105/5fdf96c779ed1a24c36fe5b3/html5/thumbnails/37.jpg)
時系列2016/11
2016/12
2017/01
2017/02
2017/03
2017/04
2017/05
top PHP7.1化完了
PHP7化プロジェクトスタート!
stats PHP7.1化完了
admin PHP7.1化完了
🎍
🌸
🎅top PHP7.1化完了12/18-25 新婚旅行 ✈
shop PHP7.1化完了
![Page 38: できるPHP7アップグレード...•PEARを利用した独自フレームワーク •ユニットテスト カバレッジ率 1%未満(感覚値) PHPアプリケーション 9](https://reader035.vdocuments.pub/reader035/viewer/2022071105/5fdf96c779ed1a24c36fe5b3/html5/thumbnails/38.jpg)
アップグレード基本方針
![Page 39: できるPHP7アップグレード...•PEARを利用した独自フレームワーク •ユニットテスト カバレッジ率 1%未満(感覚値) PHPアプリケーション 9](https://reader035.vdocuments.pub/reader035/viewer/2022071105/5fdf96c779ed1a24c36fe5b3/html5/thumbnails/39.jpg)
•長期間の作業になる
•👉 早く終わらしたい
•既存プロジェクトと並行して作業を進めたい
•👉 安全に進めたい
前提
39
![Page 40: できるPHP7アップグレード...•PEARを利用した独自フレームワーク •ユニットテスト カバレッジ率 1%未満(感覚値) PHPアプリケーション 9](https://reader035.vdocuments.pub/reader035/viewer/2022071105/5fdf96c779ed1a24c36fe5b3/html5/thumbnails/40.jpg)
•PHP5.2との後方互換性を維持する •= PHP5.2/7.1 両方で動くアプリケーションにする
•deprecated警告の対応は優先度低め
アップグレード基本方針
40
![Page 41: できるPHP7アップグレード...•PEARを利用した独自フレームワーク •ユニットテスト カバレッジ率 1%未満(感覚値) PHPアプリケーション 9](https://reader035.vdocuments.pub/reader035/viewer/2022071105/5fdf96c779ed1a24c36fe5b3/html5/thumbnails/41.jpg)
•課題 •PHP5.2 : システムワイドなPEARライブラリを多数利用
• PHP7.1 : autoload経由で読み込みたい
•懸念 • PHP5.2, 7.1の両方でPEARライブラリを読み込むにはどうすれば?
なぜPHP5.2との後方互換性を維持するのか
41
// システムワイドなPEAR::DB
require_once(‘DB.php’);
![Page 42: できるPHP7アップグレード...•PEARを利用した独自フレームワーク •ユニットテスト カバレッジ率 1%未満(感覚値) PHPアプリケーション 9](https://reader035.vdocuments.pub/reader035/viewer/2022071105/5fdf96c779ed1a24c36fe5b3/html5/thumbnails/42.jpg)
PHP_VERSION_ID
42
$ php -v | head -n 1 PHP 7.1.5 (cli) (built: May 15 2017 11:18:10) ( NTS )$ cat php_version_id.php <?php var_dump(PHP_VERSION_ID);
$ php php_version_id.php int(70105)
![Page 43: できるPHP7アップグレード...•PEARを利用した独自フレームワーク •ユニットテスト カバレッジ率 1%未満(感覚値) PHPアプリケーション 9](https://reader035.vdocuments.pub/reader035/viewer/2022071105/5fdf96c779ed1a24c36fe5b3/html5/thumbnails/43.jpg)
•解決策 • PHP_VERSION_IDで分岐
• PHP5.2との後方互換性を維持して細かくリリース
•効果 • 既存プロジェクトと並行作業
• Composer有り無し環境との並行運用
PHP_VERSION_IDで分岐
43
if (PHP_VERSION_ID >= 70000) { require_once __DIR__ . '/../../vendor/composer/autoload.php'; } else { require_once ‘DB.php’; // システムワイドなPEAR::DB
}
![Page 44: できるPHP7アップグレード...•PEARを利用した独自フレームワーク •ユニットテスト カバレッジ率 1%未満(感覚値) PHPアプリケーション 9](https://reader035.vdocuments.pub/reader035/viewer/2022071105/5fdf96c779ed1a24c36fe5b3/html5/thumbnails/44.jpg)
deprecated警告の対応は優先度低め
44
![Page 45: できるPHP7アップグレード...•PEARを利用した独自フレームワーク •ユニットテスト カバレッジ率 1%未満(感覚値) PHPアプリケーション 9](https://reader035.vdocuments.pub/reader035/viewer/2022071105/5fdf96c779ed1a24c36fe5b3/html5/thumbnails/45.jpg)
•将来的にサポートされない関数や仕様の警告
•動作上は問題ない
•次回バージョンアップ時に廃止になる可能性は高い
deprecated警告とは
45
![Page 46: できるPHP7アップグレード...•PEARを利用した独自フレームワーク •ユニットテスト カバレッジ率 1%未満(感覚値) PHPアプリケーション 9](https://reader035.vdocuments.pub/reader035/viewer/2022071105/5fdf96c779ed1a24c36fe5b3/html5/thumbnails/46.jpg)
•余裕があれば対応する・なければ対応しない
•PHP7.1化が完了してから順次deprecated警告を対応
•PHP7.1化をなるはやで終わらせることを優先
deprecated警告の対応は優先度低め
46
![Page 47: できるPHP7アップグレード...•PEARを利用した独自フレームワーク •ユニットテスト カバレッジ率 1%未満(感覚値) PHPアプリケーション 9](https://reader035.vdocuments.pub/reader035/viewer/2022071105/5fdf96c779ed1a24c36fe5b3/html5/thumbnails/47.jpg)
いざPHPアップグレード作業へ
![Page 48: できるPHP7アップグレード...•PEARを利用した独自フレームワーク •ユニットテスト カバレッジ率 1%未満(感覚値) PHPアプリケーション 9](https://reader035.vdocuments.pub/reader035/viewer/2022071105/5fdf96c779ed1a24c36fe5b3/html5/thumbnails/48.jpg)
•下位互換性のない変更点の修正
•MySQL関数の削除
•ereg系関数の削除
•マジッククォート廃止
•関数・文法の仕様変更の修正
•php.iniの調整
•などなど
PHPアップグレード作業
48
![Page 49: できるPHP7アップグレード...•PEARを利用した独自フレームワーク •ユニットテスト カバレッジ率 1%未満(感覚値) PHPアプリケーション 9](https://reader035.vdocuments.pub/reader035/viewer/2022071105/5fdf96c779ed1a24c36fe5b3/html5/thumbnails/49.jpg)
•影響範囲はアプリケーション全体
•単調作業
•同じ修正を多数ファイルで行う
•同じファイルを何度も修正する
PHPアップグレード作業の特徴
49
![Page 50: できるPHP7アップグレード...•PEARを利用した独自フレームワーク •ユニットテスト カバレッジ率 1%未満(感覚値) PHPアプリケーション 9](https://reader035.vdocuments.pub/reader035/viewer/2022071105/5fdf96c779ed1a24c36fe5b3/html5/thumbnails/50.jpg)
•ケアレスミスやデグレしやすい
•どこに地雷があるか分からない 💣
注意点
50
![Page 51: できるPHP7アップグレード...•PEARを利用した独自フレームワーク •ユニットテスト カバレッジ率 1%未満(感覚値) PHPアプリケーション 9](https://reader035.vdocuments.pub/reader035/viewer/2022071105/5fdf96c779ed1a24c36fe5b3/html5/thumbnails/51.jpg)
•安全 • リアルタイムPHPエラー検知
• 新旧両バージョンで継続的テスト
•作業時間短縮 • 未使用ファイルの削除
• php7ccによる互換性の自動検知
• E2Eテスト
長期に渡るPHPアップグレード作業のポイント
51
![Page 52: できるPHP7アップグレード...•PEARを利用した独自フレームワーク •ユニットテスト カバレッジ率 1%未満(感覚値) PHPアプリケーション 9](https://reader035.vdocuments.pub/reader035/viewer/2022071105/5fdf96c779ed1a24c36fe5b3/html5/thumbnails/52.jpg)
リアルタイムPHPエラー検知• Fluentd + Norikraを利用したログの集積・解析基盤を構築
•アプリケーションのPHPエラーログをSlackにリアルタイム通知
![Page 53: できるPHP7アップグレード...•PEARを利用した独自フレームワーク •ユニットテスト カバレッジ率 1%未満(感覚値) PHPアプリケーション 9](https://reader035.vdocuments.pub/reader035/viewer/2022071105/5fdf96c779ed1a24c36fe5b3/html5/thumbnails/53.jpg)
メリット
53
•既存バグの早期発見につながる
•動作検証時、アップグレード時の障害にすぐ気づける
![Page 54: できるPHP7アップグレード...•PEARを利用した独自フレームワーク •ユニットテスト カバレッジ率 1%未満(感覚値) PHPアプリケーション 9](https://reader035.vdocuments.pub/reader035/viewer/2022071105/5fdf96c779ed1a24c36fe5b3/html5/thumbnails/54.jpg)
新旧両バージョンで継続的テスト
54
•CI上でPHP5.2, 7.1の両方でユニットテスト
•既存システムに影響を与えていないことを確認しつつ、 新バージョンでの動作担保を確保
![Page 55: できるPHP7アップグレード...•PEARを利用した独自フレームワーク •ユニットテスト カバレッジ率 1%未満(感覚値) PHPアプリケーション 9](https://reader035.vdocuments.pub/reader035/viewer/2022071105/5fdf96c779ed1a24c36fe5b3/html5/thumbnails/55.jpg)
未使用ファイルの削除
55
![Page 56: できるPHP7アップグレード...•PEARを利用した独自フレームワーク •ユニットテスト カバレッジ率 1%未満(感覚値) PHPアプリケーション 9](https://reader035.vdocuments.pub/reader035/viewer/2022071105/5fdf96c779ed1a24c36fe5b3/html5/thumbnails/56.jpg)
•他サービスからコピペされたファイル
•廃止になった機能
•リニューアル時に残された旧機能
•キャンペーン用一時コード
未使用ファイルは思っている以上にある
56
![Page 57: できるPHP7アップグレード...•PEARを利用した独自フレームワーク •ユニットテスト カバレッジ率 1%未満(感覚値) PHPアプリケーション 9](https://reader035.vdocuments.pub/reader035/viewer/2022071105/5fdf96c779ed1a24c36fe5b3/html5/thumbnails/57.jpg)
•PHPアップグレード対象の範囲縮小 •検証時間軽減 •依存関係の軽減
未使用ファイルを削除するメリット
57
![Page 58: できるPHP7アップグレード...•PEARを利用した独自フレームワーク •ユニットテスト カバレッジ率 1%未満(感覚値) PHPアプリケーション 9](https://reader035.vdocuments.pub/reader035/viewer/2022071105/5fdf96c779ed1a24c36fe5b3/html5/thumbnails/58.jpg)
•ルール
•調査期間を決める
•優先度
1.ライブラリ
2.ルーティング、コントローラー
•方法
•対象ファイル名、クラス名でgit grep
•同僚に聞く = 削除したかったが後回しにしてたのを掘り出す
未使用ファイルの削除の仕方
58
![Page 59: できるPHP7アップグレード...•PEARを利用した独自フレームワーク •ユニットテスト カバレッジ率 1%未満(感覚値) PHPアプリケーション 9](https://reader035.vdocuments.pub/reader035/viewer/2022071105/5fdf96c779ed1a24c36fe5b3/html5/thumbnails/59.jpg)
![Page 60: できるPHP7アップグレード...•PEARを利用した独自フレームワーク •ユニットテスト カバレッジ率 1%未満(感覚値) PHPアプリケーション 9](https://reader035.vdocuments.pub/reader035/viewer/2022071105/5fdf96c779ed1a24c36fe5b3/html5/thumbnails/60.jpg)
php7ccによる互換性の自動検知
60
•必須ライブラリ
• https://github.com/sstalle/php7cc
• PHP 5.3-5.6からPHP7の互換性チェッカー
• CIで都度実行し、指摘された箇所を片っ端から修正
• 1ファイルずつ手作業で調査する必要が無い> Line 123: PHP 4 constructors are now deprecated function Hoge() { }
> Line 123: Removed function "mysql_query" called mysql_query($query);
![Page 61: できるPHP7アップグレード...•PEARを利用した独自フレームワーク •ユニットテスト カバレッジ率 1%未満(感覚値) PHPアプリケーション 9](https://reader035.vdocuments.pub/reader035/viewer/2022071105/5fdf96c779ed1a24c36fe5b3/html5/thumbnails/61.jpg)
より広範囲をカバーできる E2Eテストを重視
61
![Page 62: できるPHP7アップグレード...•PEARを利用した独自フレームワーク •ユニットテスト カバレッジ率 1%未満(感覚値) PHPアプリケーション 9](https://reader035.vdocuments.pub/reader035/viewer/2022071105/5fdf96c779ed1a24c36fe5b3/html5/thumbnails/62.jpg)
•同じ箇所を同じ手順で検証するのは時間の無駄 • 今後も継続的にアップグレードできる環境構築
E2Eテストを重視した理由
62
![Page 63: できるPHP7アップグレード...•PEARを利用した独自フレームワーク •ユニットテスト カバレッジ率 1%未満(感覚値) PHPアプリケーション 9](https://reader035.vdocuments.pub/reader035/viewer/2022071105/5fdf96c779ed1a24c36fe5b3/html5/thumbnails/63.jpg)
•アプリケーションの特徴
•全体でCRUD処理
•PHPアップグレード
•PHP Warning/Fatalエラーが発生する懸念あり
前提
63
![Page 64: できるPHP7アップグレード...•PEARを利用した独自フレームワーク •ユニットテスト カバレッジ率 1%未満(感覚値) PHPアプリケーション 9](https://reader035.vdocuments.pub/reader035/viewer/2022071105/5fdf96c779ed1a24c36fe5b3/html5/thumbnails/64.jpg)
•簡易的なCRUD処理チェック
•HTTPステータス、PHPエラーのチェック
•全画面で実装
•PHP5.2 / 7.1両方で実行を確認
実装方針
64
![Page 65: できるPHP7アップグレード...•PEARを利用した独自フレームワーク •ユニットテスト カバレッジ率 1%未満(感覚値) PHPアプリケーション 9](https://reader035.vdocuments.pub/reader035/viewer/2022071105/5fdf96c779ed1a24c36fe5b3/html5/thumbnails/65.jpg)
E2Eテスト環境
65
Ruby製テストフレームワーク
Webアプリケーションの テストフレームワーク
Capybara用PhantomJSドライバー
Headless Webkitベースブラウザ
![Page 66: できるPHP7アップグレード...•PEARを利用した独自フレームワーク •ユニットテスト カバレッジ率 1%未満(感覚値) PHPアプリケーション 9](https://reader035.vdocuments.pub/reader035/viewer/2022071105/5fdf96c779ed1a24c36fe5b3/html5/thumbnails/66.jpg)
全体図
php:7.1-apacheコンテナ環境
社内PHP5.2環境
Push
Deploy
E2Eテスト
E2Eテスト
PHP5.2
PHP7.1
![Page 67: できるPHP7アップグレード...•PEARを利用した独自フレームワーク •ユニットテスト カバレッジ率 1%未満(感覚値) PHPアプリケーション 9](https://reader035.vdocuments.pub/reader035/viewer/2022071105/5fdf96c779ed1a24c36fe5b3/html5/thumbnails/67.jpg)
全ページのHTTPステータスチェック、PHPエラーをチェック
require 'spec_helper'shared_examples_for 'correct response' do |uri| before { visit uri } it "#{uri}が200 OKで正常に閲覧できる" do expect(page.status_code).to be(200) end it "#{uri}にPHPの警告が無い" do expect(page).to have_no_content('Warning:') end it "#{uri}にPHPのエラーが無い" do expect(page).to have_no_content('Fatal error:') end end
require 'spec_helper'describe '正常閲覧テスト'do %w( /info/information /info/maintenance /info/obstacle ).each do |page| it_behaves_like 'correct response', page endend
HTTPステータスチェック features/info_spec.rb
![Page 68: できるPHP7アップグレード...•PEARを利用した独自フレームワーク •ユニットテスト カバレッジ率 1%未満(感覚値) PHPアプリケーション 9](https://reader035.vdocuments.pub/reader035/viewer/2022071105/5fdf96c779ed1a24c36fe5b3/html5/thumbnails/68.jpg)
簡易的なCRUD処理チェックdescribe 'お知らせが投稿できる', :js => true do before do visit '/info/' fill_in 'title', with: '件名テスト' fill_in 'body', with: ‘本文テスト' click_button '登録' end it { expect(page).to have_content 'お知らせを投稿しました' } end
![Page 69: できるPHP7アップグレード...•PEARを利用した独自フレームワーク •ユニットテスト カバレッジ率 1%未満(感覚値) PHPアプリケーション 9](https://reader035.vdocuments.pub/reader035/viewer/2022071105/5fdf96c779ed1a24c36fe5b3/html5/thumbnails/69.jpg)
動作検証
69
![Page 70: できるPHP7アップグレード...•PEARを利用した独自フレームワーク •ユニットテスト カバレッジ率 1%未満(感覚値) PHPアプリケーション 9](https://reader035.vdocuments.pub/reader035/viewer/2022071105/5fdf96c779ed1a24c36fe5b3/html5/thumbnails/70.jpg)
1. 自己テスト
2. チームメンバー全員検証
動作検証は2段階
70
![Page 71: できるPHP7アップグレード...•PEARを利用した独自フレームワーク •ユニットテスト カバレッジ率 1%未満(感覚値) PHPアプリケーション 9](https://reader035.vdocuments.pub/reader035/viewer/2022071105/5fdf96c779ed1a24c36fe5b3/html5/thumbnails/71.jpg)
•Issueでテスト項目書を用意
準備
71
## お申し込み
- [ ] お申し込みが出来る
- [ ] お申込した内容がDBに登録される
![Page 72: できるPHP7アップグレード...•PEARを利用した独自フレームワーク •ユニットテスト カバレッジ率 1%未満(感覚値) PHPアプリケーション 9](https://reader035.vdocuments.pub/reader035/viewer/2022071105/5fdf96c779ed1a24c36fe5b3/html5/thumbnails/72.jpg)
•用意したテスト項目書ベースに可能な限り全機能・ページを確認
•テスト項目書の漏れや間違いは随時加筆修正
•検証 → バグ修正 → 検証を繰り返す
自己テスト
72
![Page 73: できるPHP7アップグレード...•PEARを利用した独自フレームワーク •ユニットテスト カバレッジ率 1%未満(感覚値) PHPアプリケーション 9](https://reader035.vdocuments.pub/reader035/viewer/2022071105/5fdf96c779ed1a24c36fe5b3/html5/thumbnails/73.jpg)
•ルール
• チームメンバー全員で行う
• 朝会で告知、スケジュールを確保
• 全員同時に行う
• 時間は1時間
• 回数は1回~2回
• 自分は検証しない、チームメンバーの検証のサポート
チームメンバー全員検証
73
![Page 74: できるPHP7アップグレード...•PEARを利用した独自フレームワーク •ユニットテスト カバレッジ率 1%未満(感覚値) PHPアプリケーション 9](https://reader035.vdocuments.pub/reader035/viewer/2022071105/5fdf96c779ed1a24c36fe5b3/html5/thumbnails/74.jpg)
•職種別で視点が変わるので検証範囲が広がる
•思いもよらぬバグが見つかる
•テスター/QAがいないチームにオススメ
チームメンバー全員検証のメリット
74
![Page 75: できるPHP7アップグレード...•PEARを利用した独自フレームワーク •ユニットテスト カバレッジ率 1%未満(感覚値) PHPアプリケーション 9](https://reader035.vdocuments.pub/reader035/viewer/2022071105/5fdf96c779ed1a24c36fe5b3/html5/thumbnails/75.jpg)
地味に大変なバッチ処理の検証
75
![Page 76: できるPHP7アップグレード...•PEARを利用した独自フレームワーク •ユニットテスト カバレッジ率 1%未満(感覚値) PHPアプリケーション 9](https://reader035.vdocuments.pub/reader035/viewer/2022071105/5fdf96c779ed1a24c36fe5b3/html5/thumbnails/76.jpg)
•23本
•毎分、毎日、毎月、月末月初
•機能
•一斉メール配信
•契約の自動更新(DB, API呼び出し, メール送信)
•SSL証明書の自動更新
•などなど
バッチ処理状況
76
動作検証が大変!
![Page 77: できるPHP7アップグレード...•PEARを利用した独自フレームワーク •ユニットテスト カバレッジ率 1%未満(感覚値) PHPアプリケーション 9](https://reader035.vdocuments.pub/reader035/viewer/2022071105/5fdf96c779ed1a24c36fe5b3/html5/thumbnails/77.jpg)
•PHP 7.1 ローカル開発環境で全て手動実行
•PHP 7.1 ステージング環境でユーザー・DBに影響がない範囲で手動実行
検証の仕方
77
![Page 78: できるPHP7アップグレード...•PEARを利用した独自フレームワーク •ユニットテスト カバレッジ率 1%未満(感覚値) PHPアプリケーション 9](https://reader035.vdocuments.pub/reader035/viewer/2022071105/5fdf96c779ed1a24c36fe5b3/html5/thumbnails/78.jpg)
•一ヶ月は様子見
•大抵のバッチ処理は一ヶ月で全て完走する(と思います)
•月末月初のバッチ処理もありますよね?
本番リリース後の重要なポイント
78
![Page 79: できるPHP7アップグレード...•PEARを利用した独自フレームワーク •ユニットテスト カバレッジ率 1%未満(感覚値) PHPアプリケーション 9](https://reader035.vdocuments.pub/reader035/viewer/2022071105/5fdf96c779ed1a24c36fe5b3/html5/thumbnails/79.jpg)
PHPアップグレードのその後
![Page 80: できるPHP7アップグレード...•PEARを利用した独自フレームワーク •ユニットテスト カバレッジ率 1%未満(感覚値) PHPアプリケーション 9](https://reader035.vdocuments.pub/reader035/viewer/2022071105/5fdf96c779ed1a24c36fe5b3/html5/thumbnails/80.jpg)
•本番と同じスペックのインフラ環境に対して実施
•サービスのピークタイムは1台あたり秒間約30リクエスト
•Gatlingによるベンチマークで同様のパフォーマンス測定
アプリケーション応答速度の向上!
80
![Page 81: できるPHP7アップグレード...•PEARを利用した独自フレームワーク •ユニットテスト カバレッジ率 1%未満(感覚値) PHPアプリケーション 9](https://reader035.vdocuments.pub/reader035/viewer/2022071105/5fdf96c779ed1a24c36fe5b3/html5/thumbnails/81.jpg)
•CPUサイズを半分にしたインスタンスに切り替え、インフラコスト減に。
CPU負荷が半分に!
81
![Page 82: できるPHP7アップグレード...•PEARを利用した独自フレームワーク •ユニットテスト カバレッジ率 1%未満(感覚値) PHPアプリケーション 9](https://reader035.vdocuments.pub/reader035/viewer/2022071105/5fdf96c779ed1a24c36fe5b3/html5/thumbnails/82.jpg)
•VagrantからDocker開発環境へ
•起動が高速
•開発環境の構築/調整が簡単
•Composerが使えるようになった
開発環境
82
![Page 83: できるPHP7アップグレード...•PEARを利用した独自フレームワーク •ユニットテスト カバレッジ率 1%未満(感覚値) PHPアプリケーション 9](https://reader035.vdocuments.pub/reader035/viewer/2022071105/5fdf96c779ed1a24c36fe5b3/html5/thumbnails/83.jpg)
• PHPリリースのRSSを確認
• パッチバージョン(7.1.x)は数日以内にアップグレード
• ChangeLogを確認
• CI上でユニットテスト、E2Eテストが通る
最新バージョンを追従
83
$ php -v PHP 7.1.9 (cli) (built: Aug 30 2017 20:06:08) ( NTS ) Copyright (c) 1997-2017 The PHP Group Zend Engine v3.1.0, Copyright (c) 1998-2017 Zend Technologies
![Page 84: できるPHP7アップグレード...•PEARを利用した独自フレームワーク •ユニットテスト カバレッジ率 1%未満(感覚値) PHPアプリケーション 9](https://reader035.vdocuments.pub/reader035/viewer/2022071105/5fdf96c779ed1a24c36fe5b3/html5/thumbnails/84.jpg)
まとめ
84
![Page 85: できるPHP7アップグレード...•PEARを利用した独自フレームワーク •ユニットテスト カバレッジ率 1%未満(感覚値) PHPアプリケーション 9](https://reader035.vdocuments.pub/reader035/viewer/2022071105/5fdf96c779ed1a24c36fe5b3/html5/thumbnails/85.jpg)
•PHP5.2から7.1へアップグレードする困難
•スケジュールの立て方、複数ロール時の着手順序
•アップグレード基本方針
•安全かつ作業時間短縮するための施策
•バグや作業漏れを逃さない動作検証
•今後のアップグレード方針
今日話したこと
85
![Page 86: できるPHP7アップグレード...•PEARを利用した独自フレームワーク •ユニットテスト カバレッジ率 1%未満(感覚値) PHPアプリケーション 9](https://reader035.vdocuments.pub/reader035/viewer/2022071105/5fdf96c779ed1a24c36fe5b3/html5/thumbnails/86.jpg)
•今後も継続的にアップグレードしていくことが大切
•できるだけ最新のバージョンを利用し、ユーザー・開発者双方に恩恵が受けられるようにしていきたい
本当のPHPアップグレードはこれから
86
![Page 87: できるPHP7アップグレード...•PEARを利用した独自フレームワーク •ユニットテスト カバレッジ率 1%未満(感覚値) PHPアプリケーション 9](https://reader035.vdocuments.pub/reader035/viewer/2022071105/5fdf96c779ed1a24c36fe5b3/html5/thumbnails/87.jpg)
ぜひPHP7アップグレードのChallengeを!
87
![Page 88: できるPHP7アップグレード...•PEARを利用した独自フレームワーク •ユニットテスト カバレッジ率 1%未満(感覚値) PHPアプリケーション 9](https://reader035.vdocuments.pub/reader035/viewer/2022071105/5fdf96c779ed1a24c36fe5b3/html5/thumbnails/88.jpg)
君もペパボで働かないか?最新の採用情報をチェック→ @pb_recruit