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
Laravelで学ぶ Webアプリケーションチューニング入門/web_application_...
Search
Ryo Tomidokoro
July 19, 2026
Programming
390
3
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.4k
開発者が知っておきたい複雑さの正体/where-the-complexity-comes-from
hanhan1978
8
3.7k
Spec Driven Development入門/spec_driven_development_for_learners
hanhan1978
2
1.9k
フロントエンドが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
280
PHPerのための計算量入門/Complexity101 for PHPer
hanhan1978
8
3.8k
集中して作業する技術/how_to_work_deeply
hanhan1978
65
58k
PHPでデータベースを作ってみた/create-data-with-php
hanhan1978
11
11k
Other Decks in Programming
See All in Programming
Generative UI & AI-Assistants for Your Angular Solutions
manfredsteyer
PRO
0
110
えっ!!コードを読まずに開発を!?
hananouchi
0
200
Welcome to the "Parametricity" 🏙️ − Generic だけど Specific な世界 −
guvalif
PRO
1
170
ルールを書いて終わらせないハーネスエンジニアリング
yug1224
2
1.3k
【やさしく解説 設計編 #1】「ドメイン駆動」と「実装駆動」ってなに? 〜設計の考え方を、たとえ話で学ぼう〜
panda728
PRO
1
120
PHP Application における Kubernetes 内 gRPC 通信
ganchiku
0
390
エンジニア向け会社紹介/Findy Company Profile
findyinc
6
360k
LaravelLive Japan の裏方のすべて — 第188回 PHP勉強会@東京 (2026-06-24)
suguruooki
2
150
はてなアカウント基盤 State of the Union
cockscomb
1
1.3k
これからAgentCoreを触る方へトレンドはGatewayです
har1101
6
490
AI時代の仕事技芸論〜ソフトウェア開発で「遊ぶように働く」職人的熟達のすすめ(スクフェス仙台 2026バージョン)
kuranuki
0
630
ビデオ通話が繋がる0.2秒で何が起きているのか
supurazako
2
140
Featured
See All Featured
Building the Perfect Custom Keyboard
takai
2
810
Designing for humans not robots
tammielis
254
26k
CoffeeScript is Beautiful & I Never Want to Write Plain JavaScript Again
sstephenson
162
16k
How People are Using Generative and Agentic AI to Supercharge Their Products, Projects, Services and Value Streams Today
helenjbeal
1
240
XXLCSS - How to scale CSS and keep your sanity
sugarenia
249
1.3M
Why Mistakes Are the Best Teachers: Turning Failure into a Pathway for Growth
auna
0
180
Believing is Seeing
oripsolob
1
170
Accessibility Awareness
sabderemane
1
150
svc-hook: hooking system calls on ARM64 by binary rewriting
retrage
2
330
Easily Structure & Communicate Ideas using Wireframe
afnizarnur
194
17k
Conquering PDFs: document understanding beyond plain text
inesmontani
PRO
4
2.9k
Writing Fast Ruby
sferik
630
63k
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アプリの理解がさらに深まります。
最後に大切なことなのでもう一度だけ...
ボトルネックから 目を逸らすな!!!