Skip to content

CDP / 拡張機能エスケープハッチ

DevBridgeの25の標準ツールでカバーできない場合、6つのエスケープハッチツールでChrome DevTools Protocol(CDP)またはchrome.*拡張APIに直接アクセスできます。

まず標準ツールを使用してください

エスケープハッチツールは強力ですが、より低レベルです。screenshotcomputerread_consoleread_networkなどの専用ツールを優先してください——これらにはエラー処理、権限チェック、リトライロジックが組み込まれています。標準ツールで本当にカバーできない場合のみエスケープハッチを使用してください。

CDPツール

cdp_command — 単一CDPコマンドの送信

Chrome DevTools Protocolコマンドを直接送信してレスポンスを取得します。一回限りのリクエスト/レスポンス操作に最適です。

_helpによるイントロスペクション: method: "_help"を渡すと利用可能なCDPドメインの一覧が表示されます。method: "Network._help"を渡すとNetworkドメインのコマンドとパラメーターの説明が表示されます。

json
// CDPドメインの一覧
{ "method": "_help" }

// Networkドメインのコマンドを確認
{ "method": "Network._help" }

// デバイスをエミュレート(iPhone 14)
{
  "method": "Emulation.setDeviceMetricsOverride",
  "params": { "width": 390, "height": 844, "deviceScaleFactor": 3, "mobile": true }
}

// 3Gネットワーク条件をエミュレート
{
  "method": "Network.emulateNetworkConditions",
  "params": { "offline": false, "downloadThroughput": 375000, "uploadThroughput": 125000, "latency": 100 }
}

cdp_subscribe — CDPイベントの購読

CDPイベントストリームを購読します。untilPredicateで条件成立時に自動停止できます。

json
{
  "tabId": 123,
  "eventName": "Network.responseReceived",
  "untilPredicate": "event.response.url.includes('/api/data')",
  "timeoutMs": 10000
}

cdp_events_read — リングバッファからCDPイベントをプル

事前購読なしに既にキャプチャされたCDPイベントをプルします。事後分析に便利です。

json
{ "tabId": 123, "eventName": "Network.requestWillBeSent", "limit": 50 }

chrome.*拡張機能ツール

extension_call — chrome.* APIメソッドの呼び出し

ホワイトリストのchrome.* APIメソッドを呼び出します。voidメソッドのレスポンスは{ success: true, void: true }です。

json
// ローカルストレージから読み取り
{ "namespace": "storage.local", "method": "get", "args": [["myKey"]] }

// ドメインの全cookieを取得
{ "namespace": "cookies", "method": "getAll", "args": [{ "domain": "example.com" }] }

extension_subscribe — chrome.*イベントの購読

chrome.*イベントを購読します(cdp_subscribeと同様の使い方)。

json
{
  "namespace": "tabs",
  "eventName": "onUpdated",
  "untilPredicate": "event.changeInfo.status === 'complete'",
  "timeoutMs": 15000
}

extension_events_read — リングバッファからchrome.*イベントをプル

既にキャプチャされたchrome.*イベントをプルします。

json
{ "namespace": "tabs", "eventName": "onUpdated", "limit": 20 }

購読 vs プルモードの比較

シナリオ推奨ツール
イベント発生を待ってから続行cdp_subscribe / extension_subscribeuntilPredicate使用)
既に発生したイベントを確認cdp_events_read / extension_events_read
コマンドを送信して結果を取得cdp_command / extension_call

主なユースケース

  • モバイルデバイスやネットワーク条件のエミュレートcdp_command + Emulation.* / Network.emulateNetworkConditions
  • 拡張機能ローカルストレージの読み書きextension_call + storage.local.get / set
  • SPAナビゲーション完了の待機cdp_subscribe + Page.frameNavigated
  • 特定リクエストの完全なヘッダーの監査cdp_events_read + Network.requestWillBeSent
  • cookie変更の監視extension_subscribe + cookies.onChanged

DevBridge — Browser Debugging & Automation via MCP