1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

proxy.tsを使うとNext.jsのプリフェッチの挙動が変わる話 ~ Pages Router編 ~

Posted at

はじめに

とある開発をしていた時にproxy.tsを入れたら想定していなかった挙動が起きたので、どういう変化があるのかを整理するためにまとめてみました。

この記事ではPages Routerの場合について説明します。

前提

この記事は以下の環境での説明になります。

  • Next.js(Pages Router) 16.0.7
  • TypeScript

SSG と SSR とは

今回起きた挙動変化がプリフェッチ(後述)によるもので、SSG はプリフェッチをするがSSR は基本的にはしないという説明を見かけたので、改めて SSG と SSRを整理しました。

SSG

SSG(Static Site Generation) とはビルド時に静的HTMLを事前に作成しておき、リクエストがあった時にそのHTMLを返す仕組みです。

SSR

SSR(Server Side Rendering) とはページ遷移時にサーバー側で必要なデータを取得し、表示するHTMLを作成して返す仕組みです。

プリフェッチとは

プリフェッチとは、新しいページへ遷移する前にリンク先の静的リソース(JS・CSS・画像等)を事前に取得する仕組みです。

これによって、高速に次のページを表示することができるメリットがあります。

本番環境でしか確認できないので、開発環境で確認するにはnpm run startでアプリを見る必要があります。

SSG と SSR でのプリフェッチの違い

SSG と SSR でプリフェッチの挙動が変わります。

SSG の場合は全てのページに対してプリフェッチします。具体的にはリンクにホバーすると遷移先のページデータ(JSON)がダウンロードされます。

output.gif

SSR の場合は基本的にはプリフェッチされません。SSG の時と異なりリンクにホバーしても何も起こりません。

ssr.gif

まとめると以下のようになります。

SSG の場合 SSR の場合
プリフェッチ有無 ×(例外あり)

proxy.tsを使うと…

SSG は変わりませんが、SSR の場合は挙動が変わります。

元々は遷移先のページのリソースを読み込んでいませんでしたが、proxy.tsを入れることでリソースを読み込むように変わりました。

proxy.tsは以下のコードを入れています。

import { NextRequest, NextResponse } from "next/server";

export const proxy = (request: NextRequest) => {
  // リクエスト/レスポンス前処理
  // リダイレクト、ヘッダー操作、など
  return NextResponse.next();
};

proxy.tsを入れる前

スクリーンショット 2025-12-07 18.43.04.png

proxy.tsを入れた後

スクリーンショット 2025-12-07 18.45.15.png

よって、先ほどの表はこのように変わります。

SSG の場合 SSR の場合
プリフェッチ有無 △(proxy.tsを入れると⚪︎)

proxy.tsを使ってもプリフェッチされないようにしたい場合

proxy.tsを使ってもプリフェッチされないようにしたい場合は以下の設定をnext.config.tsに入れるとプリフェッチが行われなくなります。

experimental: {
  proxyPrefetch: "strict", // デフォルトは "flexible"
},

まとめ

  • リンク先の静的リソースを事前に作成しておく仕組みをプリフェッチと呼ぶ
  • SSG ではプリフェッチをするが SSR ではプリフェッチは基本的には行われない
  • ただし、proxy.tsを使うと SSR でもプリフェッチが行われるようになる

App Routerの場合はどうなるかは別記事でまとめたいと思います。

1
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?