2025年4月9日水曜日
Next.js 15.3
投稿者Next.js 15.3には、ビルド用のTurbopack、新しいクライアントインストルメンテーションおよびナビゲーションフックなどが含まれています。
- ビルド用のTurbopack (アルファ版): 8000以上のテスト(99%)をパスする、より高速な本番ビルド
- Rspackのコミュニティサポート (実験的): Webpack互換性を持つ代替バンドラー
- クライアントインストルメンテーションフック: 早期の監視と分析設定
- ナビゲーションフック: `onNavigate`と`useLinkStatus`によるルーティング制御
- TypeScriptプラグインのパフォーマンス改善: 大規模コードベースのサポート向上
今すぐアップグレードするか、以下で始めましょう
# Use the automated upgrade CLI
npx @next/codemod@canary upgrade latest
# ...or upgrade manually
npm install next@latest react@latest react-dom@latest
# ...or start a new project
npx create-next-app@latestTurbopack Builds (alpha)
next dev --turbopack の安定リリースに続き、Next.js 15 の開発セッションの 50% 以上で Turbopack が使用されるようになりました。
このリリースには、`next build --turbopack` のアルファ版が含まれており、ローカル開発から本番ビルドまで同じパフォーマンス改善をもたらします。
本番ビルドで Turbopack を試すには、15.3 にアップグレードして以下を実行してください。
next build --turbopack機能
99.3% の `next build` の統合テストがすでにパスしています。100% に向かう進捗は areweturboyet.com で追跡できます。アプリケーションが既に Turbopack for `dev` で動作している場合、`build` でもそのまま動作するはずです。
Turbopack ビルドはアルファ版です。現時点では、ミッションクリティカルなアプリケーションでの使用は推奨しません。代わりに、プレビューまたはステージング環境で試すか、ローカルでビルドを実行してバンドルサイズとパフォーマンスの違いを確認してください。
スコープホーイスティング、チャンク処理の改善、その他の最適化を通じて、これらのパフォーマンスギャップを積極的に埋めていきます。
ビルドパフォーマンス
Vercel の大規模な社内モノレポや、初期のパートナーコードベースで Turbopack を検証してきました。Turbopack のアーキテクチャが以前の Webpack 実装と比較して優れている点は、CPU コアを追加するとパフォーマンスがスケールすることです。
- 4 コアの場合: Webpack より 28% 高速
- 16 コアの場合: Webpack より 60% 高速
- 30 コアの場合: Webpack より 83% 高速
これらのビルド時間は、永続キャッシュに関する実験的な取り組みにより、さらに短縮されます。これについては、今後のリリースでさらに詳しく共有します。
エコシステム
Sentry のような一般的に使用されるインテグレーションと連携し、安定リリース前に `next build --turbopack` との互換性を確保しています。互換性を確保するために協力したいツール開発者の方は、X の @leerob までご連絡ください。
フィードバック
安定リリースに役立てるため、たとえスムーズに進んだとしても、フィードバックを共有してください。
- 一般的なフィードバックについては、GitHub ディスカッション をご覧ください。
- 再現性の報告については、GitHub Issues をご利用ください。
next.config.ts での Turbopack 設定 (安定版)
next.config.ts での Turbopack 設定は、`experimental.turbo` からトップレベルの `turbopack` キーに移動しました。
import type { NextConfig } from 'next';
const nextConfig: NextConfig = {
turbopack: {
rules: {
'*.svg': {
loaders: ['@svgr/webpack'],
as: '*.js',
},
},
},
};
export default nextConfig;互換性のために、`experimental.turbo` オプションは Next.js の次のメジャーリリースまで引き続きサポートされます。
Turbopack の設定オプションの完全なリストについては、Turbopack API リファレンス を参照してください。
Rspack のコミュニティサポート (実験的)
Rspack チームが Next.js 用のコミュニティプラグインを作成しました。
これにより、Turbopack にまだ移行できないが、ローカルコンパイルとビルド時間を改善したい Next.js ユーザーのために、ほぼ正確な Webpack API 互換性を提供するオプションが提供されます。Turbopack の進捗には自信を持っており、Webpack ユーザーへの段階的な移行パスを提供し続けます。
これは公式の Next.js プラグインではありませんが、Rspack チームと協力しています。両チームは、SWC や Lightning CSS のような共通の基盤を共同で開発し、すべての Next.js ユーザーとより広範なエコシステムに利益をもたらします。
Next.js で Rspack を使用することを検討したい場合は、`next-rspack` アダプターを使用できます。このアダプターを統合テストスイートで実行しています。現在、テストの約 96% をパスしています。
例を見る (View an example) か、Rspack ドキュメント で詳細をご覧ください。
クライアントインストルメンテーションフック
instrumentation-client.js|ts ファイルを使用すると、アプリケーションのフロントエンドコードの実行前に実行される監視および分析コードを追加できます。
これは、パフォーマンス追跡、エラー監視、その他のクライアントサイドオブザーバビリティツールを、ライフサイクルの可能な限り早期にセットアップするのに理想的です。
// Set up performance monitoring
performance.mark('app-init');
// Initialize analytics
console.log('Analytics initialized');
// Set up error tracking
window.addEventListener('error', (event) => {
// Send to your error tracking service
reportError(event.error);
});このファイルは、サーバーサイドインストルメンテーション と同様に、プロジェクトのルートに配置します。
instrumentation-client ファイルのドキュメントで詳細をご覧ください (instrumentation-client file documentation)。
ナビゲーションフック
Next.js 15.3 では、クライアントサイドルーティング機能を強化する新しいナビゲーションフックを導入し、ローカライズされたローディング状態の開発や、ナビゲーションキャンセルなどの複雑な制御の実装を容易にします。
onNavigate
このイベントハンドラーは `Link` コンポーネントの新しいプロパティであり、クライアントサイドナビゲーション中に実行され、アプリケーションのルーティング動作を精密に制御できます。
`onClick` イベントはすべてのクリックで発生しますが、`onNavigate` は シングルページアプリケーション (SPA) ナビゲーションに使用でき、コードを実行したり、`preventDefault()` を使用してナビゲーションをキャンセルしたりできます。
この API は、トランジションアニメーション、ナビゲーションガード、または実際のページ遷移中にのみ実行されるべき分析追跡を実装するために使用できます。
onNavigate ドキュメント (onNavigate documentation) を参照してください。
useLinkStatus
Client Component フック `useLinkStatus` は、ナビゲーションが進行中であることを示す `pending` ブーリアン値を返します。これにより、ローディング状態をローカライズして制御できます。
この API は React の `useFormStatus` に倣っており、プリフェッチが無効な場合や、リンクされたルートに専用のローディング状態がない場合に、ページ遷移中のカスタムローディングインジケーターを追加するのに役立ちます。
<Link> コンポーネントの子孫として `useLinkStatus` を使用するコンポーネントを配置することで、ナビゲーションイベントにリアルタイムで応答する、反応性の高い UI 要素を作成できます。
useLinkStatus ドキュメント (useLinkStatus documentation) を参照してください。
TypeScript プラグインのパフォーマンス改善
Next.js TypeScript 言語サーバープラグイン (LSP) が高速化されました。
LSP は、サーバー/クライアント境界の検証、コンポーネントプロパティのヒント、設定の自動補完、React Server Components で許可されない API のエラー検出などのインラインインテリセンス機能を提供します。非常に大規模なコードベースでは、以前はこのプラグインによって TypeScript 言語サービスがハングしたりクラッシュしたりすることがありました。
これらの問題を解決するために、大幅なパフォーマンス改善を行いました。社内テストでは、プラグインの応答時間が約 60% 改善され、フリーズやクラッシュは発生しませんでした。
その他の変更点
- [機能] `images.remotePatterns` で `new URL()` をサポート (#77692)
- [機能] Viewport オプションが `metadata` から分離されました (#77427)
- [機能] `unstable_dynamicOnHover` オプションを追加しました (#77866)
- [機能] Pinterest Rich Pins のサポートを追加しました (#76988)
- [改善] Route Handlers でリダイレクトの後に `revalidate` が機能するようにしました (#77090)
- [改善] Server Actions で `revalidate` を呼び出した後の強力な一貫性を確保しました (#76885)
- [改善] PNG から AVIF への変換を高速化するために `sharp` をアップグレードしました (#77839)
コントリビューター
Next.js は、3,000 人以上の個人開発者による共同作業の結果です。このリリースは、以下によって提供されました。
- Next.js チーム: Andrew, Hendrik, Janka, Jiachi, Jimmy, Jiwon, JJ, Josh, Jude, Sam, Sebastian, Sebbie, Wyatt, and Zack.
- Turbopack チーム: Benjamin, Donny, Josh, Maia, Niklas, Tim, Tobias, and Will.
- Next.js Docs チーム: Delba, Rich, Ismael, and Lee.
@raunofreiberg、@huozhi、@ijjk、@timneutkens、@gaojude、@leerob、@mezotv、@bgw、@samcx、@ztanner、@sokra、@mischnic、@wbinnssmith、@kdy1、@unstubbable、@ahabhgk、@ScriptedAlchemy、@SukkaW、@wyattjoh、@eps1lon、@Amirroid、@Netail、@lubieowoce、@gnoff、@jackwilson323、@acdlite、@sbougerel、@kevva、@kasperpeulen、@Cy-Tek、@dvoytenko、@husseinraoouf、@isBatak、@iamkd、@delbaoliveira、@jantimon、@padmaia、@Bernardoow、@styfle、@devjiwonchoi、@JamBalaya56562、@Marukome0743 に多大な感謝を!