debug-optimize-lcp について
debug-optimize-lcp は、Webページの最大コンテンツ描画(LCP)を調査・改善するスキルです。Webパフォーマンスの作業向けに、LCPの各段階、リソース読み込み、描画遅延をトレースから分析し、変更後の検証手順も示します。
主な機能
- 01ページのパフォーマンストレース記録
- 02LCPの内訳とインサイト分析
- 03LCP要素とリソースの特定
- 04ネットワークウォーターフォールと問題の調査
- 05ネットワークとCPUのエミュレーション
活用シーン
- 01LCPの遅延段階の特定
- 02初期表示画像の遅延読み込みの検出
- 03描画を妨げるリソースの確認
- 04変更前後のLCPトレース比較
MCP 対応
パフォーマンストレース、インサイト分析、ネットワークリクエストの調査、ページスクリプト評価に Chrome DevTools ツールを使用します。
インストール
コマンドをコピーしてターミナルで実行します。
npx skills add https:/ / github.com/ chromedevtools/ chrome-devtools-mcp --skill debug-optimize-lcpインストール後、Claude Code で/debug-optimize-lcpを入力して読み込まれたか確認します。
同梱ファイル
SKILL.md と一緒にインストールされる参考資料やスクリプト。
references/elements-and-size.mdlcp-breakdown.mdlcp-snippets.mdoptimization-strategies.md詳細
LCP とは何か、なぜ重要なのか
Largest Contentful Paint(LCP)は、ページのメインコンテンツがどれだけ速く表示されるかを測定します。ナビゲーション開始から、ビューポート内で最大の画像またはテキストブロックが描画されるまでの時間です。
- 良好:2.5 秒以下
- 改善が必要:2.5~4.0 秒
- 不良:4.0 秒超
LCP は、ユーザー体験と検索順位に直接影響する Core Web Vital です。モバイルページの 73% では、LCP 要素は画像です。
LCP の内訳
各ページの LCP は、隙間や重複のない 4 つの連続した内訳に分けられます。どの内訳がボトルネックかを把握することが、効果的な最適化の鍵です。
| 内訳 | LCP に占める理想的な割合 | 測定内容 |
|---|---|---|
| Time to First Byte(TTFB) | ~40% | ナビゲーション開始 → HTML の最初のバイトを受信 |
| リソース読み込み遅延 | <10% | TTFB → ブラウザーが LCP リソースの読み込みを開始 |
| リソース読み込み時間 | ~40% | LCP リソースのダウンロードにかかる時間 |
| 要素の描画遅延 | <10% | LCP リソースのダウンロード完了 → LCP 要素の描画 |
「遅延」にあたる内訳は、できるだけゼロに近づける必要があります。どちらかの遅延が LCP 全体に対して大きい場合は、まずそこを最適化しましょう。
よくある落とし穴:ほかの内訳を確認せずに、1 つの内訳(画像を圧縮して読み込み時間を短縮するなど)だけを最適化することです。本当のボトルネックが描画遅延の場合、画像を小さくしても効果はありません。短縮できた時間は、そのまま描画遅延に移るだけです。
デバッグのワークフロー
次の手順を順番に実行してください。各手順は前の手順を踏まえて進めます。
手順 1:パフォーマンストレースを記録する
ページに移動し、リロードを含むトレースを記録して、LCP を含めたページ読み込み全体を取得します。
navigate_pageにpageIdを指定し、対象の URL に移動します。performance_start_traceにpageId、reload: true、autoStop: trueを指定します。
トレース結果には、LCP のタイミングと利用可能なインサイトセットが含まれます。出力にあるインサイトセット ID をメモしてください。次の手順で使用します。
手順 2:LCP のインサイトを分析する
performance_analyze_insight を使用して、LCP に関するインサイトを詳しく調べます。トレース結果で次のインサイト名を探してください。
- LCPBreakdown — 4 つの LCP 内訳と、それぞれのタイミングを表示します。
- DocumentLatency — TTFB に影響するサーバー応答時間の問題です。
- RenderBlocking — LCP 要素の描画を妨げるリソースです。
- LCPDiscovery — LCP リソースを早期に検出できたかどうかを示します。
トレース結果にある pageId、インサイトセット ID、インサイト名を指定して performance_analyze_insight を呼び出します。
手順 3:LCP 要素を特定する
evaluate_script(pageId を指定)と、references/lcp-snippets.md にある 「Identify LCP Element」スニペットを使用して、LCP 要素のタグ、リソース URL、生のタイミングデータを確認します。
url フィールドから、ネットワークウォーターフォールで確認するリソースがわかります。url が空の場合、LCP 要素はテキストベースであり、読み込むリソースはありません。
手順 4:ネットワークウォーターフォールを確認する
list_network_requests を使用して、ほかのリソースと比べて LCP リソースがいつ読み込まれたかを確認します。
list_network_requestsにpageIdを指定し、resourceTypes: ["image", "font"]で絞り込みます(手順 3 に応じて調整してください)。- 次に
get_network_requestにpageIdと LCP リソースのリクエスト ID を指定して、詳細を取得します。
主な確認項目:
- 開始時間:HTML ドキュメントおよび最初のリソースと比較します。LCP リソースの読み込み開始が最初のリソースより大幅に遅い場合、解消すべきリソース読み込み遅延があります。
- 読み込み時間:リソース読み込み時間が長い場合、ファイルが大きすぎるか、サーバーの応答が遅い可能性があります。
ステップ 5: よくある問題について HTML を検査する
evaluate_script(pageId を指定)と、references/lcp-snippets.md にある 「Audit Common Issues」スニペット を使用して、ビューポート内の遅延読み込み画像、fetchpriority の欠落、レンダリングをブロックするスクリプトをチェックします。
最適化戦略
ボトルネックとなっているサブパートを特定したら、これらの優先順位付けされた修正を適用します。
1. リソースの読み込み遅延を解消する(目標: 10% 未満)
最もよくあるボトルネックです。LCP リソースは即座に読み込みを開始する必要があります。
- 根本原因: LCP 画像が JS/CSS 経由で読み込まれている、
data-srcの使用、またはloading="lazy"。 - 修正: 標準の
<img>とsrcを使用します。LCP 画像を絶対に遅延読み込みしないでください。 - 修正: 画像が HTML 内で検出可能でない場合は、
<link rel="preload" fetchpriority="high">を追加します。 - 修正: LCP の
<img>タグにfetchpriority="high"を追加します。
2. 要素のレンダリング遅延を解消する(目標: 10% 未満)
要素は読み込み直後にレンダリングされる必要があります。
- 根本原因: 大きなスタイルシート、
<head>内の同期スクリプト、またはメインスレッドのブロック。 - 修正: クリティカル CSS をインライン化し、非クリティカルな CSS/JS を遅延させます。
- 修正: メインスレッドをブロックしている長いタスクを分割します。
- 修正: サーバーサイドレンダリング(SSR)を使用して、要素が初期 HTML に存在するようにします。
3. リソースの読み込み時間を短縮する(目標: 約 40%)
リソースをより小さく、またはより速く配信できるようにします。
- 修正: モダンなフォーマット(WebP、AVIF)とレスポンシブ画像(
srcset)を使用します。 - 修正: CDN から配信します。
- 修正:
Cache-Controlヘッダーを設定します。 - 修正: LCP が Web フォントによってブロックされるテキストの場合は、
font-display: swapを使用します。
4. TTFB を削減する(目標: 約 40%)
HTML ドキュメント自体の到着に時間がかかりすぎています。
- 修正: リダイレクトを最小限にし、サーバーの応答時間を最適化します。
- 修正: エッジ(CDN)で HTML をキャッシュします。
- 修正: ページが戻る/進むキャッシュ(bfcache)の対象となるようにします。
修正の検証とエミュレーション
- 検証: トレースを再実行し(
performance_start_traceにpageIdとreload: trueを指定)、新しいサブパートの内訳を比較します。ボトルネックが縮小しているはずです。 - エミュレーション: ラボでの測定値は実環境の体験とは異なります。
emulateを使用して制約下でテストします:emulateにpageId、networkConditions: "Fast 3G"、cpuThrottlingRate: 4を指定します。- これにより、低速な接続やデバイスでのみ見られる問題が明らかになります。