test-proxy-recorder と MSW、routeFromHAR、Polly.js、Next.js テストモードの比較
ここで取り上げるツールはいずれも、エンドツーエンドテストが受け取る API レスポンスを制御します。違いは、リクエストをどこでインターセプトするか(ブラウザ内、サーバー内、または別のプロキシ)と、レスポンスを自分で書くか記録するかです。表はドキュメントの概要にある 6 つのツールをそのまま残し、Next.js テストモード、mockttp、scenarist、talkback、proxay を加えています。各セルの内容は、表の下にリンクしたそれぞれのツールのドキュメント、README、ソースに基づく 2026-10-03 時点のものです。「記載なし」は、それらの情報源に記述がないことを意味します。
| ツール | 実際のトラフィックを記録 | サーバーサイド (SSR) | ブラウザサイド | WebSocket | Playwright ネイティブ | 最新リリース |
|---|---|---|---|---|---|---|
| test-proxy-recorder | 対応 | 対応(プロキシ経由) | 対応(HAR 経由) | 対応 | 対応 | 1.3.1(2026-08-05) |
Playwright routeFromHAR | 対応 | 非対応 | 対応 | 非対応 | 組み込み | Playwright 1.63.0(2026-09-04) |
| MSW | 非対応(ハンドラー、または @msw/source 経由の HAR) | サーバーのプロセス内 | 対応 | 対応 | @msw/playwright(ブラウザのリクエスト) | 3.0.2(2026-10-03) |
| Polly.js | 対応 | サーバーのプロセス内 | 対応 | 記載なし | サードパーティのアダプター | @pollyjs/core 6.0.6(2023-07-20) |
| playwright-network-cache | 対応 | 非対応 | 対応 | 記載なし | 対応 | 0.3.0(2026-05-12) |
| Mocky Balboa | 非対応(ハンドラー) | 対応 | 対応 | 記載なし | 対応 | @mocky-balboa/playwright 2.0.2(2026-05-21) |
| Next.js テストモード | 非対応(ハンドラー) | 対応(Next.js のみ) | 他のオリジンへのリクエスト | 記載なし | 対応 | 実験的機能、Next.js 16.3.8 に同梱(2026-09-30) |
| mockttp | 記載なし | 対応(フォワードプロキシとして) | 対応(ブラウザのプロキシとして) | 対応 | 非対応(フィクスチャを自分で書く) | 4.6.3(2026-09-11) |
| scenarist | 非対応(シナリオをコードで書く) | Next.js と Express | 非対応 | 記載なし | 対応 | 0.5.1(2026-09-27) |
| talkback | 対応 | 対応(API のアドレスとして) | 記載なし | 記載なし | 非対応 | 4.2.0(2024-07-10) |
| proxay | 対応 | 対応(API のアドレスとして) | 対応(API のアドレスとして) | 記載なし | 非対応 | npm 1.9.0(2024-05-15)、GitHub 2.0.0(2026-01-29) |
リリース日は、GitHub のリリースへのリンクがない限り npm レジストリのものです。
- test-proxy-recorder: サーバーサイドの呼び出しはプロキシを、ブラウザからの呼び出しは HAR を通ります(仕組み)。記録された WebSocket メッセージはプロキシが再生します(CLI)。リリース: npm。
- Playwright
routeFromHAR:update: trueを指定すると、実際のトラフィックから HAR を記録します(Mock APIs)。再生が対象とするのは「ページ内で行われるネットワークリクエスト」です(API)。HTTP リクエストに応答するroute()ハンドラーを経由し、WebSocket を扱う経路はありません(harRouter.ts)。リリース: v1.63.0。 - MSW: リクエストハンドラーは自分で書きます。MSW 自体は何も記録しませんが、
@msw/sourceを使えば、ブラウザの DevTools からエクスポートした HAR ファイルからハンドラーを生成できます。Node.js では、リクエストを行うプロセスの中で動作します(setupServer)。WebSocket にはwsAPI を使います。公式の@msw/playwrightバインディングはpage.route()を経由するため、対象はブラウザのリクエストです。リリース: v3.0.2。 - Polly.js: リポジトリでは「HTTP のやり取りを記録、再生、スタブする」ライブラリと説明されています。node-http アダプターは Node の
httpとhttpsモジュールにパッチを当て、fetch アダプターはグローバルなfetchをラップします。そのため Polly は、自身を実行しているプロセスの中で記録します。ドキュメントに WebSocket アダプターは載っていません。Playwright への対応はサードパーティの polly-adapter-playwright によるもので、Polly のドキュメントからリンクされています。リリース: npm。 - playwright-network-cache: README によると、「ネットワークリクエストをファイルシステムにキャッシュすることで」Playwright テストを高速化します。
CacheRouteはpage.route()でインターセプトするため(ソース)、対象はブラウザのリクエストだけです。リリース: npm。 - Mocky Balboa: モックはテストの中で定義し、サーバーとクライアントのリクエストを 1 つの API で扱います。テストを並列に実行しても、モックはテストごとに分離されます(機能)。Next.js 14 以降では、CLI が Next.js サーバーを起動します(Next.js)。ドキュメントで WebSocket に触れているのは、サーバーとテストランナーの間の通信経路としてだけです。リリース: npm。
- Next.js テストモード:
next.onFetch()で登録したハンドラーは、サーバーのfetch呼び出しに加えて、ページが他のオリジンに対して行うfetch呼び出しも受け取ります(README、page-route.ts)。セットアップ、現状、MSW 3 についてはサーバーサイドのモックで説明しています。リリース: Next.js 16.3.8。 - mockttp: 「Node またはブラウザで」動くテスト向けの、HTTP と HTTPS のモックサーバー兼プロキシです(README)。
forAnyWebSocket()で WebSocket 接続をモックします(ソース)。README に記録モードの記述はありません。書くべきフィクスチャは Playwright チームの記事に示されています。リリース: npm。 - scenarist: README によると「MSW の上に構築され、実行時のシナリオ管理とテスト ID による分離を備えた」ツールで、シナリオはコードで書きます。FAQ では「サーバーサイドのシナリオ管理を提供し、Playwright のクライアントサイドのモックを補完する」と説明されています。サーバーのコードは各
fetchでx-scenarist-test-idを転送し(Next.js アダプター)、@scenarist/playwright-helpersが Playwright のフィクスチャを提供します。リリース: npm。 - talkback: 「HTTP リクエストを記録・再生する JavaScript の HTTP プロキシ」です(README)。アプリはリクエストを talkback に送ります。保存済みのテープに一致するリクエストにはそのテープのレスポンスが返され、未知のリクエストはホストに転送されて新しいテープとして保存されます。README には、ブラウザについてもテストごとのテープについても記述がありません。リリース: npm。
- proxay: 「Web フロントエンドとそのバックエンド」や「サーバーと別のサーバー」の間で使う、記録・再生用のプロキシです(README)。テストは
beforeEachなどでPOST /__proxay/tapeを使ってテープを選びます。README は並列テストについて扱っていません。バージョン 2.0.0 は GitHub のリリースで、npm では今も 1.9.0 が配布されています。
Playwright 向けの Polly.js の代替
Section titled “Playwright 向けの Polly.js の代替”Netflix の Polly.js は HTTP を記録・再生・スタブするライブラリで、test-proxy-recorder の着想元です。2026-10-03 時点の状況は次のとおりです:
@pollyjs/coreは 2023-07-20 の 6.0.6 以降リリースがありません。リポジトリの最後の変更は 2025-05-31 で、@pollyjs/adapter-fetch6.0.7 を公開し、Node 向けの fetch アダプターの非推奨を解除しました(Netflix/pollyjs#506)。- Polly には独自の Playwright アダプターがありません。ドキュメントはサードパーティの polly-adapter-playwright を案内しており、これはブラウザコンテキストまたはページにアタッチします。その最新リリースは 2024-04-18 の 2.4.0 です。
- サーバーサイドの呼び出しに使うには、Polly を node-http または fetch アダプター経由でサーバーのプロセス内で動かす必要があります。
Polly.js から移行する場合、その概念は test-proxy-recorder では次のように対応します。
| Polly.js | test-proxy-recorder |
|---|---|
record、replay、passthrough の各モード(設定) | record、replay、transparent の各モード。playwrightProxy.before() でテストごとに設定 |
| Polly インスタンスごとの名前付きの記録。パーシスター(persister)が保存 | Playwright のテストごとに .mock.json(サーバー)と .har(ブラウザ)を 1 つずつ。記録ディレクトリに保存 |
| リクエストを行うプロセス内のアダプター | サーバーの呼び出しにはプロキシのプロセス、ブラウザの呼び出しには HAR、そしてサーバー上の registerProxyFetch() |
| デフォルトではメソッド、ヘッダー、ボディ、順序、URL でリクエストを照合 | サーバーサイドのリクエストはメソッド、パス、クエリのハッシュで照合し、記録された順に返し、ボディは比較しない。ブラウザのリクエストは Playwright の HAR のルールに従い、こちらは POST のボディも比較する |
Next.js と Playwright での MSW
Section titled “Next.js と Playwright での MSW”Next.js アプリでは、ブラウザのリクエストとサーバーのリクエストで MSW のセットアップが異なります。
- ブラウザのリクエスト: 公式バインディングの
@msw/playwrightは、ハンドラーをpage.route()経由で実行します。テストごとに変更できるnetworkフィクスチャがあります。 - サーバーのリクエスト: MSW は Next.js のプロセス内で動作します。MSW のドキュメントには Next.js のガイドがなく、参考となる例はオープンなままのプルリクエスト mswjs/examples#101 です。実行時に変更したハンドラーは、そのサーバーにアクセスするすべてのテストで共有されます。詳細と出典はサーバーサイドのモックにあります。
- テストごとのサーバーハンドラー: Next.js テストモードはテストごとに MSW のハンドラーを受け付けますが、その MSW 用エントリーポイントは MSW 3.0 では読み込みに失敗します(詳細)。scenarist は Next.js と Express 向けに MSW の上でテストごとのシナリオを構築し、サーバーのコードが各
fetchでテスト id のヘッダーを転送します。 - 記録: MSW はトラフィックを記録しません。
@msw/sourceは、ブラウザの DevTools からエクスポートした HAR ファイルをハンドラーに変換します。
test-proxy-recorder はその逆のトレードオフを選んでいます。両方の側を実際の API から記録するため、書くべきハンドラーはありません。その代わり、API が思いどおりに返してくれないレスポンスは制御しにくくなります。
他のツールを使うべき場合
Section titled “他のツールを使うべき場合”- トラフィックがすべてブラウザサイドの場合: Playwright 組み込みの
routeFromHARなら追加の依存は不要です。まずそこから始め、サーバーサイドのリクエストが出てきたら test-proxy-recorder を追加してください。 - レスポンスを手で書きたい、またはエラーやエッジケースを強制したい場合: MSW のハンドラーの方が適しており、MSW は Playwright だけでなく Vitest、Storybook、ブラウザでも動作します。Playwright でテストごとのサーバーサイドのハンドラーが必要なら、Mocky Balboa、scenarist、Next.js テストモードを検討してください。
- 少ないセットアップでブラウザサイドのキャッシュだけが必要な場合: playwright-network-cache は 1 つのフィクスチャでレスポンスをディスクにキャッシュします。
- サーバーが JavaScript で書かれていない、またはそのコードを変更できない場合: mockttp のようなフォワードプロキシは
HTTPS_PROXYを通じて動作します。Playwright チームの記事によると、Python、Go、Ruby、Rust、.NET も同じ方法で動作し、Java では-Dhttps.proxyHostと-Dhttps.proxyPortが必要です。 - Playwright の外で、言語を問わず記録と再生が必要な場合: proxay と talkback は、記録をテープファイルとして保存する単体の HTTP サーバーです。