本文へ移動
verified onnext@16.3.5react@19
最終検証日 2026-09-26
Next.js道場

Next.js 16 で変わったこと。上げると壊れる所

Next.js 16 に上げると、params の読み方・revalidateTag の引数・middleware の名前・next.config の eslint・next/image の既定が変わります。

止まるものより、黙って変わるものが怖い

公式のアップグレードガイドには多くの変更が並んでいます。このページでは、そのうちこのサイトで実機に当てたものを、壊れ方で分けました。どれも Next.js 16.3.5 で確かめています。

16 に上げたときの壊れ方(実機で確かめた)
変わったもの以前の書き方のまま詳しく
params / searchParams型チェックも通り、値が undefined(本番はログも出ない)params が undefined になる
next/image の quality90 と書いても 75 に丸められる(エラーなし)next/image の使い方
revalidateTag型チェックで止まる。外すと警告付きで動くrevalidateTag の第2引数
next.config の eslint警告のあと型チェックで止まる。外すと何もしないnext.config の eslint
next/image のクエリ文字列ビルドが止まるnext/image の使い方
middleware.ts動くが、ビルドのたびに告知が出るproxy(旧 middleware)の書き方

上の2つは、何も言われずに挙動が変わります。ビルドが通ったことを、移行が済んだ証拠にしないでください。

黙って変わるもの

params は Promise

params と searchParams は Promise として渡されます。公式のアップグレードガイドによると、Next.js 15 で非同期になり、16 で同期のまま読む書き方が無くなりました。

実機では、同期のまま読むと型チェックも通り、本番では値が undefined になるだけで、ログにも何も出ませんでした(params が undefined になる)。cookies() と headers() も同じく await して使います。

画質は 75 だけ

quality={90} と書いても、実機では q=75 の版を読み込みました。使う画質を images.qualities に書いておく必要があります(next/image の使い方)。

止まるもの

  • revalidateTag:第2引数が必須になりました。型チェックで Expected 2 arguments と出ます。すぐ反映したいなら Server Action で updateTag を使います(revalidateTag の第2引数と updateTag)
  • next.config の eslint:next build がリントを走らせなくなり、設定そのものが無くなりました(next.config の eslint)
  • next/image のクエリ文字列:src="/a.png?v=1" は、images.localPatterns に書かないとビルドが止まります(next/image の使い方)

名前が変わったもの

middleware.ts は proxy.ts に変わりました。実機では、middleware.ts のままでも動きますが、ビルドのたびに告知が出ました(proxy(旧 middleware)の書き方)。

ほかに気づいたこと

実機のビルドや開発サーバーで、次のことにも気づきました。

  • ビルドの一覧から、ページごとの大きさの欄が無くなっていた
  • 開発サーバーは、起動のときに AGENTS.md と CLAUDE.md を書き出した(agentRules: false で止められる、と出る)
  • next build も next dev も、何も指定しなければ Turbopack で動いた

公式のアップグレードガイドには、ほかにも Node.js 20.9 以上が要ること、並列ルートに default.js が必須になったことなどが並んでいます。上げる前に一度通して読んでください。

上げる手順

  1. 公式のガイドにある codemod を走らせる
  2. 型チェックを有効にしてビルドする(ignoreBuildErrors を外す)。止まるものはここで見つかる
  3. 黙って変わるもの(上の2つ)は、本番と同じビルドで開いて確かめる
  4. 開発サーバーで一度ずつ開き、ログに出る文言を読む(params の読み忘れはここでしか出ない)

出典

このページの内容は上記の一次情報を基準に書いています。個人ブログや二次情報を根拠にしていません。

理解できたか試す

では、このコードはどうなりますか。

古い記事を見ながら、動的なページを書きました。型チェックも有効にしてあります。本番ビルドして /hello を開くと、どうなりますか。

この問題を解くこのテーマの問題 4 問