🐺

Next.jsのrewritesでリクエストをmockに向ける

2025/02/22に公開

はじめに

Next.jsで作成されたアプリケーションとは別で管理しているmock serverに対して
ブラウザからのリクエストを送信させるようにしてみた。

mock server

結論

next.config.js Optionに用意されているrewritesを利用して
URLプロキシにより開発時はmock serverに送信させます。

https://nextjs.org/docs/pages/api-reference/next-config-js/rewrites

実装

module.exports = {
  async rewrites() {
    return [
      {
        source: '/:path*',
        destination: 'http://localhost:3100/:path*',
      },
    ]
  },
}

本記事ではすべてのNext.jsルートをチェックした後
Next.jsを既存のmock serverへのプロキシにフォールバックさせています。

https://nextjs.org/docs/pages/api-reference/next-config-js/rewrites#incremental-adoption-of-nextjs

source/:path*はワイルドカードを駆使して全てのリクエストにマッチさせるように宣言しています。
destinationにはmock serverpathを指定しています。

https://nextjs.org/docs/pages/api-reference/next-config-js/rewrites#wildcard-path-matching

外部APIへのMock

外部APIのmockは、REST APIを採用している場合であれば
rewritesを使用してmock serverにリクエストするように設定しています。

本プロジェクトでは、hostを環境変数で設定するように実装をしているため
開発時はNext.jsbaseUrlと同様にすることでプロキシ対象になるようにしています。

※ライブラリのMockに関してはライブラリ毎に用意されていることもあるためここでは割愛します。

const baseUrl = process.env.NEXT_PUBLIC_BASE_URL // http://localhost:3000

function fetch(`${baseUrl}/hoge/`, 'GET').then(...) // localhost:3100に対して送信される

その他機能

今回は使用しませんでしたがnext.configOptionには
正規表現を駆使したPath MatchingQueryMatchingも用意されています。

https://nextjs.org/docs/pages/api-reference/next-config-js/rewrites#regex-path-matching

https://nextjs.org/docs/pages/api-reference/next-config-js/rewrites#header-cookie-and-query-matching

Discussion