88
バーチー / GMO PEPABO inc. 2017.10.08 / PHPカンファレンス2017 できるPHP7アップグレード

できるPHP7アップグレード...•PEARを利用した独自フレームワーク •ユニットテスト カバレッジ率 1%未満(感覚値) PHPアプリケーション 9

  • Upload
    others

  • View
    2

  • Download
    0

Embed Size (px)

Citation preview

Page 1: できるPHP7アップグレード...•PEARを利用した独自フレームワーク •ユニットテスト カバレッジ率 1%未満(感覚値) PHPアプリケーション 9

バーチー / GMO PEPABO inc. 2017.10.08 / PHPカンファレンス2017

できるPHP7アップグレード

Page 2: できるPHP7アップグレード...•PEARを利用した独自フレームワーク •ユニットテスト カバレッジ率 1%未満(感覚値) PHPアプリケーション 9

http://blog.hypermkt.jp

ソフトウェアエンジニアバーチー @hypermkt

SH事業部グーペチーム 兼 アニメ部部長

Page 3: できるPHP7アップグレード...•PEARを利用した独自フレームワーク •ユニットテスト カバレッジ率 1%未満(感覚値) PHPアプリケーション 9
Page 4: できるPHP7アップグレード...•PEARを利用した独自フレームワーク •ユニットテスト カバレッジ率 1%未満(感覚値) PHPアプリケーション 9

PHP5.2からPHP7.1にアップグレード!

4

Page 5: できるPHP7アップグレード...•PEARを利用した独自フレームワーク •ユニットテスト カバレッジ率 1%未満(感覚値) PHPアプリケーション 9

•PHP5.2から7.1へアップグレードする困難

•PHPアップグレードを安全かつ短期間で遂行するための計画と戦略 •PHPアップグレードのその後

今日お話すること

5

Page 6: できるPHP7アップグレード...•PEARを利用した独自フレームワーク •ユニットテスト カバレッジ率 1%未満(感覚値) PHPアプリケーション 9

•特定バージョンにおける課題の解決方法

話さないこと

6

Page 7: できるPHP7アップグレード...•PEARを利用した独自フレームワーク •ユニットテスト カバレッジ率 1%未満(感覚値) PHPアプリケーション 9

•PHPアップグレードの流れを理解してイメージが湧く

•PHPアップグレード検討中の方の後押しをする

ゴール

7

Page 8: できるPHP7アップグレード...•PEARを利用した独自フレームワーク •ユニットテスト カバレッジ率 1%未満(感覚値) PHPアプリケーション 9

PHP5.2から7.1へアップグレードする困難

Page 9: できるPHP7アップグレード...•PEARを利用した独自フレームワーク •ユニットテスト カバレッジ率 1%未満(感覚値) PHPアプリケーション 9

•サービス開始から8年目 •PHP 5.2

•Composerが使えない

•PEARを利用した独自フレームワーク

•ユニットテスト カバレッジ率 1%未満(感覚値)

PHPアプリケーション

9

(2016年10月当時)

Page 10: できるPHP7アップグレード...•PEARを利用した独自フレームワーク •ユニットテスト カバレッジ率 1%未満(感覚値) PHPアプリケーション 9

アップグレード対象は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

① PHP 7.0.0 MySQL関数削除 アプリケーション全体でMySQL関数を使用 約260箇所のPDO切り替え

② PHP 5.4.0 マジッククォート削除 SQLを文字列結合している。SQLインジェクション対策のため、約230箇所のプレースホルダー化

当初から分かっていた課題は3つ

11

Page 12: できるPHP7アップグレード...•PEARを利用した独自フレームワーク •ユニットテスト カバレッジ率 1%未満(感覚値) PHPアプリケーション 9

③ PHP5.2 から 7.1間の仕様変更、 下位互換性のない変更点の全容 を知らない

当初から分かっていた課題は3つ

12

Page 13: できるPHP7アップグレード...•PEARを利用した独自フレームワーク •ユニットテスト カバレッジ率 1%未満(感覚値) PHPアプリケーション 9

もう一つ困難があります

13

Page 14: できるPHP7アップグレード...•PEARを利用した独自フレームワーク •ユニットテスト カバレッジ率 1%未満(感覚値) PHPアプリケーション 9

作業許可をもらうこと

14

Page 15: できるPHP7アップグレード...•PEARを利用した独自フレームワーク •ユニットテスト カバレッジ率 1%未満(感覚値) PHPアプリケーション 9

•現状でも「開発は」出来る

•開発リソースが足りない

•KPI改善や機能開発優先

理解されにくいアップグレード業務

15

Page 16: できるPHP7アップグレード...•PEARを利用した独自フレームワーク •ユニットテスト カバレッジ率 1%未満(感覚値) PHPアプリケーション 9

•ユーザーメリット •タイミング

説得のポイント

16

Page 17: できるPHP7アップグレード...•PEARを利用した独自フレームワーク •ユニットテスト カバレッジ率 1%未満(感覚値) PHPアプリケーション 9

ユーザーメリット

17http://php.net/releases/7_0_0.php

•PHP 7.0.0で2倍高速化! •開発効率改善で開発スピード向上! •安定サービス提供

Page 18: できるPHP7アップグレード...•PEARを利用した独自フレームワーク •ユニットテスト カバレッジ率 1%未満(感覚値) PHPアプリケーション 9

•2016年前期にお申し込み数2倍に! •更なる成長のためエンジニア数2.5倍に!

タイミング:いい波が来た

18https://speakerdeck.com/hypermkt/timuquan-yuan-deoshen-siip-mishu-wo2bei-nisitahua

Page 19: できるPHP7アップグレード...•PEARを利用した独自フレームワーク •ユニットテスト カバレッジ率 1%未満(感覚値) PHPアプリケーション 9

サービスの更なる発展、安定・安全・高速なサービス提供、そして開発スピード改善のため、

PHPのアップグレードをさせてください!

いいよ!

Page 20: できるPHP7アップグレード...•PEARを利用した独自フレームワーク •ユニットテスト カバレッジ率 1%未満(感覚値) PHPアプリケーション 9

PHP7.1化が決定

20

Page 21: できるPHP7アップグレード...•PEARを利用した独自フレームワーク •ユニットテスト カバレッジ率 1%未満(感覚値) PHPアプリケーション 9

•アップグレード対象の4ロールをPHP5.2からPHP7.1にする

ゴール

21

Page 22: できるPHP7アップグレード...•PEARを利用した独自フレームワーク •ユニットテスト カバレッジ率 1%未満(感覚値) PHPアプリケーション 9

スケジュールを立てよう

Page 23: できるPHP7アップグレード...•PEARを利用した独自フレームワーク •ユニットテスト カバレッジ率 1%未満(感覚値) PHPアプリケーション 9

•スケジュール

•担当者

•見積もり

•着手順序

•リリース目安

決めること

23

Page 24: できるPHP7アップグレード...•PEARを利用した独自フレームワーク •ユニットテスト カバレッジ率 1%未満(感覚値) PHPアプリケーション 9

開発 @hypermkt

Goope開発経験2年以上のエンジニア2名

24

インフラ @hfm

Page 25: できるPHP7アップグレード...•PEARを利用した独自フレームワーク •ユニットテスト カバレッジ率 1%未満(感覚値) PHPアプリケーション 9

アップグレード対象は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

どこから着手すべきか?

26

Page 27: できるPHP7アップグレード...•PEARを利用した独自フレームワーク •ユニットテスト カバレッジ率 1%未満(感覚値) PHPアプリケーション 9

簡単かつ短期間で完了出来るものから着手しよう!

27

結論

Page 28: できるPHP7アップグレード...•PEARを利用した独自フレームワーク •ユニットテスト カバレッジ率 1%未満(感覚値) PHPアプリケーション 9

•我々はPHPアップグレード未経験者

•特定バージョンの課題解決法や効率的な作業手順を知らない

•まずは1回PHPアップグレードを経験することで、 一通りの課題解決方法を学び、非効率な方法も経験する

•次からは作業の効率化と作業時間軽減も出来る!

なぜか

28

Page 29: できるPHP7アップグレード...•PEARを利用した独自フレームワーク •ユニットテスト カバレッジ率 1%未満(感覚値) PHPアプリケーション 9

ぴーえいちぴー

MySQL関数の削除ならお任せください!

ereg系関数は一発置換で仕留めるぜ

Page 30: できるPHP7アップグレード...•PEARを利用した独自フレームワーク •ユニットテスト カバレッジ率 1%未満(感覚値) PHPアプリケーション 9

どうやって難易度を測るか?

30

Page 31: できるPHP7アップグレード...•PEARを利用した独自フレームワーク •ユニットテスト カバレッジ率 1%未満(感覚値) PHPアプリケーション 9

•ユーザー影響度(= リスク)が小さいもの

•PHPコード行数が少ない

•検証が楽なもの(バッチ処理は手間)

難易度の決め方

31

Page 32: できるPHP7アップグレード...•PEARを利用した独自フレームワーク •ユニットテスト カバレッジ率 1%未満(感覚値) PHPアプリケーション 9

難易度top

機能 サービス紹介ユーザー申し込み ホームページ閲覧 ホームページ作成

決済

ユーザー管理バッチ処理メール配信

PHPコード行数 4万 6万 25万 4万

ユーザー影響度 小 中 大 大

検証 楽 楽 普通 難

難易度 楽 普通 難 難

adminshop stats

Page 33: できるPHP7アップグレード...•PEARを利用した独自フレームワーク •ユニットテスト カバレッジ率 1%未満(感覚値) PHPアプリケーション 9

•作業に入ってみないと分からないのでざっくりと。

•目安程度

•目安とはいえ数値として提示することが大切

見積もり

33

Page 34: できるPHP7アップグレード...•PEARを利用した独自フレームワーク •ユニットテスト カバレッジ率 1%未満(感覚値) PHPアプリケーション 9

作業見積もりtop

機能 サービス紹介ユーザー申し込み ホームページ閲覧 ホームページ作成

決済

ユーザー管理バッチ処理メール配信

PHPコード行数 4万 6万 25万 4万

ユーザー影響度 小 中 大 大

検証 楽 楽 普通 難

難易度 楽 普通 難 難

作業見積もり 1.5ヶ月 1ヶ月 2ヶ月 1ヶ月

adminshop stats

Page 35: できるPHP7アップグレード...•PEARを利用した独自フレームワーク •ユニットテスト カバレッジ率 1%未満(感覚値) PHPアプリケーション 9

作業順序とリリース目安

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

時系列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

時系列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

アップグレード基本方針

Page 39: できるPHP7アップグレード...•PEARを利用した独自フレームワーク •ユニットテスト カバレッジ率 1%未満(感覚値) PHPアプリケーション 9

•長期間の作業になる

•👉 早く終わらしたい

•既存プロジェクトと並行して作業を進めたい

•👉 安全に進めたい

前提

39

Page 40: できるPHP7アップグレード...•PEARを利用した独自フレームワーク •ユニットテスト カバレッジ率 1%未満(感覚値) PHPアプリケーション 9

•PHP5.2との後方互換性を維持する •= PHP5.2/7.1 両方で動くアプリケーションにする

•deprecated警告の対応は優先度低め

アップグレード基本方針

40

Page 41: できるPHP7アップグレード...•PEARを利用した独自フレームワーク •ユニットテスト カバレッジ率 1%未満(感覚値) PHPアプリケーション 9

•課題 •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

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

•解決策 • 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

deprecated警告の対応は優先度低め

44

Page 45: できるPHP7アップグレード...•PEARを利用した独自フレームワーク •ユニットテスト カバレッジ率 1%未満(感覚値) PHPアプリケーション 9

•将来的にサポートされない関数や仕様の警告

•動作上は問題ない

•次回バージョンアップ時に廃止になる可能性は高い

deprecated警告とは

45

Page 46: できるPHP7アップグレード...•PEARを利用した独自フレームワーク •ユニットテスト カバレッジ率 1%未満(感覚値) PHPアプリケーション 9

•余裕があれば対応する・なければ対応しない

•PHP7.1化が完了してから順次deprecated警告を対応

•PHP7.1化をなるはやで終わらせることを優先

deprecated警告の対応は優先度低め

46

Page 47: できるPHP7アップグレード...•PEARを利用した独自フレームワーク •ユニットテスト カバレッジ率 1%未満(感覚値) PHPアプリケーション 9

いざPHPアップグレード作業へ

Page 48: できるPHP7アップグレード...•PEARを利用した独自フレームワーク •ユニットテスト カバレッジ率 1%未満(感覚値) PHPアプリケーション 9

•下位互換性のない変更点の修正

•MySQL関数の削除

•ereg系関数の削除

•マジッククォート廃止

•関数・文法の仕様変更の修正

•php.iniの調整

•などなど

PHPアップグレード作業

48

Page 49: できるPHP7アップグレード...•PEARを利用した独自フレームワーク •ユニットテスト カバレッジ率 1%未満(感覚値) PHPアプリケーション 9

•影響範囲はアプリケーション全体

•単調作業

•同じ修正を多数ファイルで行う

•同じファイルを何度も修正する

PHPアップグレード作業の特徴

49

Page 50: できるPHP7アップグレード...•PEARを利用した独自フレームワーク •ユニットテスト カバレッジ率 1%未満(感覚値) PHPアプリケーション 9

•ケアレスミスやデグレしやすい

•どこに地雷があるか分からない 💣

注意点

50

Page 51: できるPHP7アップグレード...•PEARを利用した独自フレームワーク •ユニットテスト カバレッジ率 1%未満(感覚値) PHPアプリケーション 9

•安全 • リアルタイムPHPエラー検知

• 新旧両バージョンで継続的テスト

•作業時間短縮 • 未使用ファイルの削除

• php7ccによる互換性の自動検知

• E2Eテスト

長期に渡るPHPアップグレード作業のポイント

51

Page 52: できるPHP7アップグレード...•PEARを利用した独自フレームワーク •ユニットテスト カバレッジ率 1%未満(感覚値) PHPアプリケーション 9

リアルタイムPHPエラー検知• Fluentd + Norikraを利用したログの集積・解析基盤を構築

•アプリケーションのPHPエラーログをSlackにリアルタイム通知

Page 53: できるPHP7アップグレード...•PEARを利用した独自フレームワーク •ユニットテスト カバレッジ率 1%未満(感覚値) PHPアプリケーション 9

メリット

53

•既存バグの早期発見につながる

•動作検証時、アップグレード時の障害にすぐ気づける

Page 54: できるPHP7アップグレード...•PEARを利用した独自フレームワーク •ユニットテスト カバレッジ率 1%未満(感覚値) PHPアプリケーション 9

新旧両バージョンで継続的テスト

54

•CI上でPHP5.2, 7.1の両方でユニットテスト

•既存システムに影響を与えていないことを確認しつつ、 新バージョンでの動作担保を確保

Page 55: できるPHP7アップグレード...•PEARを利用した独自フレームワーク •ユニットテスト カバレッジ率 1%未満(感覚値) PHPアプリケーション 9

未使用ファイルの削除

55

Page 56: できるPHP7アップグレード...•PEARを利用した独自フレームワーク •ユニットテスト カバレッジ率 1%未満(感覚値) PHPアプリケーション 9

•他サービスからコピペされたファイル

•廃止になった機能

•リニューアル時に残された旧機能

•キャンペーン用一時コード

未使用ファイルは思っている以上にある

56

Page 57: できるPHP7アップグレード...•PEARを利用した独自フレームワーク •ユニットテスト カバレッジ率 1%未満(感覚値) PHPアプリケーション 9

•PHPアップグレード対象の範囲縮小 •検証時間軽減 •依存関係の軽減

未使用ファイルを削除するメリット

57

Page 58: できるPHP7アップグレード...•PEARを利用した独自フレームワーク •ユニットテスト カバレッジ率 1%未満(感覚値) PHPアプリケーション 9

•ルール

•調査期間を決める

•優先度

1.ライブラリ

2.ルーティング、コントローラー

•方法

•対象ファイル名、クラス名でgit grep

•同僚に聞く = 削除したかったが後回しにしてたのを掘り出す

未使用ファイルの削除の仕方

58

Page 59: できるPHP7アップグレード...•PEARを利用した独自フレームワーク •ユニットテスト カバレッジ率 1%未満(感覚値) PHPアプリケーション 9
Page 60: できるPHP7アップグレード...•PEARを利用した独自フレームワーク •ユニットテスト カバレッジ率 1%未満(感覚値) PHPアプリケーション 9

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

より広範囲をカバーできる E2Eテストを重視

61

Page 62: できるPHP7アップグレード...•PEARを利用した独自フレームワーク •ユニットテスト カバレッジ率 1%未満(感覚値) PHPアプリケーション 9

•同じ箇所を同じ手順で検証するのは時間の無駄 • 今後も継続的にアップグレードできる環境構築

E2Eテストを重視した理由

62

Page 63: できるPHP7アップグレード...•PEARを利用した独自フレームワーク •ユニットテスト カバレッジ率 1%未満(感覚値) PHPアプリケーション 9

•アプリケーションの特徴

•全体でCRUD処理

•PHPアップグレード

•PHP Warning/Fatalエラーが発生する懸念あり

前提

63

Page 64: できるPHP7アップグレード...•PEARを利用した独自フレームワーク •ユニットテスト カバレッジ率 1%未満(感覚値) PHPアプリケーション 9

•簡易的なCRUD処理チェック

•HTTPステータス、PHPエラーのチェック

•全画面で実装

•PHP5.2 / 7.1両方で実行を確認

実装方針

64

Page 65: できるPHP7アップグレード...•PEARを利用した独自フレームワーク •ユニットテスト カバレッジ率 1%未満(感覚値) PHPアプリケーション 9

E2Eテスト環境

65

Ruby製テストフレームワーク

Webアプリケーションの テストフレームワーク

Capybara用PhantomJSドライバー

Headless Webkitベースブラウザ

Page 66: できるPHP7アップグレード...•PEARを利用した独自フレームワーク •ユニットテスト カバレッジ率 1%未満(感覚値) PHPアプリケーション 9

全体図

php:7.1-apacheコンテナ環境

社内PHP5.2環境

Push

Deploy

E2Eテスト

E2Eテスト

PHP5.2

PHP7.1

Page 67: できるPHP7アップグレード...•PEARを利用した独自フレームワーク •ユニットテスト カバレッジ率 1%未満(感覚値) PHPアプリケーション 9

全ページの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

簡易的な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

動作検証

69

Page 70: できるPHP7アップグレード...•PEARを利用した独自フレームワーク •ユニットテスト カバレッジ率 1%未満(感覚値) PHPアプリケーション 9

1. 自己テスト

2. チームメンバー全員検証

動作検証は2段階

70

Page 71: できるPHP7アップグレード...•PEARを利用した独自フレームワーク •ユニットテスト カバレッジ率 1%未満(感覚値) PHPアプリケーション 9

•Issueでテスト項目書を用意

準備

71

## お申し込み

- [ ] お申し込みが出来る

- [ ] お申込した内容がDBに登録される

Page 72: できるPHP7アップグレード...•PEARを利用した独自フレームワーク •ユニットテスト カバレッジ率 1%未満(感覚値) PHPアプリケーション 9

•用意したテスト項目書ベースに可能な限り全機能・ページを確認

•テスト項目書の漏れや間違いは随時加筆修正

•検証 → バグ修正 → 検証を繰り返す

自己テスト

72

Page 73: できるPHP7アップグレード...•PEARを利用した独自フレームワーク •ユニットテスト カバレッジ率 1%未満(感覚値) PHPアプリケーション 9

•ルール

• チームメンバー全員で行う

• 朝会で告知、スケジュールを確保

• 全員同時に行う

• 時間は1時間

• 回数は1回~2回

• 自分は検証しない、チームメンバーの検証のサポート

チームメンバー全員検証

73

Page 74: できるPHP7アップグレード...•PEARを利用した独自フレームワーク •ユニットテスト カバレッジ率 1%未満(感覚値) PHPアプリケーション 9

•職種別で視点が変わるので検証範囲が広がる

•思いもよらぬバグが見つかる

•テスター/QAがいないチームにオススメ

チームメンバー全員検証のメリット

74

Page 75: できるPHP7アップグレード...•PEARを利用した独自フレームワーク •ユニットテスト カバレッジ率 1%未満(感覚値) PHPアプリケーション 9

地味に大変なバッチ処理の検証

75

Page 76: できるPHP7アップグレード...•PEARを利用した独自フレームワーク •ユニットテスト カバレッジ率 1%未満(感覚値) PHPアプリケーション 9

•23本

•毎分、毎日、毎月、月末月初

•機能

•一斉メール配信

•契約の自動更新(DB, API呼び出し, メール送信)

•SSL証明書の自動更新

•などなど

バッチ処理状況

76

動作検証が大変!

Page 77: できるPHP7アップグレード...•PEARを利用した独自フレームワーク •ユニットテスト カバレッジ率 1%未満(感覚値) PHPアプリケーション 9

•PHP 7.1 ローカル開発環境で全て手動実行

•PHP 7.1 ステージング環境でユーザー・DBに影響がない範囲で手動実行

検証の仕方

77

Page 78: できるPHP7アップグレード...•PEARを利用した独自フレームワーク •ユニットテスト カバレッジ率 1%未満(感覚値) PHPアプリケーション 9

•一ヶ月は様子見

•大抵のバッチ処理は一ヶ月で全て完走する(と思います)

•月末月初のバッチ処理もありますよね?

本番リリース後の重要なポイント

78

Page 79: できるPHP7アップグレード...•PEARを利用した独自フレームワーク •ユニットテスト カバレッジ率 1%未満(感覚値) PHPアプリケーション 9

PHPアップグレードのその後

Page 80: できるPHP7アップグレード...•PEARを利用した独自フレームワーク •ユニットテスト カバレッジ率 1%未満(感覚値) PHPアプリケーション 9

•本番と同じスペックのインフラ環境に対して実施

•サービスのピークタイムは1台あたり秒間約30リクエスト

•Gatlingによるベンチマークで同様のパフォーマンス測定

アプリケーション応答速度の向上!

80

Page 81: できるPHP7アップグレード...•PEARを利用した独自フレームワーク •ユニットテスト カバレッジ率 1%未満(感覚値) PHPアプリケーション 9

•CPUサイズを半分にしたインスタンスに切り替え、インフラコスト減に。

CPU負荷が半分に!

81

Page 82: できるPHP7アップグレード...•PEARを利用した独自フレームワーク •ユニットテスト カバレッジ率 1%未満(感覚値) PHPアプリケーション 9

•VagrantからDocker開発環境へ

•起動が高速

•開発環境の構築/調整が簡単

•Composerが使えるようになった

開発環境

82

Page 83: できるPHP7アップグレード...•PEARを利用した独自フレームワーク •ユニットテスト カバレッジ率 1%未満(感覚値) PHPアプリケーション 9

• 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

まとめ

84

Page 85: できるPHP7アップグレード...•PEARを利用した独自フレームワーク •ユニットテスト カバレッジ率 1%未満(感覚値) PHPアプリケーション 9

•PHP5.2から7.1へアップグレードする困難

•スケジュールの立て方、複数ロール時の着手順序

•アップグレード基本方針

•安全かつ作業時間短縮するための施策

•バグや作業漏れを逃さない動作検証

•今後のアップグレード方針

今日話したこと

85

Page 86: できるPHP7アップグレード...•PEARを利用した独自フレームワーク •ユニットテスト カバレッジ率 1%未満(感覚値) PHPアプリケーション 9

•今後も継続的にアップグレードしていくことが大切

•できるだけ最新のバージョンを利用し、ユーザー・開発者双方に恩恵が受けられるようにしていきたい

本当のPHPアップグレードはこれから

86

Page 87: できるPHP7アップグレード...•PEARを利用した独自フレームワーク •ユニットテスト カバレッジ率 1%未満(感覚値) PHPアプリケーション 9

ぜひPHP7アップグレードのChallengeを!

87

Page 88: できるPHP7アップグレード...•PEARを利用した独自フレームワーク •ユニットテスト カバレッジ率 1%未満(感覚値) PHPアプリケーション 9

君もペパボで働かないか?最新の採用情報をチェック→ @pb_recruit