コンテンツにスキップ

test-proxy-recorder と MSW、routeFromHAR、Polly.js、Next.js テストモードの比較

ここで取り上げるツールはいずれも、エンドツーエンドテストが受け取る API レスポンスを制御します。違いは、リクエストをどこでインターセプトするか(ブラウザ内、サーバー内、または別のプロキシ)と、レスポンスを自分で書くか記録するかです。表はドキュメントの概要にある 6 つのツールをそのまま残し、Next.js テストモード、mockttp、scenarist、talkback、proxay を加えています。各セルの内容は、表の下にリンクしたそれぞれのツールのドキュメント、README、ソースに基づく 2026-10-03 時点のものです。「記載なし」は、それらの情報源に記述がないことを意味します。

ツール実際のトラフィックを記録サーバーサイド (SSR)ブラウザサイドWebSocketPlaywright ネイティブ最新リリース
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 には ws API を使います。公式の @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 が配布されています。

Netflix の Polly.js は HTTP を記録・再生・スタブするライブラリで、test-proxy-recorder の着想元です。2026-10-03 時点の状況は次のとおりです:

  • @pollyjs/core は 2023-07-20 の 6.0.6 以降リリースがありません。リポジトリの最後の変更は 2025-05-31 で、@pollyjs/adapter-fetch 6.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.jstest-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 アプリでは、ブラウザのリクエストとサーバーのリクエストで 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 が思いどおりに返してくれないレスポンスは制御しにくくなります。

  • トラフィックがすべてブラウザサイドの場合: 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 サーバーです。