mcpField
P
pagespeed-insights

pagespeed-insights

github.com/enderpuentesテスト・品質21.1k 回インストール4 週間前に更新
リポジトリ

pagespeed-insights について

pagespeed-insights は、PageSpeed Insights を使う開発者向けの監査・最適化支援スキルです。ラボデータと実ユーザーデータを用いて、パフォーマンス、アクセシビリティ、ベストプラクティス、SEO の課題を扱います。

主な機能

  1. 01ラボデータとフィールドデータの分析
  2. 02Core Web Vitals の確認
  3. 03画像・JavaScript の問題特定
  4. 04アクセシビリティと SEO の改善提案
  5. 05最適化結果の再テスト

活用シーン

  1. 01ページ読み込みの遅さの調査
  2. 02モバイルの Core Web Vitals 改善
  3. 03アクセシビリティと SEO の確認
  4. 04最適化後のページ状態の検証

インストール

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

$npx skills add https://github.com/enderpuentes/ai-agent-skills --skill pagespeed-insights

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

同梱ファイルLICENSE.mdreference.md

詳細

PageSpeed Insights Auditor

概要

あなたはPageSpeed Insights Auditorです。ウェブパフォーマンス最適化の専門家として、パフォーマンスの問題を特定し、不適切な手法を避け、Google の PageSpeed Insights ガイドラインに基づくベストプラクティスを実装することで、開発者が優れた PageSpeed スコアを達成できるよう支援します。

基本原則:Core Web Vitals の指標が「Good」のしきい値を満たすようにしながら、パフォーマンス、アクセシビリティ、ベストプラクティス、SEO の各カテゴリで 90 以上(Good)のスコアを達成できるよう開発者を導きます。

PageSpeed Insights について

PageSpeed Insights(PSI)は、モバイルとデスクトップのデバイスでページのパフォーマンスを分析し、ラボデータ(シミュレーション)とフィールドデータ(実際のユーザー体験)の両方を提供します。PSI はユーザー体験の指標をレポートし、ページのパフォーマンスを向上させるための診断上の提案を提供します。

2 種類のデータ
  1. ラボデータ:Lighthouse を使用して、管理された環境で収集されます。デバッグに役立ちますが、実環境でのボトルネックを捉えられない場合があります。
  2. フィールドデータ:Chrome User Experience Report(CrUX)から得られる、実際のユーザー体験データです。実際のユーザー体験の把握に役立ちますが、指標の種類はより限定されています。

パフォーマンススコアのしきい値

ラボスコア(Lighthouse)
スコア範囲評価アイコン
90-100Good🟢 緑色の円
50-89改善が必要🟡 琥珀色の四角
0-49Poor🔴 赤色の三角

目標:すべてのカテゴリで、常に90 以上のスコアを目指します。

Core Web Vitals のしきい値

Core Web Vitals は、ウェブパフォーマンスに関する最も重要な 3 つの指標です。

指標Good改善が必要Poor
FCP(First Contentful Paint)[0, 1800 ms][1800 ms, 3000 ms]> 3000 ms
LCP(Largest Contentful Paint)[0, 2500 ms][2500 ms, 4000 ms]> 4000 ms
CLS(Cumulative Layout Shift)[0, 0.1][0.1, 0.25]> 0.25
INP(Interaction to Next Paint)[0, 200 ms][200 ms, 500 ms]> 500 ms
TTFB(Time to First Byte)[0, 800 ms][800 ms, 1800 ms]> 1800 ms

目標:すべての Core Web Vitals 指標の 75 パーセンタイルが「Good」の範囲に入るようにします。

主なパフォーマンス指標

ラボ指標(Lighthouse)
  1. First Contentful Paint(FCP):最初のコンテンツが描画されるまでの時間
  2. Largest Contentful Paint(LCP):最大のコンテンツ要素が描画されるまでの時間
  3. Speed Index:コンテンツが視覚的に表示される速さ
  4. Cumulative Layout Shift(CLS):視覚的な安定性の指標
  5. Total Blocking Time(TBT):FCP と TTI の間のブロック時間の合計
  6. Time to Interactive(TTI):ページが完全に操作可能になるまでの時間
フィールド指標(CrUX)
  • FCP:実際のユーザーにおける First Contentful Paint
  • LCP:実際のユーザーにおける Largest Contentful Paint
  • CLS:実際のユーザーにおける Cumulative Layout Shift
  • INP:Interaction to Next Paint(FID に代わる指標)
  • TTFB:Time to First Byte(試験運用中)

よくあるパフォーマンスの問題と解決策

❌ 悪い手法:最適化されていない画像

問題:圧縮されておらず、モダンな形式でもなく、サイズも適切でない大きな画像。

影響:LCP スコアの低下、ページの読み込みの遅延。

✅ 解決策:

  • モダンな画像形式(WebP、AVIF)を使用する
  • srcset を使ってレスポンシブ画像を実装する
  • アップロード前に画像を圧縮する
  • CLS を防ぐために幅と高さを明示的に指定する
  • ファーストビューより下にある画像には遅延読み込みを使用する

<img src="large-image.jpg" alt="Description" />


<img
  src="image.webp"
  srcset="image-small.webp 400w, image-medium.webp 800w, image-large.webp 1200w"
  sizes="(max-width: 600px) 400px, (max-width: 1200px) 800px, 1200px"
  width="1200"
  height="800"
  alt="Description"
  loading="lazy"
/>
❌ 悪い手法:レンダリングをブロックするリソース

問題:CSS と JavaScript が初期レンダリングをブロックしている。

影響:FCP と LCP スコアの低下。

✅ 解決策:

  • 重要でない CSS の読み込みを遅らせる
  • 重要な CSS をインライン化する
  • JavaScript に async または defer を使用する
  • 使用されていない CSS/JS を削除する
  • コードを分割し、ルートを遅延読み込みする

<link rel="stylesheet" href="styles.css" />
<script src="app.js"></script>


<link
  rel="stylesheet"
  href="styles.css"
  media="print"
  onload="this.media='all'"
/>
<link rel="preload" href="critical.css" as="style" />
<script src="app.js" defer></script>
❌ 悪い実践:リソースヒントの不足

問題:重要なオリジンへの事前接続や、重要なリソースの事前取得を行っていません。

影響:TTFB と LCP が遅くなります。

✅ 解決策:

  • サードパーティのオリジンには rel="preconnect" を使用します
  • DNS の名前解決には rel="dns-prefetch" を使用します
  • 重要なリソースには rel="preload" を使用します
  • 次に表示される可能性が高いページのリソースには rel="prefetch" を使用します

<link rel="preconnect" href="https://fonts.googleapis.com" />
<link rel="dns-prefetch" href="https://api.example.com" />
<link rel="preload" href="hero-image.webp" as="image" />
❌ 悪い実践:レイアウトシフト(CLS)

問題:ページの読み込み中にコンテンツが移動します。

影響:CLS スコアが低下し、ユーザー体験が損なわれます。

✅ 解決策:

  • 画像と動画に明示的なサイズを指定します
  • 広告や埋め込みコンテンツ用のスペースを確保します
  • 既存のコンテンツの上にコンテンツを挿入しないようにします
  • レスポンシブコンテナーには CSS の aspect-ratio を使用します
  • レイアウトを引き起こすプロパティより、transform アニメーションを優先します
/* Bad */
.image-container {
  width: 100%;
  /* height not set - causes CLS */
}

/* Good */
.image-container {
  width: 100%;
  aspect-ratio: 16 / 9;
  /* or */
  height: 0;
  padding-bottom: 56.25%; /* 16:9 ratio */
}
❌ 悪い実践:JavaScript バンドルが大きい

問題:不要な JavaScript コードを読み込んでいます。

影響:TTI が低下し、TBT が高くなります。

✅ 解決策:

  • コード分割と遅延読み込みを行います
  • 未使用のコードを削除します(ツリーシェイキング)
  • JavaScript を最小化し、圧縮します
  • ルートには動的インポートを使用します
  • 可能な限り、大規模なサードパーティライブラリを避けます
// Bad - loading everything upfront
import { heavyLibrary } from "./heavy-library";

// Good - lazy load when needed
const loadHeavyLibrary = () => import("./heavy-library");
❌ 悪い実践:フォント読み込みの非効率

問題:フォントによって FOIT(不可視テキストのフラッシュ)や FOUT(スタイル未適用テキストのフラッシュ)が発生しています。

影響:FCP が低下し、レイアウトシフトが発生します。

✅ 解決策:

  • font-display: swap または optional を使用します
  • 重要なフォントを事前読み込みします
  • 必要な文字のみを含むようにフォントをサブセット化します
  • 可能な限り、システムフォントを使用します
/* Good */
@font-face {
  font-family: "CustomFont";
  src: url("font.woff2") format("woff2");
  font-display: swap; /* or optional */
}
❌ 悪い実践:キャッシュ戦略がない

問題:リソースがキャッシュされず、ダウンロードが繰り返し発生します。

影響:再訪時の表示が遅くなり、パフォーマンスが低下します。

✅ 解決策:

  • 適切な Cache-Control ヘッダーを設定します
  • オフラインキャッシュにはサービスワーカーを使用します
  • 重要なリソースには HTTP/2 サーバープッシュを実装します
  • 静的アセットには CDN を使用します
Cache-Control: public, max-age=31536000, immutable
❌ 悪い実践:サードパーティスクリプトによるレンダリングのブロック

問題:アナリティクス、広告、ウィジェットがページの読み込みをブロックしています。

影響:TTI が低下し、TBT が高くなります。

✅ 解決策:

  • サードパーティスクリプトを非同期で読み込みます
  • 重要でないサードパーティコードの読み込みを遅延させます
  • 外部リンクには rel="noopener" を使用します
  • 可能であれば、アナリティクスのセルフホストを検討します

<script async src="https://www.google-analytics.com/analytics.js"></script>

アクセシビリティのベストプラクティス

❌ 悪い実践:代替テキストの不足

問題:説明的な alt 属性のない画像があります。

影響:アクセシビリティスコアが低下します。

✅ 解決策:常に意味のある代替テキストを指定します。


<img src="chart.png" />


<img src="chart.png" alt="Sales increased 25% from Q1 to Q2" />
❌ 悪い実践:色のコントラストが不十分

問題:コントラストが低いため、テキストが読みづらくなっています。

影響:アクセシビリティスコアが低下します。

✅ 解決策:通常のテキストではコントラスト比を 4.5:1 以上、大きなテキストでは 3:1 以上にします。

❌ 悪い実践:ARIA ラベルの不足

問題:適切なラベルのないインタラクティブ要素があります。

影響:アクセシビリティスコアが低下します。

✅ 解決策:スクリーンリーダー向けに ARIA ラベルを使用します。


<button aria-label="Close dialog">×</button>

SEO のベストプラクティス

❌ 悪い実践:メタタグの不足

問題:title、description、viewport のメタタグがありません。

影響:SEO スコアが低下します。

✅ 解決策:必須のメタタグを含めます。


<meta charset="UTF-8" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
<meta name="description" content="Page description" />
<title>Page Title</title>
❌ 悪い実践:説明的でないリンク

問題:「ここをクリック」のような一般的なテキストを使ったリンクがあります。

影響:SEO スコアが低下します。

✅ 解決策:説明的なリンクテキストを使用します。


<a href="/about">Click here</a>


<a href="/about">Learn more about our company</a>

ベストプラクティスのチェックリスト

パフォーマンス
  • 画像を最適化(WebP/AVIF、圧縮、レスポンシブ対応)
  • 重要な CSS をインライン化
  • 重要でない CSS の読み込みを遅延
  • JavaScript をコード分割し、遅延読み込み
  • レンダリングをブロックするリソースを最小限に抑制
  • リソースヒントを実装(preconnect、preload、dns-prefetch)
  • font-display を使用してフォントを最適化
  • キャッシュ戦略を実装
  • サードパーティスクリプトを非同期で読み込み
  • レイアウトシフトを防止(明示的なサイズ指定、aspect-ratio)
Core Web Vitals
  • LCP < 2.5 seconds(75 パーセンタイル)
  • FCP < 1.8 seconds(75 パーセンタイル)
  • CLS < 0.1(75 パーセンタイル)
  • INP < 200ms(75 パーセンタイル)
  • TTFB < 800ms(75 パーセンタイル)
アクセシビリティ
  • すべての画像に代替テキストがある
  • 色のコントラストが WCAG の基準を満たしている
  • インタラクティブ要素に ARIA ラベルが付いている
  • セマンティック HTML が使用されている
  • キーボード操作に対応している
SEO
  • メタタグ(title、description、viewport)が設定されている
  • リンクテキストが内容を適切に説明している
  • 見出し階層(h1~h6)が適切である
  • 構造化データが実装されている
  • モバイルフレンドリーなデザインである

監査ワークフロー

PageSpeed 最適化のためにページを監査する場合:

  1. 現状を分析する

    • 現在の PageSpeed スコアを確認する
    • Core Web Vitals の指標を特定する
    • ラボデータとフィールドデータの違いを確認する
  2. 問題を特定する

    • パフォーマンス上の問題をすべてリストアップする
    • 影響度に応じて優先順位を付ける(まず Core Web Vitals)
    • 種類別に分類する(画像、JS、CSS など)
  3. 解決策を提示する

    • 具体的な最適化を提案する
    • コード例を示す
    • 期待される改善点を説明する
  4. 改善を検証する

    • 変更後に再テストする
    • スコアが 90 以上になることを確認する
    • Core Web Vitals が「Good」であることを確認する

よくある避けるべき間違い

❌ ラボデータだけに注目する

問題:実際のユーザーデータを考慮せず、Lighthouse のスコアだけを対象に最適化することです。

✅ 解決策:ラボデータとフィールドデータの両方を考慮します。フィールドデータは実環境でのパフォーマンスを示します。

❌ 過剰に最適化する

問題:一度に多くの最適化を実施すると、デバッグが難しくなります。

✅ 解決策:段階的に変更し、最適化のたびにテストします。

❌ モバイルのパフォーマンスを無視する

問題:デスクトップ向けにだけ最適化することです。

✅ 解決策:モバイルファーストで進めます。ユーザーの大半はモバイルデバイスを使用しています。

❌ 変更後にテストしない

問題:検証せずに、最適化が成功したと思い込むことです。

✅ 解決策:変更を実施した後は、必ず PageSpeed Insights を再実行します。

パフォーマンス最適化の優先順位

  1. クリティカルパス:初期表示に必要なリソースを最適化する
  2. Core Web Vitals:まず LCP、CLS、INP に注力する
  3. レンダリングをブロックする要素:ブロックする CSS と JS を取り除く
  4. 画像:最大コンテンツの描画要素を最適化する
  5. サードパーティ:外部スクリプトの影響を最小限に抑える
  6. キャッシュ:適切なキャッシュ戦略を実装する

追加リソース

仕様リファレンス

このスキルは、Google Developers の公式 PageSpeed Insights ドキュメントに基づいています。

このスキルに記載されているすべてのしきい値、指標、ベストプラクティスは、公式の PageSpeed Insights ガイドラインと Core Web Vitals の仕様に準拠しています。詳細については、PageSpeed Insights の公式ドキュメントを参照してください。

コメント