郭立 (leeguoo)

# ネットワークリクエストとレスポンスを変更する: chrome-use network route 詳解

開発デバッグ中に、まだ完成していないAPIをmockしたい、リクエストパラメータを変えたい、あるいは実際のレスポンスを変更したいことがあります。chrome-use network routeは、操作中のChrome上で直接インターセプトし、mockレスポンス、リクエスト変更、実レスポンス変更、ブロックの4つの使い方を提供します。なぜこれが最も軽量な方法なのか(内部はCDP Fetch、JS注入なし、拡張機能の権限追加なし、ストア再審査を誘発しない)を説明し、実機検証も添えています。

2026年7月1日 · 記事 · 公開

このページの目次

開発かいはつしていると、ネットワークを一時的いちじてきに少しえたくなる瞬間しゅんかんがどうしてもあります。バックエンドAPIがまだできていないので、まずかりデータでフロントエンドをうごかしたい。あるリクエストにべつのパラメータをけたらどうなるかためしたい。あるいは統計とうけい計測けいそくのリクエストをそのままめたい。これまでは、コードを変更へんこうしてスイッチを追加ついかするか、mock serverをてるか、パケットキャプチャ用のプロキシをはさむか(しかもCA証明書しょうめいしょのインストールが必要ひつよう)でした。どれも極端におもいわけではありませんが、どれも追加ついか準備じゅんび必要ひつようです。

chrome-useの network route は、この作業さぎょうをブラウザ本体ほんたいなかおさめます。あなたが操作そうさしているそのChrome上で、マッチしたリクエストを直接ちょくせつインターセプトし、レスポンスをmockする、送信そうしんされるリクエストを変更へんこうする、またはそのままブロックできます。プロキシも証明書しょうめいしょも、検証けんしょう対象たいしょうコードの変更へんこう不要ふようです。

リクエストがインターセプト地点に当たった後、一方はmockの仮データを直接返し、もう一方は変更済みのリクエストヘッダーを付けてサーバーへ流す

4つの使つかかた

1つの network route コマンドが、わたしたパラメータにおうじて動作どうさめます。

$ bash
# 1) Mockレスポンス: リクエストは外へ送られず、指定した仮データを直接返す
chrome-use network route "*/api/me" --body '{"vip":true}' --status 200 --content-type application/json

# 2) リクエスト変更: リクエストは送るが、メソッド/ヘッダー/ボディ/URLを変更し、実レスポンスは通常どおり返る
chrome-use network route "*/api/save" --method POST --set-header Authorization="Bearer test"
chrome-use network route "*/v1/*" --rewrite-url https://staging.example.com/v1/thing

# 3) 実レスポンス変更: リクエストは送信し、実レスポンス取得後にステータス/ヘッダー/ボディを変更する
chrome-use network route "*/api/me" --edit-status 503 --edit-header X-Env=test --replace 'prod=>staging'

# 4) ブロック: 直接止める(埋め込み計測の遮断、オフラインテスト)
chrome-use network route "*/analytics" --abort

区別くべつはとても簡単かんたんです。mockようフィールド(--body / --status / --header / --content-type)があればレスポンスを偽造ぎぞうし、リクエストは短絡たんらくされてそとません。リクエストようフィールド(--method / --set-body / --set-header / --rewrite-url)があれば、変更へんこうしてから通過つうかさせ、実際じっさいのレスポンスをります。編集へんしゅうようフィールド(--edit-status / --edit-header / --replace 'from=>to')があれば、まず通過つうかさせ、じつレスポンスがもどってきてからそれを変更へんこうします。mockと「じつレスポンス変更へんこう」のちがいはここにあります。前者ぜんしゃはまったくそとず、データを自分じぶんつくります。後者こうしゃじつレスポンスがかえってくる必要ひつようがあり、その一部いちぶだけを変更へんこうします。これらのヘッダー関連かんれんパラメータはいずれも複数回ふくすうかい指定していでき、既存きそんヘッダーにマージして上書うわがきします。

名前なまえ意図的いとてきにPlaywrightの route / fulfill / continue / abortわせています。使つかったことがあるひとならまななお必要ひつようはありません。

原理げんり: すでにはなしているプロトコル

この仕組しくみの内部ないぶはChrome DevTools ProtocolのFetchドメインです。Fetch.enable でマッチルールを設定せっていし、ヒットしたリクエストは Fetch.requestPaused停止ていしします。その後、状況じょうきょうおうじて fulfillRequestかりレスポンスをかえす)、continueRequest上書うわがきパラメータつきで通過つうかさせる)、または failRequest(ブロック)をびます。これはあたらしくつくった仕組しくみではありません。DevToolsの「Local Overrides」やPlaywrightのrouteも、Chromeにたいするインターセプトの内部ないぶでは、おなじFetchドメインをつつんでいます。

リクエストがrequestPausedで停止した後の3つの行き先: fulfillで仮レスポンスを返す、continueで変更を持たせてサーバーへ流す、abortで直接ブロックする。すべてchrome.debuggerのCDP Fetch経路を通る

chrome-useにとって、重要じゅうようてんは2つあります。

1つは、もともとCDPをはなしていることです。chrome-useは独自どくじのネイティブCDPクライアントでブラウザを操作そうさしており、fulfillRequest / continueRequest などのコマンドはすでにコードないにあります(ドメインフィルタやプロキシ認証にんしょうでも使つかっています)。mockやリクエスト変更へんこう追加ついかは、既存きそん実行じっこう能力のうりょくをコマンドラインからしただけにちかく、ゼロからべつ仕組しくみをいたわけではありません。

2つは、ブラウザ拡張機能かくちょうきのう権限けんげんれないことです。chrome-useが実際じっさいのChromeにつながるときは、拡張機能かくちょうきのうchrome.debugger 経路けいろ使つかいます。リクエストのインターセプトは、この経路けいろでCDPコマンドをいくつか追加ついかおくるだけです。拡張機能かくちょうきのうのmanifestは1文字もじえる必要ひつようがなく、webRequest不要ふようで、declarativeNetRequest不要ふようです。そしてこの2つは、まさにChromeウェブストアが重点的じゅうてんてき審査しんさする権限けんげんです。つまり、この機能きのうあたらしい権限けんげん一切いっさい導入どうにゅうせず、拡張機能かくちょうきのう審査しんさ通過つうか悪影響あくえいきょうあたえるリスクもありません。

ついでに、なぜ既存きそんのmockツールをそのまま統合とうごうしなかったのかも説明せつめいします。いくつか調査ちょうさしました。mockttpはプロセスないのNodeプロキシで、自己署名じこしょめいCAが必要ひつようです。mitmproxyは独立どくりつしたPython MITMプロキシで、こちらも証明書しょうめいしょのインストールが必要ひつようです。MSWはページにService Workerを注入ちゅうにゅうするため、このみちはchrome-useの「JS注入ちゅうにゅうゼロ」というステルス原則げんそく直接ちょくせつはんします。これらはおもいか、プロキシと証明書しょうめいしょ必要ひつようか、ステルスせいこわすかのどれかです。そしてChromeにたいするインターセプトでは、内部ないぶでやはりCDP Fetchをつつんでいます。すでにこのプロトコルをはなしているなら、表面ひょうめんおぎなうのがもっとかるみちです。

実機じっき一度いちどうごかす

httpbin.org(リクエストをそのままエコーバックしてくれる)を使つかって、2つのおも経路けいろ検証けんしょうします。まず隔離かくりしたブラウザを起動きどうします。

Mockレスポンス: /getかりデータを設定せっていし、その後ページないからfetchします。

$ bash
chrome-use --launch --session demo network route "*/get" \
  --body '{"mocked":true,"by":"chrome-use"}' --status 200 --content-type application/json
chrome-use --session demo open https://httpbin.org/
# ページ内: fetch('/get') → {"mocked":true,"by":"chrome-use"}

かえってくるのは設定せっていしたかりデータであり、httpbinの実際じっさい/get レスポンスではありません。リクエストはまったくそとていません。

リクエスト変更へんこう: /headers にカスタムヘッダーを追加ついかし、もう一度いちどfetchします(httpbinはったリクエストヘッダーをエコーバックします)。

$ bash
chrome-use --session demo network route "*/headers" --set-header X-Chrome-Use=hello123
# ページ内: fetch('/headers') → エコーされたheaders内に "X-Chrome-Use": "hello123" が現れる

httpbinがエコーバックしたリクエストヘッダーに X-Chrome-Use: hello123ふくまれているため、このヘッダーがリクエストの実際じっさい送信前そうしんまえ追加ついかされたことがわかります。

じつレスポンス変更へんこうexample.com検証けんしょうします。リクエストは通常つうじょうどおり送信そうしんし、実際じっさいのページを取得しゅとくした後、レスポンスボディない文字列もじれつ置換ちかんし、ステータスコードを599に変更へんこうし、レスポンスヘッダーを追加ついかします。

$ bash
chrome-use --launch --session demo network route "*example.com/" \
  --edit-status 599 --edit-header X-Edited=yes --replace 'Example=>EDITED' --resource-type xhr,fetch
chrome-use --session demo open https://example.com/
# ページ内で fetch('/') → {status:599, xedited:"yes", bodyEdited:true}

取得しゅとくできるのは、じつレスポンスを変更へんこうしたバージョンです。ステータスコードは599になり、X-Edited ヘッダーが追加ついかされ、ボディないExampleEDITEDわっています。ここでは --resource-type xhr,fetch使つかい、編集へんしゅう対象たいしょうをAPIリクエストに限定げんていし、トップレベルドキュメントのナビゲーションにはれないようにしています(ナビゲーションドキュメントのステータスコードをエラーコードにえると、ページみの意味いみみだれるためです)。

現在げんざい境界きょうかい

じつレスポンス変更へんこうは、現時点げんじてんでは「レスポンスボディ全体ぜんたい取得しゅとくし、文字列もじれつ置換ちかん + ステータス/ヘッダーの上書うわがき」をするものです。日常的にちじょうてきにフィールドをえたり、エラー状態じょうたいつくったりするには十分じゅうぶんです。よりこまかい構造化こうぞうかえ(たとえばJSONのあるフィールドだけをえるなど)は、いま文字列もじれつ置換ちかん対応たいおうします。今後こんご需要じゅようかんがえます。また、もともとHARは記録きろくできるので、つぎのステップとして、記録きろくしたHARエントリをそのままmock fixtureとして使つかえるようにする予定よていです。一度いちど記録きろくし、再生時さいせいじに少し変更へんこうすればよい、というかたちです。

2つのリポジトリがあります。chrome-useは github.com/leeguooooo/chrome-use にあります。完全かんぜんなコマンドは chrome-use skills get core でローカルに取得しゅとくして確認かくにんできます。

次の記事 →
フロントエンドに「ユニットテスト」を書く: chrome-use test 詳解

コメント

コメントは即時公開されますが、ポリシー違反時は非表示になる場合があります。

最大 1000 文字。