Download free for 30 days
Sign in
Upload
Language (EN)
Support
Business
Mobile
Social Media
Marketing
Technology
Art & Photos
Career
Design
Education
Presentations & Public Speaking
Government & Nonprofit
Healthcare
Internet
Law
Leadership & Management
Automotive
Engineering
Software
Recruiting & HR
Retail
Sales
Services
Science
Small Business & Entrepreneurship
Food
Environment
Economy & Finance
Data & Analytics
Investor Relations
Sports
Spiritual
News & Politics
Travel
Self Improvement
Real Estate
Entertainment & Humor
Health & Medicine
Devices & Hardware
Lifestyle
Change Language
Language
English
Español
Português
Français
Deutsche
Cancel
Save
EN
KT
Uploaded by
KLab Inc. / Tech
639 views
運用中の大規模オンラインゲームで 8年ぶりにPHPバージョンアップをした話
PHPカンファレンス2023の講演資料です。 https://phpcon.php.gr.jp/2023/
Technology
◦
Read more
0
Save
Share
Embed
Embed presentation
Download
Download to read offline
1
/ 111
2
/ 111
3
/ 111
4
/ 111
5
/ 111
6
/ 111
Most read
7
/ 111
8
/ 111
9
/ 111
10
/ 111
11
/ 111
12
/ 111
13
/ 111
14
/ 111
15
/ 111
16
/ 111
17
/ 111
18
/ 111
19
/ 111
20
/ 111
21
/ 111
22
/ 111
23
/ 111
24
/ 111
25
/ 111
26
/ 111
27
/ 111
28
/ 111
29
/ 111
30
/ 111
31
/ 111
32
/ 111
33
/ 111
34
/ 111
35
/ 111
36
/ 111
37
/ 111
38
/ 111
39
/ 111
40
/ 111
41
/ 111
42
/ 111
43
/ 111
44
/ 111
45
/ 111
46
/ 111
47
/ 111
48
/ 111
49
/ 111
50
/ 111
51
/ 111
52
/ 111
53
/ 111
54
/ 111
55
/ 111
56
/ 111
57
/ 111
58
/ 111
59
/ 111
60
/ 111
61
/ 111
62
/ 111
63
/ 111
64
/ 111
65
/ 111
66
/ 111
67
/ 111
68
/ 111
69
/ 111
70
/ 111
71
/ 111
72
/ 111
73
/ 111
74
/ 111
75
/ 111
76
/ 111
77
/ 111
78
/ 111
79
/ 111
80
/ 111
81
/ 111
82
/ 111
83
/ 111
84
/ 111
85
/ 111
86
/ 111
87
/ 111
88
/ 111
89
/ 111
90
/ 111
91
/ 111
92
/ 111
93
/ 111
94
/ 111
95
/ 111
96
/ 111
97
/ 111
98
/ 111
99
/ 111
100
/ 111
101
/ 111
102
/ 111
103
/ 111
104
/ 111
105
/ 111
106
/ 111
107
/ 111
108
/ 111
109
/ 111
110
/ 111
111
/ 111
More Related Content
PDF
【Unite Tokyo 2019】Unityだったら簡単!マルチプレイ用ゲームサーバ開発 ~実践編~
by
UnityTechnologiesJapan002
PDF
【Unite Tokyo 2018】なんとっ!ユナイト!ミリシタをささえる『AKANE大作戦』とは?
by
UnityTechnologiesJapan002
PPTX
このPHP QAツールがすごい!2019
by
sasezaki
PPTX
ASTERIA徹底運用Tips
by
ASTERIA User Group
PPTX
複数人でのUnity開発ノウハウ
by
Yasuyuki Niwa
PPTX
ASTERIA WARP運用Tips「RDB連携時のトラブルシューティング 」
by
ASTERIA User Group
PDF
ruby-ffiについてざっくり解説
by
ota42y
PDF
こわくない Git
by
Kota Saito
【Unite Tokyo 2019】Unityだったら簡単!マルチプレイ用ゲームサーバ開発 ~実践編~
by
UnityTechnologiesJapan002
【Unite Tokyo 2018】なんとっ!ユナイト!ミリシタをささえる『AKANE大作戦』とは?
by
UnityTechnologiesJapan002
このPHP QAツールがすごい!2019
by
sasezaki
ASTERIA徹底運用Tips
by
ASTERIA User Group
複数人でのUnity開発ノウハウ
by
Yasuyuki Niwa
ASTERIA WARP運用Tips「RDB連携時のトラブルシューティング 」
by
ASTERIA User Group
ruby-ffiについてざっくり解説
by
ota42y
こわくない Git
by
Kota Saito
What's hot
PPTX
「Helix Core」導入事例紹介 『小~中規模事例 "Unreal Engine 4 × Helix Core ヒストリア運用レギュレーション紹介"』
by
historia_Inc
PDF
PPL 2022 招待講演: 静的型つき函数型組版処理システムSATySFiの紹介
by
T. Suwa
PPTX
UE4ローカライズ事例 (UE4 Localization Deep Dive)
by
エピック・ゲームズ・ジャパン Epic Games Japan
PDF
プログラムの処方箋~健康なコードと病んだコード
by
Shigenori Sagawa
PDF
Dockerfile を書くためのベストプラクティス解説編
by
Masahito Zembutsu
PPTX
凡人の凡人による凡人のためのデザインパターン第一幕 Public
by
bonjin6770 Kurosawa
PPTX
猫でも分かるUE4を使ったARコンテンツ作り方 初級編 ver 1.0.0
by
エピック・ゲームズ・ジャパン Epic Games Japan
PPTX
分散システムについて語らせてくれ
by
Kumazaki Hiroki
PDF
UE4×Switchで60FPSの(ネットワーク)対戦アクションをなんとかして作る! | UNREAL FEST EXTREME 2020 WINTER
by
エピック・ゲームズ・ジャパン Epic Games Japan
PDF
中輟生談教育: 完全用開放原始碼軟體進行 嵌入式系統教學
by
National Cheng Kung University
PPTX
今さら聞けないasteria warp運用の基礎 ファイナル
by
ASTERIA User Group
PDF
Unity開発で使える設計の話+Zenjectの紹介
by
torisoup
PPTX
shared_ptrとゲームプログラミングでのメモリ管理
by
DADA246
PPTX
Python / BlueprintによるUnreal Engineの自動化 / GTMF2019
by
Game Tools & Middleware Forum
PDF
Unreal Engine 5 早期アクセスの注目機能総おさらい Part 2
by
エピック・ゲームズ・ジャパン Epic Games Japan
PDF
60fpsアクションを実現する秘訣を伝授 解析編
by
エピック・ゲームズ・ジャパン Epic Games Japan
PPTX
世界一わかりやすいClean Architecture
by
Atsushi Nakamura
PDF
C/C++プログラマのための開発ツール
by
MITSUNARI Shigeo
PDF
OSSを利用したプロジェクト管理
by
Tadashi Miyazato
PPTX
UE4のレイトレで出来ること/出来ないこと
by
Satoshi Kodaira
「Helix Core」導入事例紹介 『小~中規模事例 "Unreal Engine 4 × Helix Core ヒストリア運用レギュレーション紹介"』
by
historia_Inc
PPL 2022 招待講演: 静的型つき函数型組版処理システムSATySFiの紹介
by
T. Suwa
UE4ローカライズ事例 (UE4 Localization Deep Dive)
by
エピック・ゲームズ・ジャパン Epic Games Japan
プログラムの処方箋~健康なコードと病んだコード
by
Shigenori Sagawa
Dockerfile を書くためのベストプラクティス解説編
by
Masahito Zembutsu
凡人の凡人による凡人のためのデザインパターン第一幕 Public
by
bonjin6770 Kurosawa
猫でも分かるUE4を使ったARコンテンツ作り方 初級編 ver 1.0.0
by
エピック・ゲームズ・ジャパン Epic Games Japan
分散システムについて語らせてくれ
by
Kumazaki Hiroki
UE4×Switchで60FPSの(ネットワーク)対戦アクションをなんとかして作る! | UNREAL FEST EXTREME 2020 WINTER
by
エピック・ゲームズ・ジャパン Epic Games Japan
中輟生談教育: 完全用開放原始碼軟體進行 嵌入式系統教學
by
National Cheng Kung University
今さら聞けないasteria warp運用の基礎 ファイナル
by
ASTERIA User Group
Unity開発で使える設計の話+Zenjectの紹介
by
torisoup
shared_ptrとゲームプログラミングでのメモリ管理
by
DADA246
Python / BlueprintによるUnreal Engineの自動化 / GTMF2019
by
Game Tools & Middleware Forum
Unreal Engine 5 早期アクセスの注目機能総おさらい Part 2
by
エピック・ゲームズ・ジャパン Epic Games Japan
60fpsアクションを実現する秘訣を伝授 解析編
by
エピック・ゲームズ・ジャパン Epic Games Japan
世界一わかりやすいClean Architecture
by
Atsushi Nakamura
C/C++プログラマのための開発ツール
by
MITSUNARI Shigeo
OSSを利用したプロジェクト管理
by
Tadashi Miyazato
UE4のレイトレで出来ること/出来ないこと
by
Satoshi Kodaira
Similar to 運用中の大規模オンラインゲームで 8年ぶりにPHPバージョンアップをした話
PDF
Introduction to Continuous Test Runner MakeGood
by
Atsuhiro Kubo
PDF
Eclipse PDT + MakeGoodによるPHPコードのテスト
by
Atsuhiro Kubo
PDF
Eclipse PDT + MakeGood による PHP コードのテスト
by
Atsuhiro Kubo
PDF
MakeGoodで快適なテスト駆動開発を
by
Atsuhiro Kubo
PDF
Getting Started with Testing using PHPUnit
by
Atsuhiro Kubo
PDF
8時間耐久PHPUnitの教室
by
Yusuke Ando
PPTX
GitLabを16万8千光年ワープさせた話 GITLAB BIG UPGRADE PROJECT
by
Wataru NOGUCHI
PPT
ビジネス的に高価値なアジャイルテスト
by
Tsutomu Chikuba
PPTX
Cibc lecture imagire
by
Takashi Imagire
PDF
ビルドプロセスとCI #STAC2014
by
Koji Hasegawa
PDF
PHP 8 で Web 以外の世界の扉を叩く
by
shinjiigarashi
PDF
PHPの今とこれから2020
by
Rui Hirokawa
PDF
大規模ソフトウェア開発とテストの経験について
by
Rakuten Group, Inc.
PPTX
GitLabを16万8千光年ワープさせた話(改)
by
Wataru NOGUCHI
PDF
Code igniterでテスト駆動開発 資料作成中
by
Takako Miyagawa
PDF
【Unite Tokyo 2019】運用中超大規模タイトルにおけるUnityアップデート課題の解決手法と事例
by
UnityTechnologiesJapan002
PDF
CIBC workshop by imagire
by
Takashi Imagire
PPT
PHP agile test tips
by
Tsutomu Chikuba
PDF
TDDBC osaka 2012/06/02
by
Hiro Yoshioka
PDF
テスト勉強会よしおか100311 1
by
Hiro Yoshioka
Introduction to Continuous Test Runner MakeGood
by
Atsuhiro Kubo
Eclipse PDT + MakeGoodによるPHPコードのテスト
by
Atsuhiro Kubo
Eclipse PDT + MakeGood による PHP コードのテスト
by
Atsuhiro Kubo
MakeGoodで快適なテスト駆動開発を
by
Atsuhiro Kubo
Getting Started with Testing using PHPUnit
by
Atsuhiro Kubo
8時間耐久PHPUnitの教室
by
Yusuke Ando
GitLabを16万8千光年ワープさせた話 GITLAB BIG UPGRADE PROJECT
by
Wataru NOGUCHI
ビジネス的に高価値なアジャイルテスト
by
Tsutomu Chikuba
Cibc lecture imagire
by
Takashi Imagire
ビルドプロセスとCI #STAC2014
by
Koji Hasegawa
PHP 8 で Web 以外の世界の扉を叩く
by
shinjiigarashi
PHPの今とこれから2020
by
Rui Hirokawa
大規模ソフトウェア開発とテストの経験について
by
Rakuten Group, Inc.
GitLabを16万8千光年ワープさせた話(改)
by
Wataru NOGUCHI
Code igniterでテスト駆動開発 資料作成中
by
Takako Miyagawa
【Unite Tokyo 2019】運用中超大規模タイトルにおけるUnityアップデート課題の解決手法と事例
by
UnityTechnologiesJapan002
CIBC workshop by imagire
by
Takashi Imagire
PHP agile test tips
by
Tsutomu Chikuba
TDDBC osaka 2012/06/02
by
Hiro Yoshioka
テスト勉強会よしおか100311 1
by
Hiro Yoshioka
More from KLab Inc. / Tech
PDF
【公開用】モバイルオンラインゲーム開発を支える早く、安く、使いやすいサーバインフラ構築
by
KLab Inc. / Tech
PDF
モバイルオンラインゲームのアプリ外課金の導入と運用方法について
by
KLab Inc. / Tech
PDF
デバイスファーム 「AirLab」 による 自動QAテストの実績と機械学習が拓く次世代QAの可能性
by
KLab Inc. / Tech
PDF
2024年5月17日 先駆的科学計算フォーラム2024 機械学習を用いた新たなゲーム体験の創出の応用
by
KLab Inc. / Tech
PDF
大規模モバイルオンラインゲーム開発における チーム組成とワークフロー最適化
by
KLab Inc. / Tech
PDF
AirLab導入でテストコストの大幅削減と品質向上! 数十台の端末を一斉に全自動テストできる社内DeviceFarmについてご紹介
by
KLab Inc. / Tech
PDF
生成AIが切り拓く新しいゲームの創り方・遊び方
by
KLab Inc. / Tech
PDF
表も裏もすべて見せます! KLab謹製大規模オンラインゲームの リアルタイムチャットマイクロサービス
by
KLab Inc. / Tech
PDF
モバイルオンラインゲームでの大規模観戦とチート対策 〜自社製リアルタイム通信システム「WSNet2」の事例〜
by
KLab Inc. / Tech
PDF
他業界からゲーム業界へ転向したときの話
by
KLab Inc. / Tech
PDF
KLabのゲーム開発を支える開発環境
by
KLab Inc. / Tech
PDF
ゲーム開発を知らない人にも分かるKLabのゲーム開発運営
by
KLab Inc. / Tech
PDF
「リアルISUCON」としてのモバイルオンラインゲーム開発
by
KLab Inc. / Tech
PDF
ゴリラテスト モバイルゲームのUIを自動的に検出・操作する モンキーテスト
by
KLab Inc. / Tech
PDF
モバイルアプリの高速で安定したビルドを支えるJenkins運用術
by
KLab Inc. / Tech
PDF
『ラブライブ!スクールアイドルフェスティバル ALL STARS』を支えるビルドパイプライン 〜より安定したサービス提供を目指して〜
by
KLab Inc. / Tech
PPTX
KLabのチャットシステム インフラ変遷
by
KLab Inc. / Tech
PPTX
Ganglia のUIにGrafanaを追加する話
by
KLab Inc. / Tech
PPTX
KLabのインフラエンジニア 〜 こんな感じで働いてます 〜
by
KLab Inc. / Tech
PPTX
属人化して詰まってた作業を自動化で楽しようとした話
by
KLab Inc. / Tech
【公開用】モバイルオンラインゲーム開発を支える早く、安く、使いやすいサーバインフラ構築
by
KLab Inc. / Tech
モバイルオンラインゲームのアプリ外課金の導入と運用方法について
by
KLab Inc. / Tech
デバイスファーム 「AirLab」 による 自動QAテストの実績と機械学習が拓く次世代QAの可能性
by
KLab Inc. / Tech
2024年5月17日 先駆的科学計算フォーラム2024 機械学習を用いた新たなゲーム体験の創出の応用
by
KLab Inc. / Tech
大規模モバイルオンラインゲーム開発における チーム組成とワークフロー最適化
by
KLab Inc. / Tech
AirLab導入でテストコストの大幅削減と品質向上! 数十台の端末を一斉に全自動テストできる社内DeviceFarmについてご紹介
by
KLab Inc. / Tech
生成AIが切り拓く新しいゲームの創り方・遊び方
by
KLab Inc. / Tech
表も裏もすべて見せます! KLab謹製大規模オンラインゲームの リアルタイムチャットマイクロサービス
by
KLab Inc. / Tech
モバイルオンラインゲームでの大規模観戦とチート対策 〜自社製リアルタイム通信システム「WSNet2」の事例〜
by
KLab Inc. / Tech
他業界からゲーム業界へ転向したときの話
by
KLab Inc. / Tech
KLabのゲーム開発を支える開発環境
by
KLab Inc. / Tech
ゲーム開発を知らない人にも分かるKLabのゲーム開発運営
by
KLab Inc. / Tech
「リアルISUCON」としてのモバイルオンラインゲーム開発
by
KLab Inc. / Tech
ゴリラテスト モバイルゲームのUIを自動的に検出・操作する モンキーテスト
by
KLab Inc. / Tech
モバイルアプリの高速で安定したビルドを支えるJenkins運用術
by
KLab Inc. / Tech
『ラブライブ!スクールアイドルフェスティバル ALL STARS』を支えるビルドパイプライン 〜より安定したサービス提供を目指して〜
by
KLab Inc. / Tech
KLabのチャットシステム インフラ変遷
by
KLab Inc. / Tech
Ganglia のUIにGrafanaを追加する話
by
KLab Inc. / Tech
KLabのインフラエンジニア 〜 こんな感じで働いてます 〜
by
KLab Inc. / Tech
属人化して詰まってた作業を自動化で楽しようとした話
by
KLab Inc. / Tech
運用中の大規模オンラインゲームで 8年ぶりにPHPバージョンアップをした話
2.
2 2012年 KLab株式会社 に入社 2016年からBLEACH
Brave Soulsにサーバサイドエンジニアとして参画。 2021年からサーバチームのリーダーをしています。 前職は、金融システムや物流管理のシステムを作っていました。 福田 陽介 エンジニア KLabGames事業本部 KLab株式会社 画像
3.
3 今日話すこと ● 前提説明(ゲームの説明・バージョンアップの理由) ● 開発方針(修正箇所洗い出し・ブランチについて) ●
後回しにしたこと ● 運用中プロジェクトでPHP8.1切り替えをどう進行したか ● バージョン移行後に起こったトラブル ● 数値で見る実績と効果 ● まとめ
4.
4 前提説明
5.
5 BLEACH Brave Soulsとは 『BLEACH』を題材とした3Dアクションゲームです。 登場する人気キャラクターを操作し、 本格的で爽快なアクションを楽しむ事ができます。
6.
6 サービスの特徴 ● 2015-07-23にリリースされ、8周年を迎えた ● リクエスト数:1000
- 7000 rps ● アップデート周期:1〜2ヶ月に1度、機能追加を実施 ● ゲームサーバ、運用ツール、バッチがPHPで実装されている BLEACH Brave Soulsとは
7.
7 ● バージョンアップ前のPHPバージョンは ○ 5.5.13 ■
2014-01-26 リリース ■ EOLは 2016-07-10 なぜPHPバージョンアップをしたかったか?
8.
8 ● PHPのセキュリティサポート懸念 なぜPHPバージョンアップをしたかったか?
9.
9 ● PHPのセキュリティサポート懸念 ● 導入しようとしたライブラリでPHP7.x以上が条件 なぜPHPバージョンアップをしたかったか?
10.
10 ● PHPのセキュリティサポート懸念 ● 導入しようとしたライブラリでPHP7.x以上が条件 ●
運用ツールのレスポンスタイムが遅い なぜPHPバージョンアップをしたかったか?
11.
11 ● PHPのセキュリティサポート懸念 ● 導入しようとしたライブラリでPHP7.x以上が条件 ●
運用ツールのレスポンスタイムが遅い ● PHPの新しい機能や記法を使いたい なぜPHPバージョンアップをしたかったか?
12.
12 ● PHPのセキュリティサポート懸念 ● 導入しようとしたライブラリでPHP7.x以上が条件 ●
運用ツールのレスポンスタイムが遅い ● PHPの新しい機能や記法を使いたい → PHP8.1 にして全部解決や! なぜPHPバージョンアップをしたかったか?
13.
13 ● PHPのセキュリティサポート懸念 ● 導入しようとしたライブラリでPHP7.x以上が条件 ●
運用ツールのレスポンスタイムが遅い ● PHPの新しい機能や記法を使いたい → PHP8.1 にして全部解決や! ただし、期間は6ヶ月。 2023年1月スタートで2023年6月末にリリースしたい。 なぜなら7月末に周年イベントで負荷が高くなる。 その1ヶ月前までには、PHP8.1を安定動作させておきたい。 なぜPHPバージョンアップをしたかったか? なん...だと...
14.
14 開発方針
15.
15 ● 修正対象箇所の洗い出し ○ PHP_CodeSniffer
を使ってPHP8.1のコード記法に適していない 箇所を洗い出した ● ひととおり修正し終わったあとで、ユニットテストを実施 まず修正箇所を洗い出そう!
16.
16 ● 洗い出した修正箇所:196件 ○ error:130件 ○
warning:66件 まずはこれを足がかりに進めることに まず修正箇所を洗い出そう!
17.
17 PHP8.1対応を平和に進めるための戦略 PHP8.1開発はPHP8.1専用のブランチで開発していた
18.
18 PHP8.1開発はPHP8.1専用のブランチで開発していた 開発期間中はPHP8.1バージョンアップだけでなく、PHP5.5 で新イベントや追加機能の開発も並行で行われる PHP8.1対応を平和に進めるための戦略 PHP5.5での追加機能
19.
19 PHP5.5での追加機能についてもPHP8.1対応する必要があるた め、定期的にPHP8.1用ブランチに取り込みが必要となる PHP8.1対応を平和に進めるための戦略 PHP5.5での追加機能
20.
20 PHP5.5での追加機能についてもPHP8.1対応する必要があるた め、定期的にPHP8.1用ブランチに取り込みが必要となる →ただし、PHP8.1のブランチは6ヶ月間という長い期間、開発が行 われるため差分が大きくなる。 PHP8.1対応を平和に進めるための戦略 PHP5.5での追加機能
21.
21 PHP5.5での追加機能についてもPHP8.1対応する必要があるた め、定期的にPHP8.1用ブランチに取り込みが必要となる →ただし、PHP8.1のブランチは6ヶ月間という長い期間、開発が行 われるため差分が大きくなる。 →差分が大きいとConflictする PHP8.1対応を平和に進めるための戦略 PHP5.5での追加機能
22.
22 なので、なるべくPHP8.1ブランチの差分を小さくしたい。 PHP8.1対応を平和に進めるための戦略
23.
23 なので、なるべくPHP8.1ブランチの差分を小さくしたい。 →PHP8.1ブランチの対応のうち、PHP5.5でも動作するものは PHP5.5のdevブランチに含めて事前リリースすることで差分をなる べく少なくしていた。 PHP8.1対応を平和に進めるための戦略 PHP5.5でも動作する修正
24.
24 なので、なるべくPHP8.1ブランチの差分を小さくしたい。 →PHP8.1ブランチの対応のうち、PHP5.5でも動作するものは PHP5.5のdevブランチに含めて事前リリースすることで差分をなる べく少なくしていた。 PHP8.1対応を平和に進めるための戦略 PHP5.5でも動作する修正 devブランチに入れて先にリリースする
25.
25 なので、なるべくPHP8.1ブランチの差分を小さくしたい。 →PHP8.1ブランチの対応のうち、PHP5.5でも動作するものは PHP5.5のdevブランチに含めて事前リリースすることで差分をなる べく少なくしていた。 PHP8.1対応を平和に進めるための戦略 PHP8.1対応の全体差分の 約50%を事前にリリース
26.
26 事前リリースした具体例
27.
27 count対応 事前リリースした具体例 count対応
28.
28 count対応 事前リリースした具体例 count対応
29.
29 count対応 ● PHP8.0から配列やCountableオブジェクト以外を引数に渡すと エラーになるようになった 事前リリースした具体例 count対応
30.
30 count対応 ● PHP8.0から配列やCountableオブジェクト以外を引数に渡すと エラーになるようになった ○ →配列やCountableオブジェクトになるよう引数を調整した。 PHP5.5の段階でも変えられるもの。 事前リリースした具体例
count対応
31.
31 PHPUnitはPHPのユニットテストフレームワーク 私たちの運用では、新しいコード変更が提案されるたび、PHPUnit でテストを行っている。 そして、そのテスト結果が問題ないことが確認された場合のみ、変 更をマージする。 これによりコードの品質を維持している。 PHPUnitについて
32.
32 事前リリースした具体例 @expectedException の廃止 ●
33.
33 ● @expectedException アノテーション ○
PHPUnitで例外のテストを書きたい時に使用する ○ PHPUnit9 で廃止 事前リリースした具体例 @expectedException の廃止
34.
34 ● @expectedException アノテーション ○
PHPUnitで例外のテストを書きたい時に使用する ○ PHPUnit9 で廃止 ● 対応方法 /* - * @expectedException ValidationException */ public function testCannotPlay() { + $this->expectException(ValidationException::class); $this->game->play(); // should throw an exception } 事前リリースした具体例 @expectedException の廃止
35.
35 ● @expectedException アノテーション ○
PHPUnitで例外のテストを書きたい時に使用する ○ PHPUnit9 で廃止 ● 対応方法 /* - * @expectedException ValidationException */ public function testCannotPlay() { + $this->expectException(ValidationException::class); $this->game->play(); // should throw an exception } 事前リリースした具体例 @expectedException の廃止 古いPHPUnitでは この書き方はできない
36.
36 ● @expectedException アノテーション ○
PHPUnitで例外のテストを書きたい時に使用する ○ PHPUnit9 で廃止 ● 対応方法 /* - * @expectedException ValidationException */ public function testCannotPlay() { + $this->setExpectedException(ValidationException::class); $this->game->play(); // should throw an exception } 事前リリースした具体例 @expectedException の廃止 PHPUnit4.5でも使える setExpectedExceptionに書 き換える
37.
37 ● @expectedException アノテーション ○
PHPUnitで例外のテストを書きたい時に使用する ○ PHPUnit9 で廃止 ● 対応方法 /* - * @expectedException ValidationException */ public function testCannotPlay() { + $this->expectException(ValidationException::class); $this->game->play(); // should throw an exception } 事前リリースした具体例 @expectedException の廃止 リリース時に expectException に 一括置き換えする
38.
38 ● PHPUnit_Framework_TestCase が PHPUnitFrameworkTestCase
になった ○ PHPUnit6で追加 事前リリースした具体例 名前空間対応
39.
39 ● PHPUnit_Framework_TestCase が PHPUnitFrameworkTestCase
になった ○ PHPUnit6で追加 ● 対応方法 事前リリースした具体例 名前空間対応 -class BleachUnitTestCase extends PHPUnit_Framework_TestCase +class BleachUnitTestCase extends PHPUnitFrameworkTestCase {
40.
40 ● PHPUnit_Framework_TestCase が PHPUnitFrameworkTestCase
になった ○ PHPUnit6で追加 ● 対応方法 ● エイリアスを使うことでPHPUnit4.5でも名前空間っぽい記載が できる 事前リリースした具体例 名前空間対応 -class BleachUnitTestCase extends PHPUnit_Framework_TestCase +class BleachUnitTestCase extends PHPUnitFrameworkTestCase { +class_alias('PHPUnit_Framework_TestCase', 'PHPUnitFrameworkTestCase');
41.
41 後回しにしたこと
42.
42 PHPバージョンアップはやることが多い ● ゲームサーバだけでなく、バッチ処理もPHP8.1対応 ● PHP7.3からMCrypt削除されたためOpenSSLに移行 ●
xhprof代替の新パフォーマンスモニタリングの導入 ● PHPUnit10でwithConsecutiveの廃止
43.
43 PHPバージョンアップはやることが多い ● ゲームサーバだけでなく、バッチ処理もPHP8.1対応 ● PHP7.3からMCrypt削除されたためOpenSSLに移行。 ●
新パフォーマンスモニタリングの導入(xhprof代替) ● PHPUnit10でwithConsecutiveの廃止 締め切りに間に合わない!
44.
44 PHPバージョンアップはやることが多い ● ゲームサーバだけでなく、バッチ処理もPHP8.1対応 ● PHP7.3からMCrypt削除されたためOpenSSLに移行。 ●
新パフォーマンスモニタリングの導入(xhprof代替) ● PHPUnit10でwithConsecutiveの廃止
45.
45 PHPバージョンアップはやることが多い ● ゲームサーバだけでなく、バッチ処理もPHP8.1対応 → バッチ処理は独立しているため、後日1つずつPHP8.1対応。 ●
PHP7.3からMCrypt削除されたためOpenSSLに移行。 ● 新パフォーマンスモニタリングの導入(xhprof代替) ● PHPUnit10でwithConsecutiveの廃止
46.
46 PHPバージョンアップはやることが多い ● ゲームサーバだけでなく、バッチ処理もPHP8.1対応 → バッチ処理は独立しているため、後日1つずつPHP8.1対応。 ●
PHP7.3からMCrypt削除されたためOpenSSLに移行。 →PECLでMCryptをインストールして一旦使い続ける ● 新パフォーマンスモニタリングの導入(xhprof代替) ● PHPUnit10でwithConsecutiveの廃止
47.
47 PHPバージョンアップはやることが多い ● ゲームサーバだけでなく、バッチ処理もPHP8.1対応 → バッチ処理は独立しているため、後日1つずつPHP8.1対応。 ●
PHP7.3からMCrypt削除されたためOpenSSLに移行。 →PECLでMCryptをインストールして一旦使い続ける ● 新パフォーマンスモニタリングの導入(xhprof代替) →リリース後に考える ● PHPUnit10でwithConsecutiveの廃止
48.
48 ● ゲームサーバだけでなく、バッチ処理もPHP8.1対応 → バッチ処理は独立しているため、後日1つずつPHP8.1対応。 ●
PHP7.3からMCrypt削除されたためOpenSSLに移行。 →PECLでMCryptをインストールして一旦使い続ける ● 新パフォーマンスモニタリングの導入(xhprof代替) →リリース後に考える ● PHPUnit10でwithConsecutiveの廃止 →一旦削除 PHPバージョンアップはやることが多い
49.
49 ● ゲームサーバだけでなく、バッチ処理もPHP8.1対応 → バッチ処理は独立しているため、後日1つずつ8.1対応。 ●
PHP7.3からMCrypt削除されたためOpenSSLに移行。 →PECLでMCryptをインストールして一旦使い続ける ● 新パフォーマンスモニタリングの導入(xhprof代替) →リリース後に考える ● PHPUnit10でwithConsecutiveの廃止 →一旦削除 PHPバージョンアップはやることが多い #あとでやる やることはたくさんあるので、 必須で対応しなければならないことに集中する
50.
50 運用中プロジェクトで PHP8.1切り替えを どう進行したか
51.
51 1. 開発環境について 2. どう進行したか? 3.
運用環境での出た問題 運用中プロジェクトでPHP8.1切り替えをどう進行したか
52.
52 通常運用時のフロー 1. 開発環境について
53.
53 通常運用時のフロー 1. 開発環境について ①
開発者やデバッグチームは開発環境に アップロードされたマスタデータを 元にプログラムを開発したり、データを チェックしたりします。
54.
54 通常運用時のフロー 1. 開発環境について ② チェックし終わったデータは本番DBに アップロードされ、プレイヤーは新しいキャ ラクターやイベントが遊べるようになります
55.
55 いきなりPHP8.1に切り替えてしまうと 1. 開発環境について ①デバッグ中の不具合を見つけても、 PHP8.1が原因なのかマスタデータが原因 なのかの切り分けが難しくなります。
56.
56 いきなりPHP8.1に切り替えてしまうと 1. 開発環境について ② データ準備やチェックに遅れがでて、定 常運用に影響がでてしまいます
57.
57 PHP8.1用のエンドポイントを準備して並行で動作 2. どう進行したか?
58.
58 PHP8.1用のエンドポイントを準備して並行で動作 2. どう進行したか? ① 定常運用のデバッグはPHP5.5でチェッ クするため影響なし
59.
59 PHP8.1用のエンドポイントを準備して並行で動作 2. どう進行したか? ② 定常運用を止めずに並行してPHP8.1 の検証を進めることができた
60.
60 3. 運用環境で出た問題
61.
61 3. 運用環境で出た問題(MessagePackの変更)
62.
62 MessagePackとは 3. 運用環境で出た問題(MessagePackの変更)
63.
63 3. 運用環境で出た問題(MessagePackの変更) なにが起こったか?
64.
64 3. 運用環境で出た問題(MessagePackの変更) なにが起こったか? →DBからのデータ読み込みに失敗するようになった
65.
65 3. 運用環境で出た問題(MessagePackの変更) なにが起こったか? →DBからのデータ読み込みに失敗するようになった なぜ?
66.
66 3. 運用環境で出た問題(MessagePackの変更) なにが起こったか? →DBからのデータ読み込みに失敗するようになった なぜ? →失敗していたのはMessagePackを使用していた箇所。 msgpackのバージョンアップ0.5.5 ->
2.2.0 の際 文字列の新シリアライズ方式(str8)が採用されたため。
67.
67 3. 運用環境で出た問題(MessagePackの変更) なにが起こったか? →DBからのデータ読み込みに失敗するようになった なぜ? →失敗していたのはMessagePackを使用していた箇所。 msgpackのバージョンアップ0.5.5 ->
2.2.0 の際 文字列の新シリアライズ方式(str8)が採用されたため。 新しいバージョンで保存したデータを古いバージョンで 読み込むことができなくなった (msgpack v0.5.6から変わった)
68.
68 暫定対処 3. 運用環境で出た問題(MessagePackの変更)
69.
69 暫定対処 並行稼働期間は新シリアライズ方式(str8)の設定をOFFにする 3. 運用環境で出た問題(MessagePackの変更)
70.
70 暫定対処 並行稼働期間は新シリアライズ方式(str8)の設定をOFFにする msgpack 0.5.5も 2.2.0
も同じデータ形式で保存される 3. 運用環境で出た問題(MessagePackの変更)
71.
71 暫定対処 並行稼働期間は新シリアライズ方式(str8)の設定をOFFにする msgpack 0.5.5も 2.2.0
も同じデータ形式で保存される 3. 運用環境で出た問題(MessagePackの変更) php.ini msgpack.use_str8_serialization = Off
72.
72 PHP8.1バージョンアップ後に 起こったトラブル
73.
73 バグ修正のためプログラムを本番環境にデプロイした際 約3%の確率でSegmentation fault が起こるようになった。 巨大PHPファイルのJITが時々壊れる問題
74.
74 バグ修正のためプログラムを本番環境にデプロイした際 約3%の確率でSegmentation fault が起こるようになった。 →バグ修正したプログラムが原因かと考えRevertしてデプロイす るも解消せず 巨大PHPファイルのJITが時々壊れる問題
75.
75 バグ修正のためプログラムを本番環境にデプロイした際 約3%の確率でSegmentation fault が起こるようになった。 →バグ修正したプログラムが原因かと考えRevertしてデプロイす るも解消せず →Webサーバの再起動をするとなぜか解消した 巨大PHPファイルのJITが時々壊れる問題
76.
76 バグ修正のためプログラムを本番環境にデプロイした際 約3%の確率でSegmentation fault が起こるようになった。 →バグ修正したプログラムが原因かと考えRevertしてデプロイす るも解消せず →Webサーバの再起動をするとなぜか解消した →
$a = 1 + 1; のような関係ない差分をデプロイしても発生 巨大PHPファイルのJITが時々壊れる問題
77.
77 色々調査したところ特定ファイルを本番環境にデプロイしたときだ け発生することがわかった 巨大PHPファイルのJITが時々壊れる問題
78.
78 色々調査したところ特定ファイルを本番環境にデプロイしたときだ け発生することがわかった そのファイルがプロジェクトの中で一番大きい PHPファイル(8000行超、360KB) 巨大PHPファイルのJITが時々壊れる問題
79.
79 色々調査したところ特定ファイルを本番環境にデプロイしたときだ け発生することがわかった そのファイルがプロジェクトの中で一番大きい PHPファイル(8000行超、360KB) 二番目に大きいPHPファイル(4000行超え、140KB)では再現 せず 巨大PHPファイルのJITが時々壊れる問題
80.
80 色々調査したところ特定ファイルを本番環境にデプロイしたときだ け発生することがわかった そのファイルがプロジェクトの中で一番大きい PHPファイル(8000行超、360KB) 二番目に大きいPHPファイル(4000行超え、140KB)では再現 せず サーバ再起動すれば解決するが、このままデプロイする度に再起 動するのは運用コストがかかるため対策したい... 巨大PHPファイルのJITが時々壊れる問題
81.
81 対策 opcache.jit の設定をOFFにすることで解決した 巨大PHPファイルのJITが時々壊れる問題
82.
82 対策 opcache.jit の設定をOFFにすることで解決した なぜかはわからない。初回コンパイル時の挙動に関連? (わかる人いたら教えてください) 巨大PHPファイルのJITが時々壊れる問題
83.
83 対策 opcache.jit の設定をOFFにすることで解決した なぜかはわからない。初回コンパイル時の挙動に関連? (わかる人いたら教えてください) opcache.jit をOFFにすることでレスポンスタイムは多少悪化した (3%くらい) 巨大PHPファイルのJITが時々壊れる問題
84.
84 対策 opcache.jit の設定をOFFにすることで解決した なぜかはわからない。初回コンパイル時の挙動に関連? (わかる人いたら教えてください) opcache.jit をOFFにすることでレスポンスタイムは多少悪化した (3%くらい) 予め適切なファイルサイズに分割するのが良いので、大きなPHP ファイルがあるプロジェクトは注意しましょう。 (自分たちは今後のアップデートで分割予定) 巨大PHPファイルのJITが時々壊れる問題
85.
85 アプリのバージョンアップの際の実機デバッグテストでNGとなり、 バグ報告がきたもの。 そのテスト内容が PHP8.1速すぎ問題
86.
86 アプリのバージョンアップの際の実機デバッグテストでNGとなり、 バグ報告がきたもの。 そのテスト内容が タイムアウトの動作チェックテスト タイムアウトまでの条件を1秒に変更するとサーバの処理 待ちで1秒以上かかりタイムアウトする PHP8.1速すぎ問題
87.
87 アプリのバージョンアップの際の実機デバッグテストでNGとなり、 バグ報告がきたもの。 そのテスト内容が タイムアウトの動作チェックテスト タイムアウトまでの条件を1秒に変更するとサーバの処理 待ちで1秒以上かかりタイムアウトする →早くなりすぎてタイムアウトしなかった(テストNG) PHP8.1速すぎ問題
88.
88 アプリのバージョンアップの際の実機デバッグテストでNGとなり、 バグ報告がきたもの。 そのテスト内容が タイムアウトの動作チェックテスト タイムアウトまでの条件を1秒に変更するとサーバの処理 待ちで1秒以上かかりタイムアウトする →早くなりすぎてタイムアウトしなかった(テストNG) (レスポンスデータを10倍くらいになるよう所持キャラを増やし てなんとか通過) PHP8.1速すぎ問題 一体いつから テストが通ると 錯覚していた?
89.
89 数値で見る実績と効果
90.
90 ● 164人日 ○ リーダ:1名(26人日) ○
メインの実装担当:1名(71人日) ○ インフラ等相談役:3名(42人日+10人日+15人日) 工数
91.
91 スケジュール(実績)
92.
92 バージョン情報 5.5.13 バージョンアップ前 8.1.13 バージョンアップ後 PHP 4.5 10.3 PHPUnit 1.4.10 3.7.2 PHP_CodeSniffer 0.5.5
2.2.0 msgpack
93.
93 PHP8.1バージョンアップのプログラム修正量 ● PHP8.1バージョンアップによるプログラム修正量 +16823 追加 -17638
削除
94.
94 PHP8.1バージョンアップのプログラム修正量 ● PHP8.1バージョンアップによるプログラム修正量 +16823 追加 -17638
削除 ● 修正箇所の内訳は?
95.
95 PHP8.1バージョンアップのプログラム修正量
96.
96 PHP8.1バージョンアップのプログラム修正量 全体の67%が テストコードの修正だった。
97.
97 PHP8.1バージョンアップのプログラム修正量 全体の67%が テストコードの修正だった。 PHPUnit対応が大変だった
98.
98 バグチケット件数 ● デバッグ期間中に報告されたバグチケットは2件だけ ○ いずれもサーバ設定に関連するもので、PHPバージョンアップの 修正に起因するものはなかった。
99.
99 バグチケット件数 ● デバッグ期間中に報告されたバグチケットは2件だけ ○ いずれもサーバ設定に関連するもので、PHPバージョンアップの 修正に起因するものはなかった。 ○
→ユニットテストを通す過程で、PHP_CodeSnifferでは検知でき ていなかった修正漏れなどが見つかり対応できた。 ○ → デバッグ前にユニットテストを通したことで、修正必要な部分 は対応しきれていた。
100.
100 バグチケット件数 ● デバッグ期間中に報告されたバグチケットは2件だけ ○ いずれもサーバ設定に関連するもので、PHPバージョンアップの 修正に起因するものはなかった。 ○
→ユニットテストを通す過程で、PHP_CodeSnifferでは検知でき ていなかった修正漏れなどが見つかり対応できた。 ○ → デバッグ前にユニットテストを通したことで、修正必要な部分 は対応しきれていた。 ○ ユニットテストのバージョンアップは大変だけど大切
101.
101 ● ゲームサーバAPIの平均レスポンスタイム ○ 0.238
秒 → 0.139秒 (42%改善) バージョンアップの効果 PHP8.1切り替えタイミング
102.
102 ● ユニットテストの処理時間 ○ アプデ前後で変更のなかったテストを一部抽出 ○
496秒 → 247秒 (50%改善) バージョンアップの効果
103.
103 ● 運用ツールのレスポンスタイム ○ 40%改善 バージョンアップの効果
104.
104 まとめ
105.
105 開発方針 ● PHP_CodeSniffer を使ってPHP8.1のコード記法に適していない 箇所を洗い出した ●
ひととおり修正し終わったあとで、ユニットテストを実施 ● PHP5.5でも動作するものは事前にリリースすることでPHP8.1ブ ランチの差分を最小にし、Conflictリスクを低下 まとめ
106.
106 運用中プロジェクトでPHP8.1切り替えをどう進行したか ● PHP8.1用サーバのエンドポイントを分けることで、並行して運 用 ● MessagePackのバージョンアップで新シリアライズ形式が採用 されたことによるデータ読み込み失敗については、並行運用 期間中だけ設定をOFFにした まとめ
107.
107 バージョンアップ後に起こったトラブル ● 本番環境デプロイ時に3%の確率でSegmentation faultが発生 する障害 ○
opcache.jit の設定をOFFにすることで暫定対応 ● PHP8.1が早すぎてタイムアウトのテストができない問題 ○ キャラ数を10倍に増やすことで対応 まとめ
108.
108 数値で見る実績と効果 ● 164人日 ● ゲームサーバ
42%改善 ● ユニットテスト 50%改善 ● 運用ツール 40%改善 まとめ
109.
109 まとめ PHPバージョンアップの修正箇所 ● 全体の67%がテストコードの修正だった ● テストを通す過程で、PHP_CodeSnifferでは検知できていな かった箇所などが見つかり対応できた。 ●
テストコードのおかげで、デバッグ時のバグが抑えられた。 ○ ユニットテストのバージョンアップは大変だけど大切
110.
110 今回事前リリースした部分は、もっと前から準備できた部分だっ た。 実際に修正箇所の約50%を事前リリースにできた。 164人日を確保するのはプロジェクトによっては難しい。 ただ、事前リリース分をコツコツ対応していくのは可能。 バージョンアップしたいを思っている方は、 「PHP_CodeSnifferでチェックをする」や「PHPUnitのリリースノートを 見てみる」など30分でできることから始めるとアップデートコストが 減るのでやっていきましょう! さいごに
111.
111 ここまで聞いていただき、 ありがとうございました。 おわり 資料へのリンクはこちら
Download