AIエージェントに「実ブラウザの目」を持たせる
AIコーディングエージェントはコードを書くのは得意ですが、書いたコードが実際のブラウザでどう動くかを知らない ——これが長らく「生成したUIコードが微妙にズレる」「パフォーマンス劣化を提案できない」 といった弱点の根本原因でした。
Chrome DevTools MCPは、この空白を埋めるためにGoogleのChromeチームが公開したMCPサーバーです。 Claude Code・Gemini CLI・Cursor・Copilotなどのエージェントから、 実際に立ち上がったChromeを操作し、DevToolsそのものの機能 (トレース、Lighthouse、コンソール、ネットワーク、スクリーンショット等)をツールとして呼び出せるようになります。
なぜPuppeteer/Playwright MCPだけでは足りないのか
ブラウザ操作系のMCPとしては既にPuppeteer/Playwrightベースのものが存在します。 では何が違うのか。ざっくり整理すると次のようになります。
| 観点 | Playwright MCP等 | Chrome DevTools MCP |
|---|---|---|
| 主目的 | E2E自動化・UI操作の再現 | DevToolsそのものの機能をエージェントに開放 |
| パフォーマンストレース | 原則なし(拡張は可能) | performance_start_traceでDevToolsと同等のトレースを取得 |
| Insights抽出 | スクリプトで実装 | performance_analyze_insightで構造化された洞察を直接返す |
| Lighthouse | 別ツール | lighthouse_auditとして統合 |
| コンソール/ネットワーク | 取得可能だが手動整形 | source map付きスタックやリクエスト単位で構造化 |
| 対象ブラウザ | Chromium/Firefox/WebKit | Chrome専用(DevToolsフル機能が前提) |
つまりChrome DevTools MCPの本質は「ブラウザを操作できる」ことではなく、 DevToolsという最強のWeb検証ツールをAIのコンテキストへ構造化して流し込める点にあります。 パフォーマンス最適化・Core Web Vitals調査・実環境再現型のデバッグに特に効きます。
全体アーキテクチャ
graph LR
subgraph "AI Agent"
A["Claude Code / Cursor / Gemini"]
end
subgraph "MCP Layer"
B["chrome-devtools-mcp<br/>(29 tools)"]
end
subgraph "Browser Automation"
C["Puppeteer"]
end
subgraph "Chrome"
D["DevTools Protocol (CDP)"]
E["Trace / Console / Network"]
F["Lighthouse / Insights"]
end
A -- "tool calls" --> B
B -- "drives" --> C
C -- "CDP" --> D
D --> E
D --> F
F -- "structured results" --> B
B -- "tool results" --> A
内部的にはPuppeteerでChromeを起動し、Chrome DevTools Protocol(CDP)経由でDevTools機能を呼び出しています。
つまりHeadless/Headedどちらでも動き、ローカルに既に起動しているChromeへのアタッチも可能です。
開発中のdevサーバー(例: npm run dev)に対して、
エージェントが直接アクセスして検証できる——というのが体験として大きい違いです。
29ツールの全体像
ツールは6ドメインに整理されます。全体像を把握しておくと、プロンプトで「どの能力を使わせたいか」を明示しやすくなります。
| ドメイン | ツール数 | 代表ツール | 主な用途 |
|---|---|---|---|
| 入力操作 | 9 | click, type_text, fill_form, drag, hover | ユーザー操作の再現 |
| ナビゲーション | 6 | navigate_page, new_page, wait_for, select_page | ページ遷移・タブ管理 |
| エミュレーション | 2 | emulate, resize_page | モバイル・低速回線・画面サイズの再現 |
| パフォーマンス | 4 | performance_start_trace, performance_analyze_insight, take_memory_snapshot | トレース取得・Insights抽出・メモリ計測 |
| ネットワーク | 2 | list_network_requests, get_network_request | リクエスト一覧・詳細 |
| デバッグ | 6 | take_screenshot, list_console_messages, evaluate_script, lighthouse_audit | スクショ・コンソール・スクリプト評価・監査 |
Claude Codeへのセットアップ
導入は極めて軽量で、npx経由で起動できます。
.mcp.json(プロジェクトルート):
{
"mcpServers": {
"chrome-devtools": {
"command": "npx",
"args": ["-y", "chrome-devtools-mcp@latest"]
}
}
} プロジェクトルートに配置すると、Claude Codeは起動時にMCPサーバーを自動的にspawnし、 29ツールをすべて利用可能な状態にします。認証は不要です(ローカルのChromeを立ち上げるだけ)。
実践ワークフロー①:パフォーマンス回帰の特定
典型的な使い方は「devサーバーの特定ページが遅い気がする」というシーンです。 エージェントに対して次のようにタスクを渡します。
Claude Codeへの指示例:
http://localhost:3000/articles/xxx のLCPとTBTを計測して、
上位3つのパフォーマンス問題をDevToolsのInsightsから抽出し、
該当するReactコンポーネントを特定してください。 この時エージェントが内部で実行する流れは概ね次のようになります。
sequenceDiagram
participant U as User
participant A as Claude Code
participant M as chrome-devtools-mcp
participant C as Chrome
U->>A: "このページを計測して"
A->>M: navigate_page(url)
M->>C: load & render
A->>M: performance_start_trace()
A->>M: navigate_page(reload)
A->>M: performance_stop_trace()
M-->>A: trace summary
A->>M: performance_analyze_insight("LCP")
M-->>A: {lcp: 3.1s, culprit: "hero-image"}
A->>U: 原因候補と修正提案
重要なのは、エージェントが数値を自分で測った上で修正提案を返すことです。 「たぶん画像最適化が効きそう」というそれっぽい助言ではなく、 「LCPが3.1秒で、原因はhero-imageの遅延読み込み(DevTools Insights実測)」 という事実ベースの会話ができます。
実践ワークフロー②:コンソールエラーからの原因特定
「ページを開くと何か落ちているけど、再現手順が面倒」というよくあるケース。
list_console_messagesとevaluate_scriptの組み合わせで、
エージェント自身に調査させられます。
Claude Codeへの指示例:
localhost:3000 のトップページを開いてコンソールを確認し、
エラーが出ているならsource mapを辿って該当ファイル:行を特定してから修正案を出してください。 Chrome DevTools MCPのコンソールツールはsource map対応のスタックトレースを返します。 つまりバンドル後のファイル名ではなく、元のTypeScriptのどの行で落ちたかがそのままエージェントのコンテキストに入ります。 「エラーメッセージをコピペして貼る」という手動ステップが丸ごと消えるのが地味ですが大きい価値です。
実践ワークフロー③:Core Web VitalsのCI監査
PRごとに「パフォーマンスが劣化していないか」を自動検証する使い方も実用段階です。
lighthouse_auditとperformance_analyze_insightを
PRのプレビューデプロイURLに対して走らせ、結果をPRコメントとして投稿する——という流れが成立します。
| メトリクス | 抽出元ツール | しきい値例 | 劣化時アクション |
|---|---|---|---|
| LCP | performance_analyze_insight | < 2.5s | 原因要素を特定し修正提案 |
| INP | performance_analyze_insight | < 200ms | Long Taskの分解提案 |
| CLS | performance_analyze_insight | < 0.1 | レイアウトシフトの発生要素を返す |
| Accessibility Score | lighthouse_audit | ≥ 95 | 失点項目のFix PRを自動生成 |
| JS Bundle Size | list_network_requests | 個別に管理 | 肥大したチャンクを特定 |
ハマりどころと回避策
- ローカルのChromeを占拠する: ユーザーが使っているChromeプロファイルにアタッチすると副作用が出ます。専用プロファイル(
--user-data-dir)を指定しましょう。 - ツール呼び出しが多くなりトークン消費が激しい:
navigate_page→wait_for→take_snapshot…と1タスクで10回以上のtool callが走ることがあります。タスクを小分けに切る・スクショ戻り値のサイズを制限する等で対処。 - devサーバーのHMRでトレースが汚れる: 開発時の計測はHMR関連のLong Taskが混ざります。正確な計測はビルド成果物(
npm run preview)に対して行うのが鉄則です。 - ネットワーク条件の固定忘れ:
emulateで回線・CPUスロットリングを指定しないと、環境依存で評価がブレます。「Fast 4G + 4x CPU slowdown」のような基準を決めておくと会話が安定します。
まとめ
Chrome DevTools MCPは、AIコーディングエージェントに「実ブラウザの目」を与えるための最小にして強力な拡張です。 書く能力と測る能力が同じエージェントに揃ったことで、 パフォーマンスやUI崩れのような実行しないと分からない問題に対しても 根拠ある会話ができるようになります。
まずは.mcp.jsonに1ブロック追加し、
「このページのLCPを測って」とClaude Codeに投げるところから始めてみるのがおすすめです。
DevToolsでやっていた往復作業がエージェント側に吸収されていく感覚が、使ってみると一番腑に落ちます。
理解度チェック
Chrome DevTools MCPの設計思想として最も適切なものはどれですか?
キーボード: 1〜4 で選択、Enter で回答