webperf-loading について
Chrome DevToolsでページ読み込み性能を測定・診断するJavaScriptスニペットを提供するスキルです。TTFB、描画、スクリプト、フォント、リソースヒントを扱い、追加調査の手順も示します。
主な機能
- 01TTFBとFCPの測定
- 02描画を妨げるリソースの検査
- 03スクリプトとフォント読み込みの分析
- 04リソースヒントの検証
- 05読み込み性能の調査ワークフロー
活用シーン
- 01ページ読み込み性能の監査
- 02高いTTFBの診断
- 03描画を妨げるCSSやスクリプトの特定
- 04フォントとリソースのプリロード確認
MCP 対応
Chrome DevTools MCPの`mcp__chrome-devtools__evaluate_script`でスニペットを実行し、構造化された結果を読み取ります。CLIを使ってヘッドレスChromiumで実行する方法もあります。
インストール
コマンドをコピーしてターミナルで実行します。
npx skills add https:/ / github.com/ nucliweb/ webperf-snippets --skill webperf-loadingインストール後、Claude Code で/webperf-loadingを入力して読み込まれたか確認します。
同梱ファイル
SKILL.md と一緒にインストールされる参考資料やスクリプト。
references/schema.mdsnippets.mdscripts/Back-Forward-Cache.jsCache-Strategy-Analysis.jsClient-Side-Redirect-Detection.jsCompression-Audit.jsContent-Visibility.jsCritical-CSS-Detection.jsCSS-Media-Queries-Analysis.jsEvent-Processing-Time.jsFCP.jsFind-Above-The-Fold-Lazy-Loaded-Images.jsFind-Images-With-Lazy-and-Fetchpriority.jsFind-non-Lazy-Loaded-Images-outside-of-the-viewport.jsFind-render-blocking-resources.jsFirst-And-Third-Party-Script-Info.jsFirst-And-Third-Party-Script-Timings.jsFonts-Preloaded-Loaded-and-used-above-the-fold.jsInline-CSS-Info-and-Size.jsInline-Script-Info-and-Size.jsJS-Execution-Time-Breakdown.jsPrefetch-Resource-Validation.jsPriority-Hints-Audit.jsResource-Hints-Validation.jsResource-Hints.jsScript-Loading.jsServer-Timing-Early-Hints.jsService-Worker-Analysis.jsSpeculation-Rules-Inspector.jsSSR-Hydration-Data-Analysis.js詳細
WebPerf:読み込みパフォーマンス
Chrome DevTools でウェブパフォーマンスを測定する JavaScript スニペットです。
スクリプトの実行
mcp__chrome-devtools__evaluate_scriptでスクリプトを実行し、返されるオブジェクトを読み取ります。スクリプトはコンソールに出力しないため、返されるオブジェクトが結果です。結果には、references/schema.mdの説明にあるとおり、script、status、およびメトリクスデータ(value、rating、details、items、issues)が含まれます。statusが"tracking"の場合、スクリプトはページの監視を続けます。操作を行った後、別のmcp__chrome-devtools__evaluate_script呼び出しでgetDataFnに記載された関数(たとえばgetINP())を呼び出し、返されるオブジェクトを読み取ります。statusが"error"または"unsupported"の場合は、errorを確認します。ページがまだ読み込まれていないか、ブラウザーが API に対応していない可能性があります。
Chrome DevTools MCP を使用しない場合は、webperf-snippets CLI で同じスニペットを実行してください。この CLI はヘッドレス Chromium でページを読み込み、同じ形式の結果オブジェクトを出力します。コマンドは npx webperf-snippets <url> --snippet <Name> --json です。<Name> は .js を除いたスクリプト名です。Playwright と Chromium が必要です(npm install --save-dev webperf-snippets playwright を実行し、その後 npx playwright install chromium を実行します)。トラッキングスニペットでは、操作を実行するために --interact-script <file> を指定します。
スクリプト
scripts/Back-Forward-Cache.js— バックフォワードキャッシュscripts/CSS-Media-Queries-Analysis.js— CSS メディアクエリの分析scripts/Cache-Strategy-Analysis.js— キャッシュ戦略の分析scripts/Client-Side-Redirect-Detection.js— クライアントサイドリダイレクトの検出scripts/Compression-Audit.js— 圧縮の監査scripts/Content-Visibility.js— コンテンツの可視性scripts/Critical-CSS-Detection.js— クリティカル CSS の検出scripts/Event-Processing-Time.js— イベント処理時間scripts/FCP.js— 初回コンテンツ描画(FCP)scripts/Find-Above-The-Fold-Lazy-Loaded-Images.js— ファーストビュー内の遅延読み込み画像を検出scripts/Find-Images-With-Lazy-and-Fetchpriority.js—loadingがlazy、かつfetchpriorityが設定された画像を検出scripts/Find-non-Lazy-Loaded-Images-outside-of-the-viewport.js— ビューポート外にある遅延読み込みされない画像を検出scripts/Find-render-blocking-resources.js— レンダリングをブロックするリソースを検出scripts/First-And-Third-Party-Script-Info.js— ファーストパーティおよびサードパーティスクリプトの情報scripts/First-And-Third-Party-Script-Timings.js— ファーストパーティおよびサードパーティスクリプトのタイミングscripts/Fonts-Preloaded-Loaded-and-used-above-the-fold.js— プリロード済み、読み込み済み、およびファーストビュー内で使用されるフォントscripts/Inline-CSS-Info-and-Size.js— インライン CSS の情報とサイズscripts/Inline-Script-Info-and-Size.js— インラインスクリプトの情報とサイズscripts/JS-Execution-Time-Breakdown.js— JavaScript 実行時間の内訳scripts/Prefetch-Resource-Validation.js— プリフェッチリソースの検証scripts/Priority-Hints-Audit.js— 優先度ヒントの監査scripts/Resource-Hints-Validation.js— リソースヒントの検証scripts/Resource-Hints.js— リソースヒントscripts/SSR-Hydration-Data-Analysis.js— SSR フレームワークのハイドレーションデータ分析scripts/Script-Loading.js— スクリプトの読み込みscripts/Server-Timing-Early-Hints.js— Server-Timing と Early Hints のビューアーscripts/Service-Worker-Analysis.js— サービスワーカーの分析scripts/Speculation-Rules-Inspector.js— 投機ルールのインスペクターscripts/TTFB-Resources.js— 初回バイト到達時間:すべてのリソースの TTFB を測定scripts/TTFB-Sub-Parts.js— 初回バイト到達時間:TTFB の各部分を測定scripts/TTFB.js— 初回バイト到達時間:初回バイトまでの時間を測定scripts/Third-Party-Impact-by-Domain.js— ドメイン別のサードパーティの影響scripts/Validate-Preload-Async-Defer-Scripts.js— スクリプトの Preload、Async、Defer を検証scripts/Webfont-Usage-Analyzer.js— Web フォント使用状況アナライザー
よくあるワークフロー
読み込みパフォーマンスの包括的な監査
ユーザーが包括的な読み込み分析または「読み込みパフォーマンスを監査して」と依頼した場合:
- TTFB.js - サーバー/ネットワークパフォーマンスのベースラインを確立します
- FCP.js - 初回レンダリングのタイミングを確認します
- Find-render-blocking-resources.js - レンダリングを妨げているものを特定します
- Critical-CSS-Detection.js - CSS 戦略を検証します
- Script-Loading.js - スクリプトの読み込みパターンを監査します
- Resource-Hints-Validation.js - 最適化ヒントを確認します
サーバー/バックエンドのパフォーマンス調査
TTFB が遅い場合、またはユーザーが「サーバーが遅いのはなぜですか」と尋ねた場合:
- TTFB.js - 全体の TTFB を測定します
- TTFB-Sub-Parts.js - DNS、接続、サーバー時間に分解します
- Service-Worker-Analysis.js - TTFB に影響する SW のオーバーヘッドを確認します
- TTFB-Resources.js - 応答の遅いサードパーティまたは API エンドポイントを特定します
- Server-Timing-Early-Hints.js -
Server-Timingからバックエンドの各フェーズを読み取り、103 Early Hints を確認します
フォント読み込みの最適化
ユーザーがフォント、FOIT、FOUT、またはフォントのパフォーマンスについて尋ねた場合:
- Fonts-Preloaded-Loaded-and-used-above-the-fold.js - フォントを包括的に監査します
- Resource-Hints-Validation.js - フォントのプリロードが正しいことを検証します
- Find-render-blocking-resources.js - フォントがレンダリングを妨げているか確認します
- Webfont-Usage-Analyzer.js - 未使用、読み込まれていない、またはレンダリングをブロックする
font-displayを使用しているフォントフェイスを特定します
テキスト圧縮の監査
ユーザーが圧縮、gzip、brotli、またはテキストリソースの転送サイズについて尋ねた場合:
- Compression-Audit.js - 圧縮されずに配信されているテキストリソースを見つけ、削減量を推定します
- Find-render-blocking-resources.js - レンダリングを妨げている未圧縮の CSS/JS を優先的に確認します
- TTFB-Resources.js - 未圧縮リソースに対するサーバーの応答を確認します
スクリプトパフォーマンスの詳細調査
スクリプトがページの速度を低下させていると考えられる場合:
- Script-Loading.js - レンダリングを妨げるスクリプトと読み込み戦略を特定します
- First-And-Third-Party-Script-Info.js - ファーストパーティとサードパーティの影響を分けて確認します
- Third-Party-Impact-by-Domain.js - レンダリングブロック、メインスレッド時間、サイズに基づいてサードパーティのドメインを順位付けします
- First-And-Third-Party-Script-Timings.js - スクリプト接続の遅延を診断します
- JS-Execution-Time-Breakdown.js - ネットワーク時間と解析/実行時間を確認します
- Inline-Script-Info-and-Size.js - インラインスクリプトのオーバーヘッドを測定します
- Validate-Preload-Async-Defer-Scripts.js - プリロードのアンチパターンを見つけます
リソースヒントと優先度の最適化
ユーザーがリソース読み込みの優先度を最適化したい場合:
- Resource-Hints.js - 使用中のすべてのヒントの概要を確認します
- Resource-Hints-Validation.js - ヒントが実際に使用されていることを検証します
- Priority-Hints-Audit.js - fetchpriority の使用状況を確認します
- Prefetch-Resource-Validation.js - プリフェッチ戦略を検証します
- Validate-Preload-Async-Defer-Scripts.js - 競合を見つけます
- Speculation-Rules-Inspector.js - プリフェッチ/プリレンダリングのルールとプリレンダリングの有効化を調査します
CSS 最適化ワークフロー
CSS が肥大化している、またはレンダリングを妨げている場合:
- Critical-CSS-Detection.js - クリティカル CSS の戦略を確認します
- Inline-CSS-Info-and-Size.js - インライン CSS のオーバーヘッドを測定します
- CSS-Media-Queries-Analysis.js - 未使用のレスポンシブ CSS を見つけます
- Find-render-blocking-resources.js - レンダリングを妨げるスタイルシートを特定します
SSR/フレームワークのパフォーマンス
Next.js、Nuxt、Remix、またはその他の SSR フレームワークを分析する場合:
- SSR-Hydration-Data-Analysis.js - ハイドレーションデータのサイズを分析します
- Script-Loading.js - フレームワークのスクリプト読み込みパターンを確認します
- JS-Execution-Time-Breakdown.js - ハイドレーションの実行コストを測定します
- Content-Visibility.js - 最適化に content-visibility が使用されているか確認します
判断ツリー
この判断ツリーを使用して、結果に基づく後続のスニペットを自動的に実行します。
TTFB.js の実行後
- TTFB > 600ms の場合 → TTFB-Sub-Parts.js を実行して、時間がかかっている箇所を診断します
- Service Worker が検出された場合 → Service-Worker-Analysis.js を実行して、SW のオーバーヘッドを確認します
- リソース間で TTFB に大きな差がある場合 → TTFB-Resources.js を実行します
- TTFB-Sub-Parts.js でサーバー時間が大部分を占める場合 → Server-Timing-Early-Hints.js を実行して、バックエンドのどのフェーズに時間がかかっているか確認します
Server-Timing-Early-Hints.js の実行後
Server-Timingメトリクスが見つからない場合 → データベース、キャッシュ、レンダリングの各フェーズにServer-Timingヘッダーを追加することを推奨します- クロスオリジンリソースの情報が隠れているように見える場合 → それらのレスポンスに
Timing-Allow-Originを設定することを推奨します - 103 Early Hints が受信されず、サーバー時間が長い場合 → メインのスタイルシートと LCP 画像に Early Hints を設定することを推奨します
FCP.js の実行後
- FCP > 1.8s の場合 → 次を実行します:
- Find-render-blocking-resources.js(CSS/JS のブロック)
- Critical-CSS-Detection.js(CSS 戦略)
- Script-Loading.js(ブロックするスクリプト)
- FCP は良好でも、ユーザーが体感速度の遅さを訴えている場合 → webperf-core-web-vitals スキルで LCP を確認します
Find-render-blocking-resources.js の実行後
- ブロックするスタイルシートが見つかった場合 → Critical-CSS-Detection.js を実行します
- ブロックするスクリプトが見つかった場合 → 次を実行します:
- Script-Loading.js(読み込み戦略)
- Validate-Preload-Async-Defer-Scripts.js(アンチパターンの確認)
- フォントがブロックしている場合 → Fonts-Preloaded-Loaded-and-used-above-the-fold.js を実行します
Script-Loading.js の実行後
- ブロックするスクリプトやパーサーをブロックするスクリプトが多い場合 → 次を実行します:
- JS-Execution-Time-Breakdown.js(実行コストの測定)
- First-And-Third-Party-Script-Info.js(原因となっているサードパーティの特定)
- サードパーティスクリプトが検出された場合 → First-And-Third-Party-Script-Timings.js を実行します
- 大きなインラインスクリプトがある場合 → Inline-Script-Info-and-Size.js を実行します
Resource-Hints-Validation.js の実行後
- 未使用のプリロードが見つかった場合 → 削除することを推奨します
- 重要なリソースのプリロードが不足している場合 → 次を実行します:
- Fonts-Preloaded-Loaded-and-used-above-the-fold.js(フォント)
- Priority-Hints-Audit.js(LCP 候補)
- async/defer スクリプトにプリロードが設定されている場合 → Validate-Preload-Async-Defer-Scripts.js を実行します
Compression-Audit.js の実行後
- 圧縮されていない CSS/JS が見つかった場合 → Find-render-blocking-resources.js を実行して、レンダリングをブロックしているか確認します
- 推定削減量が 100KB を超える場合 → サーバーまたは CDN で gzip か brotli を有効にすることを推奨します
- corsLimitedAnalysis が true の場合 → 結果を下限値として報告し、管理下にあるリソースに
Timing-Allow-Originを設定するよう提案します
Third-Party-Impact-by-Domain.js の実行後
- ドメインがレンダリングをブロックしている場合 →
async、defer、遅延読み込み、またはセルフホスティングを推奨し、読み込み戦略を確認するために Script-Loading.js を実行します - ドメインのメインスレッド時間が 250ms を超える場合 → Long-Animation-Frames-Script-Attribution.js(webperf-interaction)を実行して原因となっている関数を特定し、スクリプトの読み込みを遅らせるか削除することを推奨します
- リクエスト数が少ないドメインが多数ある場合 → タグを監査し、未使用のものを削除することを推奨します
- corsLimitedAnalysis が true の場合 → サイズを下限値として報告し、非表示のリソースの時間を確認するには First-And-Third-Party-Script-Timings.js を使用します
Service-Worker-Analysis.js の実行後
- SW のオーバーヘッドが 100ms を超える場合 → Navigation Preload API を推奨します
- SW が多数のリソースをキャッシュしている場合 → TTFB-Resources.js を実行して、キャッシュヒットを確認します
- SW が検出されず、サイトが SPA/PWA の場合 → SW の実装を推奨します
Fonts-Preloaded-Loaded-and-used-above-the-fold.js の実行後
- フォントがプリロードされているものの、ファーストビューで使用されていない場合 → プリロードの削除を推奨します
- フォントが使用されているものの、プリロードされていない場合 → プリロードの追加を推奨します
- フォントのバリエーションが多数読み込まれている場合 → サブセット化するかバリエーションを減らすことを提案し、未使用のものを特定するために Webfont-Usage-Analyzer.js を実行します
Webfont-Usage-Analyzer.js の実行後
- フォントが読み込まれているものの使用されていない場合 →
@font-face宣言またはプリロードの削除を推奨します - フォントフェイスで
font-display: autoまたはblockが使用されている場合 →swapまたはoptionalを推奨し、続けて Find-render-blocking-resources.js を確認します - フォントのバイト数が大きい場合 →
unicode-rangeと WOFF2 を使用したサブセット化を提案します - LCP 要素がテキストの場合 → webperf-core-web-vitals スキルを使って LCP.js を実行します
First-And-Third-Party-Script-Info.js の実行後
- サードパーティスクリプトが多数(>5)ある場合 → 次を実行します:
- First-And-Third-Party-Script-Timings.js(詳細なタイミング)
- JS-Execution-Time-Breakdown.js(実行への影響)
- サードパーティスクリプトの処理が遅い場合 → async/defer または削除を推奨します
SSR-Hydration-Data-Analysis.js の実行後
- ハイドレーションデータが 100KB を超える場合 → 最適化の方法を推奨します
- ハイドレーションスクリプトが複数ある場合 → フレームワークの設定を調査します
- インラインのハイドレーションデータが大きい場合 → ストリーミングまたはチャンク分割を検討します
Priority-Hints-Audit.js の実行後
- LCP 候補に fetchpriority="high" がない場合 → 追加を推奨します
- 優先度が競合している場合(preload + low) → 競合の解消を推奨します
- 重要でないリソースに fetchpriority が設定されている場合 → 優先度戦略を見直します
Prefetch-Resource-Validation.js の実行後
- prefetch ヒントが 10 件を超える場合 → 重要なリソースに絞ることを推奨します
- 個々の prefetch が 500KB を超える場合 → 必要性を再検討します
- prefetch の合計が 2MB を超える場合 → モバイルの帯域幅に関する懸念として指摘します
- 次に移動する可能性が高いページへの prefetch ヒントがほとんどない、またはまったくない場合 → Speculation-Rules-Inspector.js を実行して、prefetch/prerender ルールを確認します
Speculation-Rules-Inspector.js の実行後
- 投機ルールが見つからず、サイト内の遷移が予測可能な場合 → prefetch または prerender ルールの追加を推奨します
- 無効な JSON または無駄の多いルール(多数の URL を eager に prerender するなど)がある場合 → 修正するか、eagerness を
moderateまたはconservativeに下げることを推奨します - ページが prerender されていた場合(
activationStart> 0) → TTFB.js、FCP.js、LCP の結果を解釈する際にactivationStartを差し引きます
Critical-CSS-Detection.js の実行後
- レンダリングをブロックする CSS が 14KB を超える場合 → クリティカル CSS のインライン化を推奨します
- インライン CSS がなく、ブロックするスタイルシートがある場合 → クリティカル CSS の抽出を提案します
- CSS の合計が 50KB を超える場合 → CSS-Media-Queries-Analysis.js を実行して、削減できる箇所を探します
Back-Forward-Cache.js の実行後
- bfcache がブロックされている場合 → ブロックの理由に応じた具体的な修正方法を提示します
- bfcache を利用できる場合 → 最適化が機能していることを確認します
Client-Side-Redirect-Detection.js の実行後
- クライアントサイドリダイレクトが検出された場合 → サーバーサイドリダイレクトを推奨します
- リダイレクトチェーンが見つかった場合 → 中間のリダイレクトをなくすことを提案します
参考資料
references/snippets.md— 各スクリプトの説明としきい値references/schema.md— スクリプト出力を解釈するための戻り値スキーマ