Next.js 16 は、キャッシュを「明示的に書いたところだけ」にする Cache Components と、Turbopack の標準化を柱にしたメジャーバージョンです。 2025年10月の 16.0 のあと、16.1(2025年12月)、16.2(2026年3月)、16.3(2026年8月)と機能が積み増され、2026年9月時点の最新安定版は 16.3.6 です。

この記事では、16.0〜16.3 の新機能と破壊的変更を公式ブログ・公式ドキュメントで確認できたものだけ一覧表にまとめました。さらに、Next.js 15.5 のプロジェクトを実際に 16.3.6 へ上げ、codemod(自動書き換えツール)の出力、ビルドで出たエラー文、直し方、ビルド時間(キャッシュあり/なし)の実測値を載せています。「何が変わったか」だけでなく「上げると何が起きて、どう直すか」までこの1ページでわかります。

Next.js 16 新機能の早見表(16.0〜16.3)

版 機能 ひとことで 既定/オプトイン
16.0 Cache Components 'use cache' を書いた所だけキャッシュ。部分プリレンダー(PPR)が標準の考え方に cacheComponents: true で有効
16.0 updateTag()(新) Server Action 内でタグをすぐ期限切れにし、自分の変更をすぐ表示 関数を呼ぶだけ
16.0 refresh()(新) キャッシュに触れず、キャッシュしていないデータだけ取り直す 関数を呼ぶだけ
16.0 revalidateTag(tag, profile) 第2引数('max' など)が必要に。1引数は非推奨 既定
16.0 proxy.ts middleware.ts の新しい名前。Node.js ランタイムで動く 既定(旧名は非推奨)
16.0 Turbopack が標準 next dev / next build の既定バンドラー 既定(--webpack で戻せる)
16.0 React Compiler 対応(安定) 自動メモ化。reactCompiler: true オプトイン
16.0 Next.js DevTools MCP AIエージェントがルート・ログ・エラーを参照できる オプトイン
16.0 React 19.2 View Transitions、useEffectEvent、<Activity> 既定
16.0 ルーティング刷新 レイアウトの重複ダウンロード削減、差分だけのプリフェッチ 既定
16.1 dev のディスクキャッシュ(安定) next dev 再起動後のコンパイルが速い 既定
16.1 next upgrade アップグレード用コマンドが本体に入った(16.1以降で使える) コマンド
16.1 Bundle Analyzer(実験的) next experimental-analyze コマンド
16.1 next dev --inspect Node.js デバッガーを簡単に接続 コマンド
16.2 起動・描画の高速化 dev の起動が約87%短縮、HTML描画が25〜60%高速(公式値) 既定
16.2 Adapters(安定) デプロイ先ごとにビルド処理を差し込める API オプトイン
16.2 新しい既定エラーページ・Server Function のログ 本番の既定500ページ刷新、dev で Server Function の実行ログ 既定
16.2 unstable_catchError()(実験的) 好きな位置に置けるエラー境界 オプトイン
16.3 ビルドのディスクキャッシュ next build でも変更のない成果物を再利用 既定
16.3 dev のメモリ削減 長時間の next dev で最大90%メモリ削減(公式値) 既定
16.3 AGENTS.md の自動生成 next dev がバージョンに合った文書の場所を AI エージェントに伝える 既定(agentRules: false で無効)
16.3 catchError notFound() や redirect() と干渉しないエラー境界+retry() 関数を使うだけ
16.3 root params import { lang } from 'next/root-params' で [lang] などをどこでも読める 関数を使うだけ
16.3 import.meta.glob 複数ファイルをまとめて読み込む(Turbopack) 構文を使うだけ
16.3 TypeScript 7 で型チェック typescript@^7 を入れると next build の型チェックが速い オプトイン
16.3 Instant Navigations Partial Prefetching、Instant Insights、Playwright 用 instant() など cacheComponents + partialPrefetching

本記事の内容は、ご自由にお使いください。
ご利用の際は、出典として本ページへのリンクを記載いただけますようお願いします。

(記載例)出典:株式会社RJC「Next.js 16 新機能まとめ|16.3までの変更点と移行を実測」

2026年9月時点のバージョンと検証環境

本番で使うなら 16.3 系の最新パッチを選びます。 2026年9月22日に 16.3.6(と 15.5.26)が公開され、さらに 9月30日に 16.3 系のセキュリティリリースが予告されています(9件の脆弱性修正を予定)。執筆時点で npm に 16.3.7 はまだ公開されていないため、公開後は 16.3.7 以降を推奨します。

項目 内容
npm latest 16.3.6(2026-09-22)
15 系の保守版 15.5.26(npm の backport タグ)
次のセキュリティリリース 2026-09-30 予定 → 16.3.7 以降を推奨
必要な Node.js 20.9 以上(Node.js 18 は非対応)
必要な TypeScript 5.1 以上
対応ブラウザー Chrome / Edge / Firefox 111+、Safari 16.4+
この記事の検証環境 Linux、2 vCPU、Node.js 22.22.2、npm、next 16.3.6

15 → 16 の破壊的変更一覧

上げる前に、この表の「15まで」の書き方がコードにないかを検索しておくと、移行がスムーズです。

項目 15まで 16から 対応
params / searchParams 同期アクセスも一時的に可 await が必須 const { id } = await params
cookies() / headers() / draftMode() 同期アクセスも一時的に可 await が必須 (await cookies()).get(...)
middleware.ts ミドルウェア proxy.ts に改名(旧名は Edge 用に残るが非推奨) ファイル名と関数名を proxy に
revalidateTag('tag') 1引数 第2引数が必要(1引数は非推奨・型エラー) revalidateTag('tag', 'max') か updateTag
next lint あり(ビルド時も実行) 削除。next build も lint しない eslint を直接実行
serverRuntimeConfig / publicRuntimeConfig 非推奨 削除 環境変数(.env)へ
experimental.dynamicIO / experimental.ppr 実験的 削除 → cacheComponents cacheComponents: true
images.domains 非推奨 非推奨(警告) images.remotePatterns
並列ルートの default.js なくても動く場合あり 全スロットに明示が必要 null か notFound() を返す default.tsx
next/image の既定 minimumCacheTTL 60秒ほか 4時間、qualities は [75] など 必要なら設定で上書き
スムーススクロール 自動 自動では付かない <html data-scroll-behavior="smooth">
AMP あり 削除 —

16.0 の主な新機能

Cache Components:キャッシュは書いた所だけ

16.0 からは「何もしなければリクエストのたびに実行」が基本で、キャッシュしたい所に 'use cache' を書きます。 15 までの「暗黙のキャッシュ」を明示的なものに置き換える仕組みです。

// next.config.ts
import type { NextConfig } from "next";

const nextConfig: NextConfig = {
  cacheComponents: true,
};

export default nextConfig;
// lib/products.ts
import { cacheLife, cacheTag } from "next/cache";

export async function getProducts() {
  "use cache";
  cacheLife("hours");
  cacheTag("products");
  return db.products.findMany();
}

有効にすると、fetch・DB・cookies() などを <Suspense> の外で待つページはビルドエラーになり、「ストリームする/キャッシュする/待つと明示する」のどれかを選ぶ形になります。詳しい書き方とエラーの実例は別記事「Next.js use cache の使い方」で扱っています。

キャッシュ API:updateTag・refresh・revalidateTag

データを変えたあとの「画面の更新」は、目的に合わせて3つから選びます。

関数 呼べる場所 動き 向いている場面
updateTag('tag') Server Action のみ すぐ期限切れ → 同じ応答で最新を表示 フォーム送信後、自分の変更をすぐ見せたい
revalidateTag('tag', 'max') Server Action、Route Handler 古い内容を返しつつ裏で作り直す 記事・商品一覧など、少し遅れてよいもの
refresh() Server Action のみ キャッシュに触れず、未キャッシュ部分だけ取り直す 通知件数など、キャッシュしていない表示
"use server";
import { refresh, revalidateTag, updateTag } from "next/cache";

export async function saveProfile(userId: string) {
  await db.users.update(/* ... */);
  updateTag(`user-${userId}`); // 自分の変更をすぐ見せる
}

export async function publishArticle() {
  await db.articles.publish(/* ... */);
  revalidateTag("articles", "max"); // 裏で作り直せば十分
}

export async function markAsRead(id: string) {
  await db.notifications.markAsRead(id);
  refresh(); // キャッシュしていない未読件数だけ取り直す
}

proxy.ts:middleware.ts の新しい名前

中身は同じで、ファイル名と関数名を変えるだけです。 proxy.ts は Node.js ランタイムで動きます。

// proxy.ts
import { NextResponse } from "next/server";
import type { NextRequest } from "next/server";

export function proxy(request: NextRequest) {
  if (request.nextUrl.pathname === "/old") {
    return NextResponse.redirect(new URL("/", request.url));
  }
  return NextResponse.next();
}

export const config = { matcher: ["/old"] };

ビルド出力では ƒ Proxy (Middleware) と表示されます(実測)。

Turbopack が標準、React Compiler が安定

next dev と next build は何も指定しなくても Turbopack で動きます。 webpack の独自設定がある場合は next build --webpack で従来どおりビルドできます。

React Compiler(コンポーネントを自動でメモ化するコンパイラー)は reactCompiler: true で有効にします。既定ではオフです。16.3 では Rust 版を試す experimental.turbopackRustReactCompiler も追加されました。

Next.js DevTools MCP

AI コーディングエージェントに、ルート一覧・ログ・エラーの詳細を渡す MCP(Model Context Protocol)連携です。 16.1 で get_routes ツールが追加されました。

16.1〜16.3 で増えたもの

16.1:dev のディスクキャッシュと next upgrade

  • next dev のディスクキャッシュが安定・既定オン。再起動後の初回コンパイルが速くなります(公式の例:react.dev で 3.7秒 → 380ms)。
  • next upgrade コマンドが入りました。16.1 未満では使えないため、15 系からは codemod を使います(後述の実測参照)。
  • next experimental-analyze(Bundle Analyzer、実験的)、next dev --inspect。

16.2:速度、Adapters、エラーまわり

  • dev の起動(localhost が開けるまで)が 16.1 比で約87%短縮、Server Components のペイロード処理改善で HTML 描画が 25〜60% 高速(公式値)。
  • Adapters API が安定版に。デプロイ先がビルド出力を加工できます。
  • 本番の既定エラーページを刷新、dev のターミナルに Server Function の実行ログ、ハイドレーション差分の表示改善。
  • next start --inspect、<Link transitionTypes>、ImageResponse の高速化。実験的に unstable_catchError() など。

16.3:ビルドキャッシュ、AGENTS.md、Instant Navigations

16.3 は 16.0 以来の大型アップデートで、既存アプリにも効く改善が多く入っています。

分類 機能 ポイント
速度 ビルドのディスクキャッシュ(既定) 2回目以降の next build が速い(下の実測参照)
速度 dev のメモリ削減 メモリ退避(eviction)で最大90%削減(公式値)
速度 Node.js ストリーム化 負荷時に最大22%多くのリクエストを処理(公式値)
開発 AGENTS.md 自動生成 next dev がバージョンに合ったドキュメントの場所を書き込む
API catchError 16.2 の unstable_catchError が正式名に。retry() でサーバー部分から再取得
API root params next/root-params からルート直下の動的パラメーターを読める
API import.meta.glob Vite 互換のまとめて読み込み
任意 Instant Navigations cacheComponents: true と partialPrefetching: true で有効
実験的 experimental.useOffline 通信が切れても保留して再試行、useOffline() フック
// 16.3:catchError で作るエラー境界(Client Component)
"use client";
import { catchError, type ErrorInfo } from "next/error";

function ErrorFallback(props: { title: string }, { error, retry }: ErrorInfo) {
  return (
    <div>
      <h2>{props.title}</h2>
      <p>{error.message}</p>
      <button onClick={() => retry()}>もう一度読み込む</button>
    </div>
  );
}

export default catchError(ErrorFallback);
// 16.3:root params(app/[lang]/posts/[slug]/page.tsx)
import { lang } from "next/root-params";

export default async function PostPage(props: PageProps<"/[lang]/posts/[slug]">) {
  const { slug } = await props.params;
  const language = await lang(); // props で受け渡さなくても読める
  return <p>{language} / {slug}</p>;
}

15.5 のプロジェクトを 16.3.6 へ上げてみた

ここからは実測です。 create-next-app@15.5.26 で作ったプロジェクトに、15 時代によくある書き方(middleware.ts、同期の params・cookies()、1引数の revalidateTag、serverRuntimeConfig、images.domains、next lint、default.js のない並列ルート)を入れてから上げました。

手順1:next upgrade は 15.5 では使えない

npx next upgrade
Invalid project directory provided, no such directory: /…/up155/upgrade

15.5 の next には upgrade コマンドがないため、「upgrade というディレクトリ」と解釈されました。 公式ドキュメントのとおり、16.1 未満からは codemod を使います。

手順2:codemod で 16.3.6 へ

npx @next/codemod@canary upgrade latest

CI やエージェントのように標準入力が端末でない場合は、質問に既定値で答える非対話モードになります(--yes と同じ)。実際の出力(抜粋)です。

  Running in non-interactive mode. Every prompt will accept its default.
  Detected installed versions:
  - React: v19.1.0
  - Next.js: v15.5.26
  Applying all codemods recommended for your upgrade:
    - middleware-to-proxy
    - remove-unstable-prefix
    - remove-experimental-ppr
    - cache-components-instant-false
    - remove-partial-prefetch
Upgrading your project to Next.js 16.3.6...
✔ Codemods have been applied successfully.

codemod が変えたもの・変えなかったものを整理すると次のとおりです。

対象 codemod の結果
next / react / react-dom 16.3.6 / 19.3.0 に更新、eslint-config-next も 16.3.6 に
middleware.ts proxy.ts に改名、関数名も proxy に(自動)
全ページ・レイアウト export const instant = false; を追加(Cache Components 導入の準備。下で問題に)
同期の params / cookies() 変更なし(別の codemod で対応、後述)
revalidateTag('items') 変更なし
serverRuntimeConfig / images.domains 変更なし
"lint": "next lint" 変更なし

手順3:ビルドで出たエラー・警告と対処

npx next build を実行し、出たものを1つずつ直しました。

# 出たメッセージ(実文) 原因 対処
1 Error: Route segment config "instant" requires `nextConfig.cacheComponents` to be enabled. codemod が追加した instant = false Cache Components をまだ使わないならその行を削除。最初から --skip-adoption を付けると追加されない
2 ⚠ `images.domains` is deprecated in favor of `images.remotePatterns`. 非推奨設定 remotePatterns に書き換え
3 ⚠ Unrecognized key(s) in object: 'serverRuntimeConfig' と error TS2353: … 'serverRuntimeConfig' does not exist in type 'NextConfig'. 削除された設定 環境変数へ移す
4 app/actions/items.ts(6,3): error TS2554: Expected 2 arguments, but got 1. revalidateTag の1引数 revalidateTag("items", "max") または updateTag("items")
5 実行時 ⨯ TypeError: (0 , c.cookies)(...).get is not a function(/items/42 が 500) 同期の cookies() await cookies()、await params に
6 npm run lint で Invalid project directory provided, no such directory: /…/up155/lint next lint の削除 "lint": "eslint" に変更
7 /dashboard/members を直接開くと 404 表示 並列ルートのスロットに default.tsx がない 各スロットに default.tsx を追加

ポイントは、#5 はビルドが通ってしまい、ページを開いたときに初めてわかることです。 動的ルートは next start で一通り開いて確認しておくと確実です。

直す前と後:同期の params・cookies

// 直す前(15 では警告つきで動いていた)
import { cookies } from "next/headers";

export default function ItemPage({ params }: any) {
  const theme = cookies().get("theme")?.value ?? "light";
  return <h1>Item {params.id}({theme})</h1>;
}
// 直した後(16)
import { cookies } from "next/headers";

export default async function ItemPage({ params }: PageProps<"/items/[id]">) {
  const { id } = await params;
  const theme = (await cookies()).get("theme")?.value ?? "light";
  return <h1>Item {id}({theme})</h1>;
}

PageProps<"/items/[id]"> は Next.js が生成するグローバル型で、params の型を自動で付けてくれます。

この書き換えは codemod でもできます。next-async-request-api を別に実行すると、同期アクセスを await に書き換えました(実測、1ファイル変更)。

npx @next/codemod@canary next-async-request-api .
-export default function ItemPage({ params }: any) {
-  const theme = (cookies() as any).get("theme")?.value ?? "light";
+export default async function ItemPage(props: any) {
+  const params = await props.params;
+  const theme = (await cookies() as any).get("theme")?.value ?? "light";

--skip-adoption を付けた場合

同じ 15.5 の状態から --skip-adoption を付けて実行すると、適用される codemod が3つになり、instant = false は追加されませんでした。

npx @next/codemod@canary upgrade latest --yes --skip-adoption
  Applying all codemods recommended for your upgrade:
    - middleware-to-proxy
    - remove-unstable-prefix
    - remove-experimental-ppr

まず 16 に上げて動かし、Cache Components は後から段階的に入れるなら、この形がシンプルです。

手順4:ビルド成功

▲ Next.js 16.3.6 (Turbopack)
✓ Running next.config.ts took 30ms

  Creating an optimized production build ...
✓ Compiled successfully in 34.0s
  Running TypeScript ...
  Finished TypeScript in 13.4s ...
  Collecting page data using 1 worker ...
✓ Generating static pages using 1 worker (6/6) in 769ms
  Finalizing page optimization ...

Route (app)
┌ ○ /
├ ○ /_not-found
├ ○ /dashboard
├ ○ /dashboard/members
└ ƒ /items/[id]


ƒ Proxy (Middleware)

15.5 の出力にあった Size / First Load JS 列はなくなり、各工程の所要時間が表示されるようになっています。初回ビルドでは tsconfig.json の jsx が react-jsx に自動で書き換えられる旨のメッセージも出ました。上げたあとに npx next upgrade を実行すると、次のように表示されます。

✓ Current Next.js version is already on the target version "v16.3.6".

ビルド時間の実測:キャッシュあり/なし

16.3 から next build もディスクキャッシュを使うため、コードを変えていない2回目以降のビルドは大きく短くなります。 上のプロジェクトで、.next を消した「キャッシュなし」と、そのまま続けて実行した「キャッシュあり」を交互に3回ずつ測りました(2 vCPU、Node.js 22.22.2)。

条件 回 コンパイル(Compiled successfully in) 型チェック 全体(実時間)
キャッシュなし 1 33.8秒 8.8秒 47.1秒
キャッシュあり 1 0.50秒 7.6秒 12.9秒
キャッシュなし 2 38.8秒 11.8秒 57.7秒
キャッシュあり 2 0.65秒 7.5秒 15.2秒
キャッシュなし 3 32.4秒 15.1秒 53.3秒
キャッシュあり 3 0.80秒 12.1秒 19.9秒
  • コンパイル部分は 30秒台 → 1秒未満になりました。全体では約4分の1です。
  • 型チェックはキャッシュの対象外なので残ります。16.3 では typescript@^7 を入れると型チェックが速くなると案内されています。
  • キャッシュは .next/cache/turbopack に保存されていました(このプロジェクトで約35MB)。CI では .next/cache を保存・復元すると効果を受けられます。
  • 小さなプロジェクト・2 vCPU の環境での値です。規模や環境で変わるため、傾向として見てください。公式ブログでは nextjs.org で 21秒 → 9.2秒などの例が紹介されています。

新規作成と next dev で変わったこと

create-next-app@16.3.6 で作ると、AGENTS.md と CLAUDE.md が最初から入っています。 生成された package.json の依存は next 16.3.6、react 19.2.8 で、dev / build スクリプトに --turbopack は付いていません(既定のため)。

上げたプロジェクトで next dev を起動すると、次のメッセージとともにファイルが作られました。

▲ Next.js 16.3.6 (Turbopack)
✓ Ready in 2.0s
✓ Generated AGENTS.md and CLAUDE.md for AI agents. Set `agentRules: false` in next.config to disable.
<!-- BEGIN:nextjs-agent-rules -->
(見出し「This is NOT the Next.js you know」)
This version has breaking changes — … Read the relevant guide in `node_modules/next/dist/docs/` … before writing any code. Heed deprecation notices.
<!-- END:nextjs-agent-rules -->

CLAUDE.md の中身は @AGENTS.md の1行だけでした。AI エージェントに、手元の Next.js のバージョンに合ったドキュメント(node_modules/next/dist/docs/)を読ませるための仕組みです。不要なら next.config.ts に agentRules: false を設定します。

アップグレードのチェックリスト

# 確認すること 方法
1 Node.js 20.9 以上か node -v
2 作業前にコミットしたか codemod は未コミットでも強制的に進むため
3 codemod を実行したか 15 系:npx @next/codemod@canary upgrade latest(段階導入なら --skip-adoption)/16.1 以降:npx next upgrade
4 同期の params・cookies()・headers() がないか next-async-request-api codemod、または検索
5 revalidateTag の引数 第2引数 'max' か updateTag へ
6 削除された設定がないか serverRuntimeConfig、experimental.ppr、dynamicIO など
7 lint の実行方法 next lint → eslint
8 並列ルートの default.tsx すべてのスロットにあるか
9 動的ルートを実際に開いたか next start で主要ページを確認
10 CI でキャッシュを保存しているか .next/cache を保存・復元
11 パッチ版 16.3.7 公開後はそれ以降へ

よくある質問

Q. Next.js 16 に上げたら Cache Components を必ず使う必要がありますか? A. いいえ。cacheComponents は既定でオフで、オフのままなら 15 に近い感覚で使えます。codemod が instant = false を追加した場合は、その行を削除するか、--skip-adoption を付けて実行します。

Q. 15 系からは next upgrade と codemod のどちらを使えばよいですか? A. 16.1 未満には next upgrade がないため、npx @next/codemod@canary upgrade latest を使います。一度 16.1 以上になれば、以降は npx next upgrade で上げられます。

Q. middleware.ts のままでも動きますか? A. Edge ランタイム向けに残っていますが非推奨で、将来削除予定です。中身は同じなので、proxy.ts への改名(codemod で自動)をおすすめします。

Q. ビルドキャッシュで古い内容が混ざる心配はありますか? A. 変更のない成果物だけを再利用する仕組みです。気になる場合や、トラブル調査のときは .next を削除して、キャッシュなしでビルドし直すと切り分けられます。

まとめ

  • Next.js 16 の柱は Cache Components と Turbopack 標準化。キャッシュは 'use cache' を書いた所だけになりました。
  • 更新後の反映は updateTag・revalidateTag(tag, 'max')・refresh の3つから目的で選ぶ。
  • 16.1 で next upgrade、16.3 でビルドのディスクキャッシュ・AGENTS.md・catchError・root params が追加。
  • 15.5 からは codemod で上げ、instant = false の追加に注意(段階導入なら --skip-adoption)。
  • 同期の params・cookies() はビルドが通っても実行時エラーになるので、await に直して実際に開いて確認。
  • 実測では、キャッシュありのビルドはコンパイルが30秒台から1秒未満に。CI では .next/cache を保存。
  • 2026年9月30日のセキュリティリリース後は 16.3.7 以降へ。

本記事の内容は、ご自由にお使いください。
ご利用の際は、出典として本ページへのリンクを記載いただけますようお願いします。

(記載例)出典:株式会社RJC「Next.js 16 新機能まとめ|16.3までの変更点と移行を実測」

株式会社RJCでは、フレームワークのバージョンアップのたびに変更点を実際に試し、チームで知見を持ち寄っています。こうした知識を共有しながら、日々技術を磨いています。

株式会社RJC ― SI事業・SES事業・AI駆動開発。RJCは一緒に成長を楽しめる会社です。

WE ARE HIRING

RJCで一緒に開発しながら、
成長を楽しみませんか?

RJCは、Web・モバイル・AIを活用した開発プロジェクトで、テックリードやPM・PMOも活躍するシステム開発会社です。会社を知る、待遇を確かめる、話を聞いてみる。気になるところ見てみてください!

  • 127日年間休日
  • 12時間平均残業時間
  • 毎日ガチャ遊びココロも大切にする福利厚生。アマギフなどの賞品ラインナップ!

ほかにも、チケットレストラン、書籍読み放題、2年ごとの慰労報奨(休暇 or 金一封)、11期連続の黒字決算。

ABOUT RJC RJCがどんな会社か知る 考え方、研修、働き方、福利厚生、社員の前職まで。RJCのことが丸わかり! RJC丸わかりページへ JOB DESCRIPTION 仕事内容・待遇を見てみる 仕事内容、給与・待遇、選考の流れ。経験者も未経験も!応募前に知りたいこと、まとめました! 募集要項を見る ENTRY エントリーする エントリーは1〜2分・履歴書不要です。まずは話を聞いてみたい、という方でも歓迎です! エントリーフォームへ

RJCで一緒に開発しながら、 成長を楽しみませんか?