2024年10月21日月曜日
Next.js 15
投稿者Next.js 15は正式に安定版となり、本番環境に対応しました。このリリースは、RC1とRC2の両方からのアップデートに基づいて構築されています。私たちは安定性に重点を置きながら、皆様に気に入っていただけるような刺激的なアップデートを追加しました。今すぐNext.js 15をお試しください。
# Use the new automated upgrade CLI
npx @next/codemod@canary upgrade latest
# ...or upgrade manually
npm install next@latest react@rc react-dom@rc
また、今週木曜日、10月24日に開催されるNext.js Confで、今後の予定についてさらに詳しくお知らせできることを嬉しく思います。
Next.js 15の新機能は以下の通りです
@next/codemod
CLI: 最新のNext.jsおよびReactバージョンに簡単にアップグレードできます。- 非同期リクエストAPI(破壊的変更): レンダリングおよびキャッシュモデルの簡素化に向けた段階的なステップ。
- キャッシュセマンティクス(破壊的変更):
fetch
リクエスト、GET
ルートハンドラ、クライアントナビゲーションはデフォルトでキャッシュされなくなりました。 - React 19サポート: React 19、Reactコンパイラ(実験的)、およびハイドレーションエラーの改善をサポート。
- Turbopack Dev(安定版): パフォーマンスと安定性の向上。
- 静的インジケータ: 開発中に静的ルートを表示する新しい視覚的インジケータ。
unstable_after
API(実験的): レスポンスのストリーミング終了後にコードを実行します。instrumentation.js
API(安定版): サーバーライフサイクル監視のための新しいAPI。- 強化されたフォーム(
next/form
): クライアントサイドナビゲーションでHTMLフォームを強化。 next.config
:next.config.ts
のTypeScriptサポート。- セルフホスティングの改善:
Cache-Control
ヘッダーのより詳細な制御。 - サーバーアクションのセキュリティ: 推測不可能なエンドポイントと未使用アクションの削除。
- 外部パッケージのバンドル(安定版): AppおよびPages Router用の新しい設定オプション。
- ESLint 9サポート: ESLint 9のサポートを追加。
- 開発とビルドのパフォーマンス: ビルド時間の改善と高速リフレッシュの高速化。
@next/codemod
CLIによるスムーズなアップグレード
Next.jsのメジャーリリースごとに、破壊的変更のアップグレードを自動化するためにコードモッド(自動コード変換)が含まれています。
アップグレードをさらにスムーズにするために、強化されたコードモッドCLIをリリースしました
npx @next/codemod@canary upgrade latest
このツールは、コードベースを最新の安定版またはプレリリース版にアップグレードするのに役立ちます。CLIは依存関係を更新し、利用可能なコードモッドを表示し、それらを適用する手順をガイドします。
canary
タグは最新のコードモッドバージョンを使用し、latestはNext.jsのバージョンを指定します。皆様からのフィードバックに基づいてツールの改善を継続的に追加する予定であるため、最新のNext.jsバージョンにアップグレードする場合でも、canaryバージョンのコードモッドを使用することをお勧めします。
Next.js codemod CLIについて詳しくはこちらをご覧ください。
非同期リクエストAPI(破壊的変更)
従来のサーバーサイドレンダリングでは、サーバーはコンテンツをレンダリングする前にリクエストを待機していました。しかし、すべてのコンポーネントがリクエスト固有のデータに依存するわけではないため、レンダリングのためにリクエストを待つ必要はありません。理想的には、サーバーはリクエストが到着する前にできるだけ多くを準備するべきです。これを可能にし、将来の最適化の準備をするために、いつリクエストを待つべきかを知る必要があります。
そのため、headers
、cookies
、params
、searchParams
などのリクエスト固有のデータに依存するAPIは非同期に移行しています。
import { cookies } from 'next/headers';
export async function AdminPanel() {
const cookieStore = await cookies();
const token = cookieStore.get('token');
// ...
}
これは破壊的変更であり、以下のAPIに影響します
クッキー
ヘッダー
ドラフトモード
layout.js
、page.js
、route.js
、default.js
、generateMetadata
、generateViewport
のparams
page.js
のsearchParams
移行を容易にするため、これらのAPIは一時的に同期的にアクセスできますが、次のメジャーバージョンまでは開発環境と本番環境で警告が表示されます。移行を自動化するためのコードモッドが利用可能です。
npx @next/codemod@canary next-async-request-api .
コードモッドでコードを完全に移行できない場合は、アップグレードガイドをお読みください。また、Next.jsアプリケーションを新しいAPIに移行する方法の例も提供しています。
キャッシュセマンティクス
Next.js App Routerは、意見を取り入れたキャッシュのデフォルト設定でリリースされました。これらは、必要な場合にオプトアウトできる、デフォルトで最もパフォーマンスの高いオプションを提供するように設計されました。
皆様からのフィードバックに基づいて、私たちはキャッシュのヒューリスティックと、それがPartial Prerendering (PPR)やfetch
を使用するサードパーティライブラリとどのように相互作用するかを再評価しました。
Next.js 15では、GET
ルートハンドラとクライアントルーターキャッシュのデフォルトのキャッシュ設定を、デフォルトでキャッシュからデフォルトでキャッシュなしに変更しています。以前の動作を維持したい場合は、引き続きキャッシュをオプトインできます。
今後数ヶ月でNext.jsのキャッシュを改善し続けており、近日中に詳細をお知らせします。
GET
ルートハンドラはデフォルトでキャッシュされなくなりました
Next 14では、GET
HTTPメソッドを使用するルートハンドラは、動的関数や動的設定オプションを使用しない限り、デフォルトでキャッシュされていました。Next.js 15では、GET
関数はデフォルトではキャッシュされません。
export dynamic = 'force-static'
などの静的ルート設定オプションを使用することで、引き続きキャッシュをオプトインできます。
sitemap.ts
、opengraph-image.tsx
、icon.tsx
などの特殊なルートハンドラ、およびその他のメタデータファイルは、動的関数や動的設定オプションを使用しない限り、デフォルトで静的のままです。
クライアントルーターキャッシュは、デフォルトでページコンポーネントをキャッシュしなくなりました
Next.js 14.2.0では、staleTimes
という実験的なフラグを導入し、ルーターキャッシュのカスタム設定を可能にしました。
Next.js 15では、このフラグは引き続きアクセス可能ですが、デフォルトの動作を変更し、ページセグメントのstaleTime
を0
に設定しています。これは、アプリ内を移動する際に、クライアントがナビゲーションの一部としてアクティブになるページコンポーネントの最新データを常に反映することを意味します。ただし、重要な動作は変更されていません。
- 共有レイアウトデータは、部分レンダリングをサポートし続けるため、サーバーから再フェッチされません。
- 戻る/進むナビゲーションは、ブラウザがスクロール位置を復元できるように、キャッシュから復元されます。
loading.js
は5分間(またはstaleTimes.static
設定の値)キャッシュされたままになります。
以下の設定を行うことで、以前のクライアントルーターキャッシュの動作をオプトインできます。
const nextConfig = {
experimental: {
staleTimes: {
dynamic: 30,
},
},
};
export default nextConfig;
React 19
Next.js 15のリリースの一環として、私たちは今後のReact 19のリリースに合わせることを決定しました。
バージョン15では、App RouterはReact 19 RCを使用し、コミュニティからのフィードバックに基づいて、Pages RouterでReact 18との下位互換性も導入しました。Pages Routerを使用している場合でも、準備ができたときにReact 19にアップグレードできます。
React 19はまだRCフェーズですが、実際のアプリケーションでの広範なテストとReactチームとの緊密な連携により、その安定性に自信を持っています。コアとなる破壊的変更は十分にテストされており、既存のApp Routerユーザーには影響しません。そのため、Next.js 15を安定版として今すぐリリースし、皆様のプロジェクトがReact 19 GAに完全に備えられるようにすることにしました。
移行をできるだけスムーズにするために、移行プロセスを簡素化するコードモッドと自動ツールを提供しています。
Next.js 15アップグレードガイド、React 19アップグレードガイドを読み、React Conf Keynoteを見て詳細を学んでください。
React 18上のPages Router
Next.js 15は、Pages RouterとReact 18の互換性を維持しており、ユーザーはNext.js 15の改善点を享受しながらReact 18を使い続けることができます。
最初のリリース候補(RC1)以降、コミュニティからのフィードバックに基づいてReact 18のサポートを含めることに焦点を移しました。この柔軟性により、Pages RouterとReact 18を使用しながらNext.js 15を採用でき、アップグレードパスをより細かく制御できます。
注: 同じアプリケーションでPages RouterをReact 18で、App RouterをReact 19で実行することは可能ですが、この設定は推奨しません。そうすると、基盤となるAPIとレンダリングロジックが2つのバージョン間で完全に整合しない可能性があるため、予測不能な動作と型の一貫性の問題が生じる可能性があります。
Reactコンパイラ(実験的)
Reactコンパイラは、MetaのReactチームが作成した新しい実験的コンパイラです。このコンパイラは、プレーンなJavaScriptセマンティクスとReactのルールを理解することで、コードを深いレベルで理解し、コードに自動最適化を追加することを可能にします。このコンパイラは、開発者がuseMemo
やuseCallback
などのAPIを通じて手動で行うメモ化の量を減らし、コードをよりシンプルに、保守しやすく、エラーを起こしにくくします。
Next.js 15では、Reactコンパイラのサポートを追加しました。Reactコンパイラと、利用可能なNext.jsの設定オプションについて詳しくはこちらをご覧ください。
注: Reactコンパイラは現在Babelプラグインとしてのみ利用可能であり、開発時間とビルド時間が遅くなります。
ハイドレーションエラーの改善
Next.js 14.1は、エラーメッセージとハイドレーションエラーを改善しました。Next.js 15は、さらに改善されたハイドレーションエラービューを追加することで、これらをさらに発展させています。ハイドレーションエラーは、エラーのソースコードと、問題に対処するための提案を表示するようになりました。
例えば、これはNext.js 14.1での以前のハイドレーションエラーメッセージです

Next.js 15では、これが次のように改善されました。

Turbopack Dev
next dev --turbo
が安定版となり、開発体験を高速化する準備が整いましたことを発表できることを嬉しく思います。私たちはこれをvercel.com、nextjs.org、v0、およびその他すべてのアプリケーションで、素晴らしい結果を得ながら反復開発に活用してきました。
たとえば、大規模なNext.jsアプリであるvercel.com
では、以下のような結果が得られました。
- ローカルサーバーの起動が最大76.7%高速化。
- Fast Refreshによるコード更新が最大96.3%高速化。
- キャッシュなしの初期ルートコンパイルが最大45.8%高速化(Turbopackにはまだディスクキャッシュがありません)。
Turbopack Devについて詳しくは、新しいブログ記事をご覧ください。
静的ルートインジケータ
Next.jsは開発中に静的ルートインジケータを表示し、どのルートが静的であるか動的であるかを識別するのに役立ちます。この視覚的な合図により、ページのレンダリング方法を理解することでパフォーマンスを簡単に最適化できます。

next buildの出力を使用して、すべてのルートのレンダリング戦略を確認することもできます。
このアップデートは、Next.jsの可観測性を向上させ、開発者がアプリケーションを監視、デバッグ、最適化しやすくするための継続的な取り組みの一環です。また、専用の開発者ツールも開発中であり、詳細については近日中にお知らせします。
無効にできる静的ルートインジケータについて詳しくはこちらをご覧ください。
unstable_after
によるレスポンス後のコード実行(実験的)
ユーザーリクエストを処理する際、サーバーは通常、レスポンスの計算に直接関連するタスクを実行します。ただし、ロギング、分析、その他の外部システムとの同期などのタスクを実行する必要がある場合があります。
これらのタスクはレスポンスに直接関連しないため、ユーザーがそれらの完了を待つ必要はありません。ユーザーへのレスポンス後に作業を延期することは、サーバーレス関数がレスポンスが閉じられるとすぐに計算を停止するため、課題となります。
after()
は、レスポンスのストリーミングが終了した後に処理される作業をスケジュールできるようにすることで、この問題を解決する新しい実験的APIです。これにより、セカンダリタスクをプライマリレスポンスをブロックせずに実行できます。
使用するには、next.config.js
にexperimental.after
を追加します。
const nextConfig = {
experimental: {
after: true,
},
};
export default nextConfig;
次に、Server Components、Server Actions、Route Handlers、またはMiddlewareで関数をインポートします。
import { unstable_after as after } from 'next/server';
import { log } from '@/app/utils';
export default function Layout({ children }) {
// Secondary task
after(() => {
log();
});
// Primary task
return <>{children}</>;
}
unstable_after
について詳しくはこちらをご覧ください。
instrumentation.js
(安定版)
register()
APIを持つinstrumentation
ファイルは、ユーザーがNext.jsサーバーのライフサイクルにアクセスして、パフォーマンスを監視し、エラーの原因を追跡し、OpenTelemetryのような可観測性ライブラリと深く統合することを可能にします。
この機能は安定版となり、experimental.instrumentationHook
設定オプションは削除できます。
さらに、私たちはSentryと協力して、すべてのサーバーでスローされたエラーに関する重要なコンテキストをキャプチャするために使用できる新しいonRequestError
フックを設計しました。
- サーバーでスローされたすべてのエラーに関する重要なコンテキストをキャプチャします。これには以下が含まれます。
- ルーター:Pages RouterまたはApp Router
- サーバーコンテキスト:Server Component、Server Action、Route Handler、またはMiddleware
- エラーを好みのオブザーバビリティプロバイダーに報告します。
export async function onRequestError(err, request, context) {
await fetch('https://...', {
method: 'POST',
body: JSON.stringify({ message: err.message, request, context }),
headers: { 'Content-Type': 'application/json' },
});
}
export async function register() {
// init your favorite observability provider SDK
}
onRequestError
関数について詳しくはこちらをご覧ください。
<Form>
コンポーネント
新しい<Form>
コンポーネントは、プリフェッチ、クライアントサイドナビゲーション、およびプログレッシブエンハンスメントにより、HTML <form>
要素を拡張します。
これは、検索フォームが結果ページに移動するような、新しいページに移動するフォームに役立ちます。
import Form from 'next/form';
export default function Page() {
return (
<Form action="/search">
<input name="query" />
<button type="submit">Submit</button>
</Form>
);
}
<Form>
コンポーネントには以下が含まれます。
- プリフェッチ:フォームがビュー内にある場合、レイアウトとローディングUIがプリフェッチされ、ナビゲーションが高速化されます。
- クライアントサイドナビゲーション: 送信時に、共有レイアウトとクライアントサイドの状態が保持されます。
- プログレッシブエンハンスメント:JavaScriptがまだロードされていない場合でも、フォームはフルページナビゲーションで動作します。
以前は、これらの機能を実現するには多くの手動のボイラープレートが必要でした。例えば
例
// Note: This is abbreviated for demonstration purposes.
// Not recommended for use in production code.
'use client'
import { useEffect } from 'react'
import { useRouter } from 'next/navigation'
export default function Form(props) {
const action = props.action
const router = useRouter()
useEffect(() => {
// if form target is a URL, prefetch it
if (typeof action === 'string') {
router.prefetch(action)
}
}, [action, router])
function onSubmit(event) {
event.preventDefault()
// grab all of the form fields and trigger a `router.push` with the data URL encoded
const formData = new FormData(event.currentTarget)
const data = new URLSearchParams()
for (const [name, value] of formData) {
data.append(name, value as string)
}
router.push(`${action}?${data.toString()}`)
}
if (typeof action === 'string') {
return <form onSubmit={onSubmit} {...props} />
}
return <form {...props} />
}
<Form>
コンポーネントについて詳しくはこちらをご覧ください。
next.config.ts
のサポート
Next.jsはTypeScriptのnext.config.ts
ファイルタイプをサポートし、自動補完とタイプセーフなオプションのためにNextConfig
タイプを提供しています。
import type { NextConfig } from 'next';
const nextConfig: NextConfig = {
/* config options here */
};
export default nextConfig;
Next.jsのTypeScriptサポートについて詳しくはこちらをご覧ください。
セルフホスティングの改善点
アプリケーションをセルフホストする際、Cache-Control
ディレクティブをより詳細に制御する必要がある場合があります。
一般的なケースの1つは、ISRページに送信されるstale-while-revalidate
期間の制御です。2つの改善を実施しました。
next.config
でexpireTime
の値を設定できるようになりました。これは以前、experimental.swrDelta
オプションでした。- デフォルト値を1年に更新し、ほとんどのCDNが
stale-while-revalidate
セマンティクスを意図どおりに完全に適用できるようにしました。
また、カスタムのCache-Control
値をデフォルト値で上書きすることもなくなりました。これにより、完全に制御でき、あらゆるCDN設定との互換性が保証されます。
最後に、セルフホスティング時の画像最適化を改善しました。以前は、Next.jsサーバーで画像を最適化するためにsharp
をインストールすることをお勧めしていましたが、この推奨事項が見落とされることがありました。Next.js 15では、sharp
を手動でインストールする必要がなくなりました。next start
を使用したり、スタンドアロン出力モードで実行したりすると、Next.jsが自動的にsharp
を使用します。
詳細については、Next.jsのセルフホスティングに関する新しいデモとチュートリアルビデオをご覧ください。
サーバーアクションのセキュリティ強化
サーバーアクションは、クライアントから呼び出せるサーバーサイド関数です。ファイルの先頭に'use server'
ディレクティブを追加し、非同期関数をエクスポートすることで定義されます。
サーバーアクションやユーティリティ関数がコードの他の場所でインポートされていない場合でも、それらは公開されているHTTPエンドポイントです。この動作は技術的には正しいですが、そのような関数が意図せずに公開されてしまう可能性があります。
セキュリティを向上させるため、以下の機能強化を導入しました。
- デッドコード削除: 未使用のサーバーアクションは、そのIDがクライアントサイドのJavaScriptバンドルに公開されなくなり、バンドルサイズが削減され、パフォーマンスが向上します。
- セキュアなアクションID: Next.jsは、クライアントがサーバーアクションを参照および呼び出すことを可能にする、推測不可能で非決定的なIDを生成するようになりました。これらのIDは、セキュリティ強化のため、ビルド間で定期的に再計算されます。
// app/actions.js
'use server';
// This action **is** used in our application, so Next.js
// will create a secure ID to allow the client to reference
// and call the Server Action.
export async function updateUserAction(formData) {}
// This action **is not** used in our application, so Next.js
// will automatically remove this code during `next build`
// and will not create a public endpoint.
export async function deleteUserAction(formData) {}
サーバーアクションは引き続き公開HTTPエンドポイントとして扱われるべきです。サーバーアクションのセキュリティについて詳しくはこちらをご覧ください。
外部パッケージのバンドル最適化(安定版)
外部パッケージをバンドルすることで、アプリケーションのコールドスタートパフォーマンスを向上させることができます。App Routerでは、外部パッケージはデフォルトでバンドルされ、新しいserverExternalPackages
設定オプションを使用して特定のパッケージをオプトアウトできます。
Pages Routerでは、外部パッケージはデフォルトではバンドルされませんが、既存のtranspilePackages
オプションを使用してバンドルするパッケージのリストを提供できます。この設定オプションでは、各パッケージを指定する必要があります。
App RouterとPages Router間の設定を統一するために、App Routerのデフォルトの自動バンドルに合わせるための新しいオプション、bundlePagesRouterDependencies
を導入します。必要に応じて、serverExternalPackages
を使用して特定のパッケージをオプトアウトできます。
const nextConfig = {
// Automatically bundle external packages in the Pages Router:
bundlePagesRouterDependencies: true,
// Opt specific packages out of bundling for both App and Pages Router:
serverExternalPackages: ['package-name'],
};
export default nextConfig;
外部パッケージの最適化について詳しくはこちらをご覧ください。
ESLint 9のサポート
Next.js 15は、2024年10月5日のESLint 8のサポート終了に伴い、ESLint 9のサポートも導入しています。
スムーズな移行を確実にするため、Next.jsは下位互換性を維持しており、ESLint 8または9のどちらでも引き続き使用できます。
ESLint 9にアップグレードし、まだ新しい設定形式を採用していないことを検出した場合、Next.jsは移行を容易にするために自動的にESLINT_USE_FLAT_CONFIG=false
というエスケープハッチを適用します。
さらに、—ext
や—ignore-path
などの非推奨オプションは、next lint
の実行時に削除されます。ESLintは最終的にESLint 10でこれらの古い設定を許可しなくなるため、早めの移行をお勧めします。
これらの変更の詳細については、移行ガイドをご確認ください。
このアップデートの一環として、eslint-plugin-react-hooks
をv5.0.0
にアップグレードしました。これにより、React Hooksの使用に関する新しいルールが導入されます。すべての変更はeslint-plugin-react-hooks@5.0.0の変更ログで確認できます。
開発とビルドの改善
サーバーコンポーネントHMR
開発中、サーバーコンポーネントは保存時に再実行されます。これは、APIエンドポイントまたはサードパーティサービスへのfetch
リクエストも呼び出されることを意味します。
ローカル開発のパフォーマンスを向上させ、課金されるAPI呼び出しの潜在的なコストを削減するために、Hot Module Replacement (HMR)が以前のレンダリングからのfetch
レスポンスを再利用できるようにしました。
サーバーコンポーネントHMRキャッシュについて詳しくはこちらをご覧ください。
App Routerの静的生成の高速化
静的生成を最適化し、特にネットワークリクエストが遅いページのビルド時間を改善しました。
以前は、静的最適化プロセスでページが2回レンダリングされていました。1回目はクライアントサイドナビゲーション用のデータを生成するため、2回目は初期ページアクセス用のHTMLをレンダリングするためです。現在では、最初のレンダリングを再利用し、2回目のパスをなくすことで、ワークロードとビルド時間を短縮しています。
さらに、静的生成ワーカーは、ページ間でfetch
キャッシュを共有するようになりました。fetch
呼び出しがキャッシュをオプトアウトしない場合、その結果は同じワーカーによって処理される他のページで再利用されます。これにより、同じデータに対するリクエスト数が削減されます。
高度な静的生成制御(実験的)
より高度な制御から恩恵を受けるような高度なユースケース向けに、静的生成プロセスをより詳細に制御するための実験的サポートを追加しました。
これらのオプションは同時実行性の増加によりリソース使用量の増加やメモリ不足エラーにつながる可能性があるため、特定の要件がない限り、現在のデフォルト設定を維持することをお勧めします。
const nextConfig = {
experimental: {
// how many times Next.js will retry failed page generation attempts
// before failing the build
staticGenerationRetryCount: 1
// how many pages will be processed per worker
staticGenerationMaxConcurrency: 8
// the minimum number of pages before spinning up a new export worker
staticGenerationMinPagesPerWorker: 25
},
}
export default nextConfig;
静的生成オプションについて詳しくはこちらをご覧ください。
その他の変更点
- [破壊的変更] next/image:オプションの依存関係として
squoosh
を削除し、sharp
を優先するように変更しました(PR) - [破壊的変更] next/image:デフォルトの
Content-Disposition
をattachment
に変更しました(PR) - [破壊的変更] next/image:
src
に先頭または末尾のスペースがある場合にエラーが発生するようになりました(PR) - [破壊的変更] Middleware:推奨されないReact APIのインポートを制限するために
react-server
条件を適用します(PR) - [破壊的変更] next/font:外部の
@next/font
パッケージのサポートを削除しました(PR) - [破壊的変更] next/font:
font-family
ハッシュ化を削除しました(PR) - [破壊的変更] キャッシュ:
force-dynamic
がフェッチキャッシュにno-store
デフォルトを設定するようになりました(PR) - [破壊的変更] Config:
swcMinify
(PR)、missingSuspenseWithCSRBailout
(PR)、およびoutputFileTracing
(PR)の動作をデフォルトで有効にし、非推奨オプションを削除しました - [破壊的変更] Speed Insightsの自動計測を削除しました(今後は専用の@vercel/speed-insightsパッケージを使用する必要があります)(PR)
- [破壊的変更] 動的サイトマップルートの
.xml
拡張子を削除し、開発環境と本番環境でサイトマップURLを整合させました(PR) - [破壊的変更] App Routerでの
export const runtime = "experimental-edge"
のエクスポートは非推奨になりました。ユーザーはexport const runtime = "edge"
に切り替える必要があります。この移行を実行するためのコードモッドを追加しました(PR) - [破壊的変更] レンダリング中に
revalidateTag
およびrevalidatePath
を呼び出すとエラーがスローされるようになりました(PR) - [破壊的変更]
instrumentation.js
およびmiddleware.js
ファイルがベンダー提供のReactパッケージを使用するようになりました(PR) - [破壊的変更] 最小Node.jsバージョンが18.18.0に更新されました(PR)
- [破壊的変更]
next/dynamic
:非推奨のsuspense
プロップが削除され、コンポーネントがApp Routerで使用される場合、空のSuspense境界が挿入されなくなりました(PR) - [破壊的変更] Edge Runtimeでモジュールを解決する際、
worker
モジュール条件は適用されません(PR) - [破壊的変更] Server Componentsで
next/dynamic
と一緒にssr: false
オプションを使用することが禁止されました(PR) - [改善] メタデータ:Vercelでホストされている場合の
metadataBase
の環境変数フォールバックを更新しました(PR) - [改善]
optimizePackageImports
による混合名前空間インポートと名前付きインポートでのツリーシェイキングの修正(PR) - [改善] 並列ルート:一致しないキャッチオールルートに既知のすべてのパラメーターを提供(PR)
- [改善] Config
bundlePagesExternals
が安定版となり、bundlePagesRouterDependencies
に名称変更されました。 - [改善] Config
serverComponentsExternalPackages
が安定版となり、serverExternalPackages
に名称変更されました。 - [改善] create-next-app:新しいプロジェクトはデフォルトですべての
.env
ファイルを無視します(PR) - [改善]
outputFileTracingRoot
、outputFileTracingIncludes
、outputFileTracingExcludes
が実験版から安定版にアップグレードされました(PR) - [改善] グローバルCSSファイルとツリーのより深いCSSモジュールファイルの結合を回避(PR)
- [改善] キャッシュハンドラは
NEXT_CACHE_HANDLER_PATH
環境変数で指定できるようになりました(PR) - [改善] Pages RouterがReact 18とReact 19の両方をサポートするようになりました(PR)
- [改善] エラーオーバーレイに、インスペクターが有効になっている場合、Node.jsインスペクターURLをコピーするボタンが表示されるようになりました(PR)
- [改善] App Router上のクライアントプリフェッチが
priority
属性を使用するようになりました(PR) - [改善] Next.jsがApp RouterでNext.jsの内部エラーを再スローするための
unstable_rethrow
関数を提供するようになりました(PR) - [改善]
unstable_after
が静的ページでも使用できるようになりました(PR) - [改善] SSR中に
next/dynamic
コンポーネントが使用された場合、チャンクがプリフェッチされるようになりました(PR) - [改善]
esmExternals
オプションがApp Routerでサポートされるようになりました(PR) - [改善]
experimental.allowDevelopmentBuild
オプションを使用して、デバッグ目的でnext build
でNODE_ENV=development
を許可できるようになりました(PR) - [改善] Server Actionの変換がPages Routerで無効になりました(PR)
- [改善] ビルドワーカーが終了すると、ビルドがハングするのを防ぐようになりました(PR)
- [改善] サーバーアクションからのリダイレクト時、再検証が正しく適用されるようになりました(PR)
- [改善] Edge Runtimeでの並列ルートの動的パラメータが正しく処理されるようになりました(PR)
- [改善] 静的ページが初回ロード後もstaleTimeを尊重するようになりました(PR)
- [改善]
vercel/og
がメモリリーク修正で更新されました(PR) - [改善] タイミングのパッチが更新され、APIモックのために
msw
のようなパッケージが使用できるようになりました(PR) - [改善] プリレンダリングされたページは静的staleTimeを使用するべきです(PR)
詳細については、アップグレードガイドをご覧ください。
貢献者
Next.jsは、3,000人を超える個人開発者、GoogleやMetaのような業界パートナー、そしてVercelのコアチームの共同作業の成果です。このリリースは、以下の協力によって実現されました。
- Next.js チーム: Andrew、 Hendrik、 Janka、 Jiachi、 Jimmy、 Jiwon、 JJ、 Josh、 Sam、 Sebastian、 Sebbie、 Shu、 Wyatt、 そして Zack。
- Turbopack チーム: Alex、 Benjamin、 Donny、 Maia、 Niklas、 Tim、 Tobias、 そして Will。
- Next.js Docs チーム: Delba、 Rich、 Ismael、 そして Lee。
@AbhiShake1、@Aerilym、@AhmedBaset、@AnaTofuZ、@Arindam200、@Arinji2、@ArnaudFavier、@ArnoldVanN、@Auxdible、@B33fb0n3、@Bhavya031、@Bjornnyborg、@BunsDev、@CannonLock、@CrutchTheClutch、@DeepakBalaraman、@DerTimonius、@Develliot、@EffectDoplera、@Ehren12、@Ethan-Arrowood、@FluxCapacitor2、@ForsakenHarmony、@Francoscopic、@Gomah、@GyoHeon、@Hemanshu-Upadhyay、@HristovCodes、@HughHzyb、@IAmKushagraSharma、@IDNK2203、@IGassmann、@ImDR、@IncognitoTGT、@Jaaneek、@JamBalaya56562、@Jeffrey-Zutt、@JohnGemstone、@JoshuaKGoldberg、@Julian-Louis、@Juneezee、@KagamiChan、@Kahitar、@KeisukeNagakawa、@KentoMoriwaki、@Kikobeats、@KonkenBonken、@Kuboczoch、@Lada496、@LichuAcu、@LorisSigrist、@Lsnsh、@Luk-z、@Luluno01、@M-YasirGhaffar、@Maaz-Ahmed007、@Manoj-M-S、@ManuLpz4、@Marukome0743、@MaxLeiter、@MehfoozurRehman、@MildTomato、@MonstraG、@N2D4、@NavidNourani、@Nayeem-XTREME、@Netail、@NilsJacobsen、@Ocheretovich、@OlyaPolya、@PapatMayuri、@PaulAsjes、@PlagueFPS、@ProchaLu、@Pyr33x、@QiuranHu、@RiskyMH、@Sam-Phillemon9493、@Sayakie、@Shruthireddy04、@SouthLink、@Strift、@SukkaW、@Teddir、@Tim-Zj、@TrevorSayre、@Unsleeping、@Willem-Jaap、@a89529294、@abdull-haseeb、@abhi12299、@acdlite、@actopas、@adcichowski、@adiguno、@agadzik、@ah100101、@akazwz、@aktoriukas、@aldosch、@alessiomaffeis、@allanchau、@alpedia0、@amannn、@amikofalvy、@anatoliik-lyft、@anay-208、@andrii-bodnar、@anku255、@ankur-dwivedi、@aralroca、@archanaagivale30、@arlyon、@atik-persei、@avdeev、@baeharam、@balazsorban44、@bangseongbeom、@begalinsaf、@bennettdams、@bewinsnw、@bgw、@blvdmitry、@bobaaaaa、@boris-szl、@bosconian-dynamics、@brekk、@brianshano、@cfrank、@chandanpasunoori、@chentsulin、@chogyejin、@chrisjstott、@christian-bromann、@codeSTACKr、@coderfin、@coltonehrman、@controversial、@coopbri、@creativoma、@crebelskydico、@crutchcorn、@darthmaim、@datner、@davidsa03、@delbaoliveira、@devjiwonchoi、@devnyxie、@dhruv-kaushik、@dineshh-m、@diogocapela、@dnhn、@domdomegg、@domin-mnd、@dvoytenko、@ebCrypto、@ekremkenter、@emmerich、@flybayer、@floriangosse、@forsakenharmony、@francoscopic、@frys、@gabrielrolfsen、@gaojude、@gdborton、@greatvivek11、@gnoff、@guisehn、@GyoHeon、@hamirmahal、@hiro0218、@hirotomoyamada、@housseindjirdeh、@hungdoansy、@huozhi、@hwangstar156、@iampoul、@ianmacartney、@icyJoseph、@ijjk、@imddc、@imranolas、@iscekic、@jantimon、@jaredhan418、@jeanmax1me、@jericopulvera、@jjm2317、@jlbovenzo、@joelhooks、@joeshub、@jonathan-ingram、@jonluca、@jontewks、@joostmeijles、@jophy-ye、@jordienr、@jordyfontoura、@kahlstrm、@karlhorky、@karlkeefer、@kartheesan05、@kdy1、@kenji-webdev、@kevva、@khawajaJunaid、@kidonng、@kiner-tang、@kippmr、@kjac、@kjugi、@kshehadeh、@kutsan、@kwonoj、@kxlow、@leerob、@lforst、@li-jia-nan、@liby、@lonr、@lorensr、@lovell、@lubieowoce、@luciancah、@luismiramirez、@lukahartwig、@lumirlumir、@luojiyin1987、@mamuso、@manovotny、@marlier、@mauroaccornero、@maxhaomh、@mayank1513、@mcnaveen、@md-rejoyan-islam、@mehmetozguldev、@mert-duzgun、@mirasayon、@mischnic、@mknichel、@mobeigi、@molebox、@mratlamwala、@mud-ali、@n-ii-ma、@n1ckoates、@nattui、@nauvalazhar、@neila-a、@neoFinch、@niketchandivade、@nisabmohd、@none23、@notomo、@notrab、@nsams、@nurullah、@okoyecharles、@omahs、@paarthmadan、@pathliving、@pavelglac、@penicillin0、@phryneas、@pkiv、@pnutmath、@qqww08、@r34son、@raeyoung-kim、@remcohaszing、@remorses、@rezamauliadi、@rishabhpoddar、@ronanru、@royalfig、@rubyisrust、@ryan-nauman、@ryohidaka、@ryota-murakami、@s-ekai、@saltcod、@samcx、@samijaber、@sean-rallycry、@sebmarkbage、@shubh73、@shuding、@sirTangale、@sleevezip、@slimbde、@soedirgo、@sokra、@sommeeeer、@sopranopillow、@souporserious、@srkirkland、@steadily-worked、@steveluscher、@stipsan、@styfle、@stylessh、@syi0808、@symant233、@tariknh、@theoludwig、@timfish、@timfuhrmann、@timneutkens、@tknickman、@todor0v、@tokkiyaa、@torresgol10、@tranvanhieu01012002、@txxxxc、@typeofweb、@unflxw、@unstubbable、@versecafe、@vicb、@vkryachko、@wbinnssmith、@webtinax、@weicheng95、@wesbos、@whatisagi、@wiesson、@woutvanderploeg、@wyattjoh、@xiaohanyu、@xixixao、@xugetsu、@yosefbeder、@ypessoa、@ytori、@yunsii、@yurivangeffen、@z0n、@zce、@zhawtof、@zsh77、そして@ztannerの皆様に心から感謝いたします!