CDP / 拡張機能エスケープハッチ
DevBridgeの25の標準ツールでカバーできない場合、6つのエスケープハッチツールでChrome DevTools Protocol(CDP)またはchrome.*拡張APIに直接アクセスできます。
まず標準ツールを使用してください
エスケープハッチツールは強力ですが、より低レベルです。screenshot、computer、read_console、read_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_subscribe(untilPredicate使用) |
| 既に発生したイベントを確認 | 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