mcpField
W
web-perf

web-perf

github.com/midudevテスト・品質7.0k59 回インストール1 週間前に更新
リポジトリ

web-perf について

ブラウザーツールとコードベースの調査によるウェブ性能監査のワークフローです。測定、課題の優先順位付け、アクセシビリティ確認、実行可能な報告を案内し、最新の指標情報の取得を勧めます。

主な機能

  1. 01利用可能なブラウザーツールの確認
  2. 02パフォーマンストレースの分析
  3. 03Core Web Vitals の確認
  4. 04ネットワークリクエストの調査
  5. 05アクセシビリティスナップショットの確認
  6. 06コードベースの最適化レビュー

活用シーン

  1. 01ウェブサイトの性能監査
  2. 02ページ読み込みの遅さの調査
  3. 03フロントエンド最適化の優先順位付け
  4. 04アクセシビリティとコードベースの確認

MCP 対応

監査の前に利用可能なブラウザーおよび性能ツールを確認するよう案内します。Chrome DevTools MCP の設定方法とサーバー構成例も含まれています。

インストール

コマンドをコピーしてターミナルで実行します。

$npx skills add https://github.com/midudev/autoskills --skill web-perf

インストール後、Claude Code で/web-perfを入力して読み込まれたか確認します。

詳細

Web パフォーマンス監査

Web パフォーマンスの指標、しきい値、ツールの API に関する知識は古くなっている可能性があります。具体的な数値や推奨事項を示す場合は、事前学習よりも情報の取得を優先してください。

情報の取得元

情報源取得方法用途
web.devhttps://web.dev/articles/vitalsCore Web Vitals のしきい値、定義
Chrome DevTools のドキュメントhttps://developer.chrome.com/docs/devtools/performanceツールの API、トレース分析
Lighthouse のスコアリングhttps://developer.chrome.com/docs/lighthouse/performance/performance-scoringスコアの重み付け、指標のしきい値

最初に:利用可能な MCP ツールを確認する

作業を始める前に、利用可能なブラウザーおよびパフォーマンス関連のツールを確認してください。依頼された監査に利用できる機能を使用してください。トレースツールが利用できない場合は、可能な範囲で情報源やネットワークの分析を続け、収集できなかった測定項目を明記してください。

ユーザーが Chrome DevTools MCP のセットアップを希望している場合は、そのインストールガイドを参照し、最新のパッケージバージョンを使用してください。セットアップがユーザーの許可範囲内にある場合に限り、MCP の設定を変更してください。そうでない場合は、先に確認してください。command と args を使用するクライアント向けのサーバーエントリーの例は次のとおりです。

"chrome-devtools": {
  "command": "npx",
  "args": ["-y", "chrome-devtools-mcp@latest"]
}

主なガイドライン

  • 断定的に伝える:ネットワークリクエスト、DOM、またはコードベースを確認して主張を検証し、そのうえで調査結果を明確に伝えてください。
  • 推奨する前に確認する:削除を提案する前に、使われていないことを確認してください。
  • 影響を数値化する:分析から得られた削減見込みを使用してください。影響が 0ms の変更を優先しないでください。
  • 問題でないものは省く:レンダリングを妨げるリソースの推定影響が 0ms であれば、その旨を記載するだけにして、対応は勧めないでください。
  • 具体的に伝える:「画像を最適化する」ではなく、「hero.png(450KB)を WebP に圧縮する」と伝えてください。
  • 優先順位を徹底する:LCP が 200ms で CLS が 0 のサイトはすでに優秀です。そのように伝えてください。

クイックリファレンス

タスクツール呼び出し
ページを読み込むnavigate_page(url: "...")
トレースを開始するperformance_start_trace(autoStop: true, reload: true)
分析情報を調べるperformance_analyze_insight(insightSetId: "...", insightName: "...")
リクエスト一覧を取得するlist_network_requests(resourceTypes: ["Script", "Stylesheet", ...])
リクエストの詳細を取得するget_network_request(reqid: <id>)
A11y スナップショットを取得するtake_snapshot(verbose: true)

ワークフロー

進捗を記録するため、このチェックリストをコピーしてください。

Audit Progress:
- [ ] Phase 1: Performance trace (navigate + record)
- [ ] Phase 2: Core Web Vitals analysis (includes CLS culprits)
- [ ] Phase 3: Network analysis
- [ ] Phase 4: Accessibility snapshot
- [ ] Phase 5: Codebase analysis (skip if third-party site)
フェーズ 1:パフォーマンストレース
  1. 対象の URL に移動します。

    navigate_page(url: "<target-url>")
    
  2. 再読み込みを伴うパフォーマンストレースを開始して、初回読み込み時の指標を記録します。

    performance_start_trace(autoStop: true, reload: true)
    
  3. トレースが完了するまで待ってから、結果を取得します。

トラブルシューティング:

  • トレースの結果が空、または失敗した場合は、まず navigate_page でページが正しく読み込まれたことを確認してください
  • 分析情報の名前が一致しない場合は、トレースの応答を調べて、利用可能な分析情報を一覧表示してください
フェーズ 2:Core Web Vitals の分析

performance_analyze_insight を使用して、主要な指標を抽出します。

注: インサイト名は Chrome DevTools のバージョンによって異なる場合があります。インサイト名が機能しない場合は、トレースのレスポンスに含まれる insightSetId を確認して、利用可能なインサイトを特定してください。

一般的なインサイト名:

指標インサイト名確認する内容
LCPLCPBreakdown最大コンテンツの描画までの時間。TTFB、リソースの読み込み、レンダリング遅延の内訳
CLSCLSCulpritsレイアウトシフトの原因となる要素(寸法が指定されていない画像、挿入されたコンテンツ、フォントの切り替わり)
レンダリングブロックRenderBlocking初回描画をブロックする CSS/JS
ドキュメントの遅延DocumentLatencyサーバーの応答時間に関する問題
ネットワーク依存関係NetworkRequestsDepGraph重要なリソースを遅延させているリクエストチェーン

例:

performance_analyze_insight(insightSetId: "<id-from-trace>", insightName: "LCPBreakdown")

主な閾値(良好/改善が必要/不良):

  • TTFB:< 800ms / < 1.8s / > 1.8s
  • FCP:< 1.8s / < 3s / > 3s
  • LCP:< 2.5s / < 4s / > 4s
  • INP:< 200ms / < 500ms / > 500ms
  • TBT:< 200ms / < 600ms / > 600ms
  • CLS:< 0.1 / < 0.25 / > 0.25
  • Speed Index:< 3.4s / < 5.8s / > 5.8s
フェーズ 3:ネットワーク分析

最適化の機会を特定するため、すべてのネットワークリクエストを一覧表示します:

list_network_requests(resourceTypes: ["Script", "Stylesheet", "Document", "Font", "Image"])

確認する項目:

  1. レンダリングをブロックするリソース:async/defer/media 属性のない、<head> 内の JS/CSS
  2. ネットワークチェーン:ほかのリソースの読み込み完了を待つため、発見が遅れるリソース(例:CSS のインポート、JS で読み込まれるフォント)
  3. プリロードの不足:重要なリソース(フォント、ヒーロー画像、主要なスクリプト)がプリロードされていない
  4. キャッシュの問題:Cache-Control、ETag、Last-Modified ヘッダーがない、または設定が不十分
  5. 大きなペイロード:圧縮されていない、またはサイズが大きすぎる JS/CSS バンドル
  6. 未使用のプリコネクト:指摘された場合は、そのオリジンへのリクエストが1件でもあったか確認してください。リクエストが0件なら、未使用であることが確実なため、削除を推奨します。リクエストはあるものの読み込みが遅い場合、プリコネクトには依然として価値がある可能性があります。

リクエストの詳細情報:

get_network_request(reqid: <id>)
フェーズ 4:アクセシビリティのスナップショット

アクセシビリティツリーのスナップショットを取得します:

take_snapshot(verbose: true)

主な不足項目を指摘します:

  • ARIA ID の欠落または重複
  • コントラスト比が低い要素(WCAG AA の基準を確認:通常のテキストは 4.5:1、大きなテキストは 3:1)
  • フォーカストラップ、またはフォーカスインジケーターの欠落
  • アクセシブルな名前のないインタラクティブ要素

フェーズ 5:コードベースの分析

コードベースにアクセスできないサードパーティーのサイトを監査する場合はスキップしてください。

改善できる箇所を把握するため、コードベースを分析します。

フレームワークとバンドラーの検出

設定ファイルを検索して、技術スタックを特定します:

ツール設定ファイル
Webpackwebpack.config.js、webpack.*.js
Vitevite.config.js、vite.config.ts
Rolluprollup.config.js、rollup.config.mjs
esbuildesbuild.config.js、esbuild を使うビルドスクリプト
Parcel.parcelrc、package.json(parcel フィールド)
Next.jsnext.config.js、next.config.mjs
Nuxtnuxt.config.js、nuxt.config.ts
SvelteKitsvelte.config.js
Astroastro.config.mjs

また、フレームワークの依存関係とビルドスクリプトについて、package.json も確認します。

ツリーシェイキングとデッドコード
  • Webpack:mode: 'production'、package.json の sideEffects、usedExports 最適化を確認します
  • Vite/Rollup:ツリーシェイキングはデフォルトで有効です。treeshake オプションを確認します
  • 確認する項目:バレルファイル(index.js による再エクスポート)、ユーティリティライブラリ全体の一括インポート(lodash、moment)
未使用の JS/CSS
  • CSS-in-JS と静的 CSS 抽出のどちらを使用しているか確認します
  • PurgeCSS/UnCSS の設定(Tailwind の content 設定)を確認します
  • 動的インポートと先行読み込みを特定します
ポリフィル
  • @babel/preset-env のターゲットと useBuiltIns の設定を確認します
  • core-js のインポート(サイズが大きすぎることがよくあります)を確認します
  • browserslist の設定で、対象範囲が広すぎないか確認します
圧縮とミニファイ
  • terser、esbuild、または swc によるミニファイを確認します
  • ビルド出力またはサーバー設定で gzip/brotli 圧縮を確認します
  • 本番ビルドのソースマップを確認します(外部ファイルにするか、無効にする必要があります)

出力形式

以下の形式で調査結果を提示します。

  1. Core Web Vitals の概要 - 指標、値、評価(良好/改善が必要/不良)を記載した表
  2. 主な問題 - 推定される影響度(高/中/低)を添えた、優先順位付きの問題リスト
  3. 推奨事項 - コードスニペットや設定変更を含む、具体的で実行可能な修正案
  4. コードベースの調査結果 - 検出したフレームワーク/バンドラー、最適化の機会(コードベースにアクセスできない場合は省略)

コメント