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
Laravelで学ぶ Webアプリケーションチューニング入門/web_application_...
Search
Ryo Tomidokoro
July 19, 2026
Programming
2.6k
4
Share
Embed
Copy iframe code
Copy JS code
Copy link
Start on current slide
Laravelで学ぶ Webアプリケーションチューニング入門/web_application_tuning_101
PHPカンファレンスJAPAN2026の登壇資料
Ryo Tomidokoro
July 19, 2026
More Decks by Ryo Tomidokoro
See All by Ryo Tomidokoro
あるアーキテクチャ決定と その結果/architecture-decision-and-its-result
hanhan1978
2
1.9k
開発者が知っておきたい複雑さの正体/where-the-complexity-comes-from
hanhan1978
8
4k
Spec Driven Development入門/spec_driven_development_for_learners
hanhan1978
2
2k
フロントエンドがTypeScriptなら、バックエンドはPHPでもいいじゃない/php-is-not-bad
hanhan1978
8
14k
どうすると生き残れないのか/how-not-to-survive
hanhan1978
17
15k
100分で本番デプロイ!Laravelで作るWebアプリケーション作成/100min_web_app_cicd
hanhan1978
1
310
PHPerのための計算量入門/Complexity101 for PHPer
hanhan1978
8
4.1k
集中して作業する技術/how_to_work_deeply
hanhan1978
69
62k
PHPでデータベースを作ってみた/create-data-with-php
hanhan1978
11
12k
Other Decks in Programming
See All in Programming
AI時代のシニアエンジニアとは
yosuke_furukawa
PRO
14
11k
Augmenting AI with the Power of Jakarta EE
ivargrimstad
0
530
8年前のNode.jsを動かして分かった、npm installの裏側
keisukeikeda
0
110
當我們開始不讀 Code - AI Agent 時代,Code Review 與 Clean Code 還剩下什麼?
jame2408
1
350
AmebaブログはKMPから卒業します
kmars0605
0
310
自作Discord音声botをLambda MicroVMsに移行した話 / Migrating My Discord Voice Bot to Lambda MicroVMs
akihisaikeda
0
230
HTML-in-Canvasで作る未来のWeb UI表現
clockmaker
5
6k
No More NoSuchMethodError
exoego
1
120
AIで開発が速くなった先で、開発チームは何を目指すか
shihochan
1
1.9k
複雑なUIコンポーネントとの ⻑い付き合い⽅:波及するバグからテスト戦略を経て、安全な再設計へ
mixplace
0
500
golang-bob.pdf
iwatsukayura
0
150
Kotlinize Is Not Just Converting to Kotlin
chigichan24
1
210
Featured
See All Featured
Measuring & Analyzing Core Web Vitals
bluesmoon
9
1k
技術選定の審美眼(2025年版) / Understanding the Spiral of Technologies 2025 edition
twada
PRO
120
120k
Build your cross-platform service in a week with App Engine
jlugia
234
19k
Responsive Adventures: Dirty Tricks From The Dark Corners of Front-End
smashingmag
254
23k
Fantastic passwords and where to find them - at NoRuKo
philnash
53
4k
The B2B funnel & how to create a winning content strategy
katarinadahlin
PRO
1
600
The Language of Interfaces
destraynor
162
27k
Evolving SEO for Evolving Search Engines
ryanjones
0
340
Statistics for Hackers
jakevdp
799
230k
Six Lessons from altMBA
skipperchong
29
4.6k
Digital Projects Gone Horribly Wrong (And the UX Pros Who Still Save the Day) - Dean Schuster
uxyall
1
3.6k
Color Theory Basics | Prateek | Gurzu
gurzu
1
510
Transcript
Laravelで学ぶ Webアプリケーションチューニングの基本 PHP Conference Japan 2026 hanhan1978
Name : hanhan1978 / Ryo Tomidokoro From : 横浜市 Job
: Backend Expert @ kaonavi inc Podcast : Yokohama North AM
本トークの内容 2019年の登壇内容を2025年バージョンに改訂 したものです。 基本思想は全く変わっていません。 https://speakerdeck.com/hanhan1978/web-application-tuning-guildline
注 Webアプリケーション ↓ Webアプリ 長いので、以後省略して書きます
質問です
パフォーマンスチューニング したことありますか?
未経験者の方へ チューニングは職人芸ではありません たんたんと順を追って確認する作業です
本トークの目指すところ 特にチューニングの経験が浅い方にとって まず何をどうしてよいか分からない!? 解像度を上げましょう AIへの指示も明確になります
よくない指示
よくない指示 あまりにも人間側が頭を使ってない
よい指示
よい指示 ボトルネックに対する具体的な指示
再掲 本トークの目指すところ 特にチューニングの経験が浅い方にとって まず何をどうしてよいか分からない!? 解像度を上げましょう AIへの指示も明確になります
ついでに Laravelが持つ基本的な機能がどのようなケース で役立つのかを紹介します
アウトライン 1. 全体を見る 2. Webアプリの責任? 3. Webアプリの処理を特定する 4. 改善ループ 5.
よくある問題処理とその対処
1. 全体を見る 2. Webアプリの責任? 3. Webアプリの処理を特定する 4. 改善ループ 5. よくある問題処理とその対処
1. 全体を見る
遅いとは?
遅いとは? 曖昧な言葉。 私の「遅い」と あなたの「遅い」は比較出来ない 主観であり、個人差がある。
曖昧な表現 なんか、この画面遅くない?
議論の開始としては悪くないが、作業をスター トするには情報が足りない このような「遅い」では改善が行えない。
具体的な表現 「メトリクスを確認すると、該当時間帯は 通常よりも500msecレスポンスが遅かった」
コンテキストや数値が説明されることで、具体 的な状況が浮彫になってくる こういう「遅い」は改善につながる
定性的な表現を定量的な表現に変換しましょう 「推測するな計測せよ」の世界です。
状況が分かっても「遅い」の原因は分かりません。 原因究明のために、Webアプリをもっと俯瞰してみ る必要があります。
Webアプリは どのようにしてブラウザに表示されるのか?
Webアプリの全体像 ネットワークはなぜつながるのか?第2版 - 戸根勤(日経BP社)
Webアプリケーションの全体像 自分たちの領域は意外と小さい ネットワークはなぜつながるのか?第2版 - 戸根勤(日経BP社)
アンコントローラブルな領域 Webアプリだけでは改善できない領域が沢山ある Webアプリが「遅い」の原因なのかも分からない
遅いの原因をつきとめる なんとなくアタリをつけてはいけない エンジニアとして理詰めで突き止める必要があ るが‥どうしよう?
1. 全体を見る 2. Webアプリの責任? 3. Webアプリの処理を特定する 4. 改善ループ 5. よくある問題処理とその対処
2. Webアプリの責任?
「遅い」の考え方
レイテンシー 任意の状態から、任意の状態まで 待つためにかかった時間を計測した値 例) HTTPのリクエストからレスポンスまで DBのクエリ送信からデータ受信まで 詳解システム・パフォーマンス Brendan Gregg 西脇靖紘
長尾高弘(オライリー・ジャパン)
Webアプリ全体のレイテンシー サーバー側 ネットワーク 光ファイバー等 プロバイダ ユーザー側 ネットワーク
レイテンシーの中身をみて、Webアプリ単体の レスポンスタイムがボトルネックで無い場合 Webアプリ以外で対処する方が効率が良い
Webアプリ以外の遅さ 例えば大陸間のネットワーク通信 速度制限のかかった格安SIM VPNの輻輳
例1 Time To First Byte 2秒 WebサーバーのResponse Time 150ミリ秒 サーバー側
ネットワーク インターネット プロバイダ 2秒 150ミリ秒 ユーザー側 ネットワーク
例1 Time To First Byte 2秒 WebサーバーのResponse Time 150ミリ秒 サーバー側
ネットワーク インターネット プロバイダ ユーザー側 ネットワーク 2秒 150ミリ秒 Webアプリはボトルネックではない (全体の 7.5%)
例2 Time To First Byte 2秒 WebサーバーのResponse Time 1.5秒 サーバー側
ネットワーク イン ター ネット 2秒 1.5秒 プロバイダ ユーザー側 ネットワーク
例2 Time To First Byte 2秒 WebサーバーのResponse Time 1.5秒 サーバー側
ネットワーク イン ター ネット プロバイダ ユーザー側 ネットワーク 2秒 1.5秒 Webアプリがボトルネックの可能性 (全体の 75%)
AWSで試してみる
Tokyo Region Ubuntu 26.04 LTS N. Virginia Region Ubuntu 26.04
LTS
東京のブラウザからアクセス Tokyo N. Virginia
Webアプリの全体像 160ms ネットワークはなぜつながるのか?第2版 - 戸根勤(日経BP社)
大陸間のネットワークでかかる時間 アメリカ大陸から +160msec Webアプリでは改善できない! CDN等のソリューションが必要
おまけ Tokyo Osaka 東京のブラウザからアクセス
レイテンシーの話にもどる
全体のレイテンシーの中でWebアプリのレスポンス タイムが支配的な場合 Webアプリをチューニングすることでレイテンシー を改善することが可能 サーバー側 ネットワーク イン ター ネット プロバイダ
ユーザー側 ネットワーク 2秒 1.5秒 Webアプリがボトルネックの可能性 (全体の 75%)
レスポンスタイム 各ウェブサーバーはログにレスポンスタイムを出力す ることが出来る。 Apache : %D Nginx : $request_time
Webアプリ単体のレイテンシー サーバー側ネットワーク ウェブサーバーのレスポンスタイム その他通信
ここまでで、Webアプリのレスポンスタイムがボ トルネックであることが分かった。 じゃあ、Webアプリのチューニングを開始...
まだ、ちょっと情報が足りてない その「遅さ」はWebアプリの責任?
Webアプリ以外の原因 • サーバー内の他処理の影響 • 連携しているAPIの障害 • 利用しているデータベースの障害
原因を探るための手がかり IaaS, SaaS のステータス情報、Xのざわつき メモリ使用量、CPU使用率、ディスクIO、ネットワー クIO etc…
実際の事例 https://aws.amazon.com/jp/message/56489/
頼れるツール類 • IaaS, PasSが提供するツール (CloudWatch) • サーバー監視ツール (Mackerel) • 統合型監視ツール(Datadog,
New Relic)
測定ツール(Laravel 特化) • Laravel Cloud (専用モニタリング) • Nightwatch
Mackerel
Datadog https://www.datadoghq.com/ja/blog/real-user-monitoring-with-datadog/
Laravel Nightwatch https://nightwatch.laravel.com/docs/start-guide
手に入る情報全てを使って、何がボトルネック になっているのかを特定する 一個ずつ一個ずつ、原因を絞り込んでいく
ついにWebアプリが原因らしいことが分かった じゃあ、次は何をしたらいい?
1. 全体を見る 2. Webアプリの責任? 3. Webアプリの処理を特定する 4. 改善ループ 5. よくある問題処理とその対処
3. Webアプリの処理を特定する
この段階では 「PHPのプログラムが原因らしい」 としか分かっていない。 具体的にどこを直せばいいのか、どうやって 特定するのか?
ツールの利用 一部の監視ツールには、自動で性能問題を検出 する機能が備わっています
Datadog さすがの高機能....
Observabilityの進化 2019年頃に比べて、遥かに強力になっていて、 どのエンドポイントが遅いのかまでは、すでに ランキングで可視化できてたりする
現代のパワープレイ 経験の浅い業務は手伝ってもらいましょう
プロファイラー コード実行時にどの処理にどのくらいの時間がかかっ ているのかを計測するもの と、言葉で言われてもピンとこないので実例を見たほ うが早い
プロファイラーの例1 https://docs.datadoghq.com/dashboards/widgets/profiling_flame_graph/
プロファイラーの例2 https://github.com/reliforp/reli-prof
その他のツール New Relic Xdebug Xhprof Blackfire Nightwatch
プロファイルは、性能問題を抱える処理を特定 する強力なツール 利用できれば、非常に効率的
プロファイラーが使えない場合の策
プロファイラーが使えない場合の策 ログに処理時を出す
1. 全体を見る 2. Webアプリの責任? 3. Webアプリの処理を特定する 4. 改善ループ 5. よくある問題処理とその対処
4. 改善ループ
ボトルネックどれ? Library読込 Routing DBクエリー APIコール DB クエリー2 300msec 250msec 3000msec
1500msec
ボトルネックどれ? Library読込 Routing DBクエリー APIコール DB クエリー2 300msec 250msec 3000msec
1500msec これ?
ボトルネックどれ? Library読込 Routing DBクエリー APIコール DB クエリー2 300msec 250msec 3000msec
1500msec 絶対コレ
ボトルネックから 目を逸らすな!!!
大切なことなのでもう一度
ボトルネックから 目を逸らすな!!!
ボトルネックは ボトルネックだからボトルネック
ボトルネックどれ? Library読込 Routing DBクエリー APIコール DB クエリー2 300msec 250msec 3000msec
1500msec 絶対コレ
改善1 Library読込 Routing DB クエリー APIコール DB クエリー2 300msec 250msec
1700msec 200msec
ボトルネックどこ? Library読込 Routing DB クエリー APIコール DB クエリー2 300msec 250msec
1700msec 200msec 絶対コレ
改善2 Library読込 Routing コール DB クエリー2 150 250msec API DB
クエリー 1550msec 200msec
ボトルネックどれ? Library読込 Routing コール DB クエリー2 150 250msec API DB
クエリー 1550msec 200msec 絶対コレ
改善3 Library読込 Routing API DB クエリー コール DB クエリー2 1400msec
200msec 150 100
特定 ▶ 改善 ▶ 特定 シンプルなループ
1. 全体を見る 2. Webアプリの責任? 3. Webアプリの処理を特定する 4. 改善ループ 5. よくある問題処理とその対処
5. よくある問題とその対処
その前に...
武器を手に入れておこう
https://speakerdeck.com/hanhan1978/complexity101-for-phper
https://speakerdeck.com/hanhan1978/study-cache-with-php
https://speakerdeck.com/hanhan1978/how-to-slow-laravel-php-con-2022
https://speakerdeck.com/hanhan1978/laravel-collection-time-complexity-2023
Webを支える技術 https://gihyo.jp/book/2010/978-4-7741-4204-3
サーバー/インフラを支える技術 https://gihyo.jp/book/2008/978-4-7741-3566-3
データ構造の知識 https://www.lambdanote.com/products/opendatastructures
ISUCON本 https://gihyo.jp/book/2022/978-4-297-12846-3
5. よくある問題とその対処
HTTPのAPIコール改善
HTTPのAPIコール改善
HTTPのAPIコール改善 性能以前の問題
HTTPのAPIコール改善 せめてタイムアウトを設定
HTTPのAPIコール改善 テストもやりやすくなる
HTTPのAPIコール改善 Cacheをつかうのも場合によってはアリ
メール送信の改善
メール送信の改善
メール送信の改善 SMTPが詰まる
メール送信の改善 キューで非同期送信
単純なデータ量の増加
単純なデータ量の増加
単純なデータ量の増加 徐々に処理速度が劣化していく
N+1クエリ
N+1クエリ
N+1クエリ relation経由でクエリ発行
N+1クエリ eager loading
N+1 Collection操作
N+1コレクション操作
N+1コレクション操作 O(n) x O(n)
N+1コレクション操作 O(n) x O(1)
Attribute Castingの負荷
Attribute Castingの負荷
Attribute Castingの負荷 この瞬間に Carbonが生成
Attribute Castingの負荷 生成処理を行わない
どれだけ手札を持っているかがチューニング成 功のカギです。知識こそパワー! • データ構造・アルゴリズムの変更 • キャッシュ • 非同期化 • スケールアップ・スケールアウト
仕様変更も強力な手段であることを忘れずに • 求められてない情報の演算 • 画面遷移の工夫による負荷分散 • 処理全体をバッチ化 あまりにも難しい処理は根本から無くす
最後に… チューニングとは、全体を見ながら少しずつ少 しずつ原因を特定していくプロセスです。 泥臭く追い込んでいく一連の作業をやってみる と、Webアプリの理解がさらに深まります。
最後に大切なことなのでもう一度だけ...
ボトルネックから 目を逸らすな!!!