Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Features
Speaker Deck
PRO
Sign in
Sign up for free
Search
Search
PHPStan をできる限り高速化してみる
Search
COLOPL Inc.
March 21, 2025
Technology
0
620
PHPStan をできる限り高速化してみる
PHPerKaigi 2025
https://phperkaigi.jp/2025/
PHPStan をできる限り高速化してみる
工藤 剛
COLOPL Inc.
March 21, 2025
Tweet
Share
More Decks by COLOPL Inc.
See All by COLOPL Inc.
コロプラ最新作インフラ構成について
colopl
0
180
Cloud Spanner 導入で実現した快適な開発と運用について
colopl
1
2.1k
コロプラのオンボーディングを採用から語りたい
colopl
7
2.4k
怖くない!ゼロから始めるPHPソースコードコンパイル入門
colopl
1
580
大規模トラフィックを支える ゲームバックエンドの課題と構成の変遷 ~安定したゲーム体験を実現するために~
colopl
3
6.3k
長期運用プロジェクトでのMySQLからTiDB移行の検証
colopl
3
1.8k
ゲームを支えるバックエンドエンジニアのリアルを公開!
colopl
1
1.6k
コロプラ_SRE_LCE_ゲームバックエンド_性能との戦い
colopl
0
1.1k
新卒3年目の ゲームバックエンドエンジニアが これまでに経験したこと
colopl
1
1.8k
Other Decks in Technology
See All in Technology
メタプログラミングRuby読書会の活用
willnet
0
120
ソフトウェア品質を支える テストとレビュー再考 / 吉澤 智美さん
findy_eventslides
0
340
AIでデータ活用を加速させる取り組み / Leveraging AI to accelerate data utilization
okiyuki99
6
1.8k
AIの個性を理解し、指揮する
shoota
3
640
DSPy入門
tomehirata
6
900
ざっくり学ぶ 『エンジニアリングリーダー 技術組織を育てるリーダーシップと セルフマネジメント』 / 50 minute Engineering Leader
iwashi86
9
4.5k
DMARCは導入したんだけど・・・現場のつぶやき 〜 BIMI?何それ美味しいの?
hirachan
1
160
新米エンジニアをTech Leadに任命する ー 成長を支える挑戦的な人と組織のマネジメント
naopr
1
360
データエンジニアとして生存するために 〜界隈を盛り上げる「お祭り」が必要な理由〜 / data_summit_findy_Session_1
sansan_randd
1
970
初海外がre:Inventだった人間の感じたこと
tommy0124
1
200
dbtとAIエージェントを組み合わせて見えたデータ調査の新しい形
10xinc
7
1.8k
設計に疎いエンジニアでも始めやすいアーキテクチャドキュメント
phaya72
27
19k
Featured
See All Featured
Practical Tips for Bootstrapping Information Extraction Pipelines
honnibal
PRO
23
1.5k
ReactJS: Keep Simple. Everything can be a component!
pedronauck
666
130k
Distributed Sagas: A Protocol for Coordinating Microservices
caitiem20
333
22k
The Straight Up "How To Draw Better" Workshop
denniskardys
239
140k
Optimising Largest Contentful Paint
csswizardry
37
3.5k
The Pragmatic Product Professional
lauravandoore
36
7k
Producing Creativity
orderedlist
PRO
348
40k
Improving Core Web Vitals using Speculation Rules API
sergeychernyshev
21
1.2k
How to Ace a Technical Interview
jacobian
280
24k
10 Git Anti Patterns You Should be Aware of
lemiorhan
PRO
658
61k
How Fast Is Fast Enough? [PerfNow 2025]
tammyeverts
2
270
GraphQLとの向き合い方2022年版
quramy
49
14k
Transcript
©COLOPL, Inc. PHPerKaigi 2025 - #phperkaigi PHPStan をできる限り 高速化してみる 株式会社コロプラ
技術基盤本部 工藤 剛 2025.03.23 - PHPerKaigi 2025 / Lightning Talk Session
©COLOPL, Inc. PHPerKaigi 2025 - #phperkaigi TL;DR
©COLOPL, Inc. PHPerKaigi 2025 - #phperkaigi PHPStan 2.x に移行しろ 新しくて強い
CPU を使え JIT を有効化しろ
©COLOPL, Inc. PHPerKaigi 2025 - #phperkaigi 閑話休題
©COLOPL, Inc. PHPerKaigi 2025 - #phperkaigi 名前: 工藤 剛 (a.k.a.
zeriyoshi / ぜり) 所属: 株式会社コロプラ 部署: 技術基盤本部 サーバー基盤グループ 2017 年新卒入社 会社では主に PHP や Linux 周りのミドルウェア領域を 担当、必要な PHP Extension の開発・保守や各種 ミドルウェアバージョンアップ、 CI / CD 環境整備 など 自己紹介
©COLOPL, Inc. PHPerKaigi 2025 - #phperkaigi それはさておき
©COLOPL, Inc. PHPerKaigi 2025 - #phperkaigi デカいプロジェクトの PHPStan での 解析が遅すぎる
©COLOPL, Inc. PHPerKaigi 2025 - #phperkaigi とあるデカプロジェクトの例 • マシンスペック ◦
Google Cloud Compute Engine, n1-highmem-16 ▪ CPU: 16 vCPU (Intel Skylake 系) ▪ RAM: 104 GiB • 使用メモリ: ピーク時 93GiB • 実行時間: 約 40 分 ローカルマシンで動かすとか 夢のまた夢
©COLOPL, Inc. PHPerKaigi 2025 - #phperkaigi 高速化1 - キャッシュを活用する PHPStan
のキャッシュ機能を活用するようにしてみる 👍Pros: • 40 分 -> 23 分くらいに高速化できた • キャッシュ状況によっては 5 分程度で終わるようになった 👎Cons: • branch 作成後初回や merge / rebase 時にはほぼ意味を成さない • キャッシュが肥大化しまくりディスク容量枯渇が頻発 • 稀にキャッシュが壊れ Job が一切動作しなくなる 時短効果よりも保守の辛さのほうが勝る...
©COLOPL, Inc. PHPerKaigi 2025 - #phperkaigi tmpfs を用いて Disk I/O
を高速化してみる 👍Pros: • なし 👎Cons: • ただでさえメモリ使用量が厳しかったので、並列実行数を減らすしかない ◦ Disk I/O の改善効果より並列数が減ることによる速度低下のほうが問題になった • tmpfs 上の git リポジトリの管理が大変 ◦ 全部載せたらおもすぎるので必要なものだけ copy したり... やる価値はない! 高速化2 - Disk I/O を高速化
©COLOPL, Inc. PHPerKaigi 2025 - #phperkaigi アーキテクチャの見直しによって大幅にメモリ使用量を削減することができた が、従来のルールとの互換性が崩れるため長らく試験的機能に分類されていた tadsan の記事がくわしい:
https://qiita.com/tadsan/items/75df674c17636f096ea2 👍Pros: • 全ての問題が解決する ◦ メモリ使用量、速度共に大幅に改善、フルで行ってもだいたい 10 分くらいで完了する 👎Cons: • 社内での内製ルールが軒並みぶっ壊れた 高速化3 - Bleeding Edge を有効化
©COLOPL, Inc. PHPerKaigi 2025 - #phperkaigi ところで
©COLOPL, Inc. PHPerKaigi 2025 - #phperkaigi 🎉 祝! PHPStan 2.x
🎉
©COLOPL, Inc. PHPerKaigi 2025 - #phperkaigi 新機能や改善など嬉しいことがいっぱいあるが、要するに 長らく Bleeding Edge
だった機能がデフォルト有効 になった、つまり... • 今までの内製ルールは大幅に手を加えなければならなくなった ◦ 動くよう手を加えれば、すなわち Bleeding Edge でも動くようになる • 将来的なメンテナンスを考えると 2.x に対応しないという選択肢はない ◦ Bleeding Edge 対応が「やれたらいいな」から「やらねばならぬ」に変わった • ステークホルダーへの説明がしやすくなった ◦ 「試験機能 (Bleeding Edge) 有効にしたら速くなるんですよ〜」から「バージョンアップ対 応が必要で、対応すると速くなるんですよ〜」では相手の受ける印象がだいぶ変わってくる PHPStan 2.x
©COLOPL, Inc. PHPerKaigi 2025 - #phperkaigi ミドルウェア更新タイミングで すべてを PHPStan 2.x
に移行
©COLOPL, Inc. PHPerKaigi 2025 - #phperkaigi 結果
©COLOPL, Inc. PHPerKaigi 2025 - #phperkaigi とあるプロジェクト: PHPStan 1.x ->
2.x PHPStan 1.9.1 PHPStan 2.0.4 実行時間 キャッシュなし 40 分 13 分 キャッシュあり 23 ~ 6 分 数秒 メモリ使用量 キャッシュなし 93 GB 10 GB キャッシュあり 50 GB (うろ覚え) 8 GB
©COLOPL, Inc. PHPerKaigi 2025 - #phperkaigi これはもう PHPStan 2.x に
移行するしかないでしょう
©COLOPL, Inc. PHPerKaigi 2025 - #phperkaigi • なんでメモリ使用量が少なくなってこんなに速くなったのかのまとめが 公式ブログに書いてあります ◦
https://phpstan.org/blog/phpstan-1-6-0-with-conditional-return-types ▪ tadsan によるありがたい翻訳 https://www.phper.ninja/entry/2022/04/28/015632 • Disk IO バウンドやメモリバウンドだった傾向が薄れ、明確に CPU バウンドになりました ◦ PHP 8.x の OPcache JIT の効果が向上しました ◦ 例えば Intel Skylake な Compute Engine や Intel Coffee Lake で Ubuntu 24.04 な 物理マシン上で実行するよりも Apple M3 Pro で OrbStack (ファイルマウント) な ローカルマシンで実行するほうが速い ▪ Compute Engine n1-highmem-16: 約 13 分 ▪ Compute Engine c2-highcpu-16: 約 10 分 (highmem いらなくなったので変えた) ▪ 物理マシン OS: Ubuntu 24.04LTS CPU: Core i7 8700, RAM 64GiB: 約 11 分 ▪ OrbStack OS: macOS Sonoma, M3 Pro 11C, RAM: 36GiB: 約 8 分 余談