Turbopack
Turbopack は インクリメンタルバンドラー で、JavaScript と TypeScript に最適化され、Rust で書かれており、Next.js に組み込まれています。Turbopack は Pages Router と App Router の両方で使用でき、大幅に高速な ローカル開発体験を提供します。
Turbopack の利点
Turbopack は Next.js のパフォーマンスを向上させるために開発されました:
- 統一されたグラフ: Next.js は複数の出力環境(例: クライアントとサーバー)をサポートしています。複数のコンパイラを管理し、バンドルを結合するのは面倒な作業です。Turbopack はすべての環境に対して 単一の統一されたグラフ を使用します。
- バンドリング vs ネイティブ ESM: 一部のツールは開発時にバンドリングをスキップし、ブラウザのネイティブ ESM に依存します。これは小さなアプリではうまく機能しますが、大規模なアプリでは過剰なネットワークリクエストにより遅くなる可能性があります。Turbopack は開発時にも バンドリング を行いますが、大規模アプリを高速に保つために最適化された方法で行います。
- インクリメンタル計算: Turbopack は作業をコア間で並列化し、結果を関数レベルまで キャッシュ します。一度行われた作業は Turbopack によって繰り返されません。
- レイジーバンドリング: Turbopack は開発サーバーから実際にリクエストされたものだけをバンドルします。このレイジーなアプローチにより、初期コンパイル時間とメモリ使用量を削減できます。
はじめに
Next.js プロジェクトで Turbopack を有効にするには、package.json
ファイルの dev
と build
スクリプトに --turbopack
フラグを追加します:
現在、dev
用の Turbopack は安定しており、build
はアルファ版です。Turbopack が安定に近づくにつれ、本番環境サポートに向けて積極的に作業を進めています。
サポートされている機能
Next.js の Turbopack は一般的なユースケースに対して ゼロ設定 で動作します。以下はデフォルトでサポートされている機能の概要と、必要に応じて Turbopack をさらに設定する方法のリファレンスです。
言語機能
機能 | ステータス | 備考 |
---|---|---|
JavaScript & TypeScript | サポート済み | 内部で SWC を使用。型チェックは Turbopack では行われません(tsc --watch を実行するか、IDE に頼って型チェックを行ってください)。 |
ECMAScript (ESNext) | サポート済み | Turbopack は最新の ECMAScript 機能をサポートしており、SWC のカバレッジと一致します。 |
CommonJS | サポート済み | require() 構文をデフォルトで処理します。 |
ESM | サポート済み | 静的および動的な import を完全にサポートします。 |
Babel | 部分的に未サポート | Turbopack はデフォルトで Babel を含みません。ただし、Turbopack 設定で babel-loader を設定できます。 |
フレームワークと React 機能
機能 | ステータス | 備考 |
---|---|---|
JSX / TSX | サポート済み | SWC が JSX/TSX コンパイルを処理します。 |
Fast Refresh | サポート済み | 設定不要です。 |
React Server Components (RSC) | サポート済み | Next.js App Router 用。Turbopack は正しいサーバー/クライアントバンドリングを保証します。 |
ルートレイアウトの自動作成 | 未サポート | App Router でのルートレイアウトの自動作成はサポートされていません。Turbopack は手動で作成するように指示します。 |
CSS とスタイリング
機能 | ステータス | 備考 |
---|---|---|
グローバル CSS | サポート済み | アプリケーションで直接 .css ファイルをインポートできます。 |
CSS Modules | サポート済み | .module.css ファイルがネイティブで動作します(Lightning CSS を使用)。 |
CSS ネスティング | サポート済み | Lightning CSS は モダンな CSS ネスティング をサポートしています。 |
@import 構文 | サポート済み | 複数の CSS ファイルを結合できます。 |
PostCSS | サポート済み | postcss.config.js を Node.js ワーカープールで自動的に処理します。Tailwind、Autoprefixer などに便利です。 |
Sass / SCSS | サポート済み (Next.js) | Next.js では、Sass がデフォルトでサポートされています。将来的に、Turbopack をスタンドアロンで使用する場合、ローダー設定が必要になる可能性があります。 |
Less | プラグイン経由で計画中 | デフォルトではまだサポートされていません。カスタムローダーが安定したら、ローダー設定が必要になる可能性があります。 |
Lightning CSS | 使用中 | CSS 変換を処理します。一部の低使用率の CSS Modules 機能(例: スタンドアロンの :local/:global 擬似クラス)はまだサポートされていません。詳細は以下を参照してください。 |
アセット
機能 | ステータス | 備考 |
---|---|---|
静的アセット (画像、フォント) | サポート済み | import img from './img.png' のインポートがデフォルトで動作します。Next.js では <Image /> コンポーネント用のオブジェクトを返します。 |
JSON インポート | サポート済み | .json からの名前付きまたはデフォルトのインポートがサポートされています。 |
モジュール解決
機能 | ステータス | 備考 |
---|---|---|
パスエイリアス | サポート済み | tsconfig.json の paths と baseUrl を読み取り、Next.js の動作と一致させます。 |
手動エイリアス | サポート済み | next.config.js で resolveAlias を設定できます(webpack.resolve.alias と同様)。 |
カスタム拡張子 | サポート済み | next.config.js で resolveExtensions を設定できます。 |
AMD | 部分的にサポート済み | 基本的な変換は動作しますが、高度な AMD の使用は制限されています。 |
パフォーマンスと Fast Refresh
機能 | ステータス | 備考 |
---|---|---|
Fast Refresh | サポート済み | JavaScript、TypeScript、CSS をフルリフレッシュせずに更新します。 |
インクリメンタルバンドリング | サポート済み | Turbopack は開発サーバーからリクエストされたものだけをレイジーにビルドし、大規模アプリを高速化します。 |
サポートされていない機能と未計画の機能
以下の機能はまだ実装されていないか、計画されていません:
- レガシーな CSS Modules 機能
- スタンドアロンの
:local
および:global
擬似クラス(関数形式の:global(...)
のみサポートされています)。 @value
ルール(CSS 変数に置き換えられました)。:import
および:export
ICSS ルール。
- スタンドアロンの
next.config.js
でのwebpack()
設定 Turbopack は webpack を置き換えるため、webpack()
設定は認識されません。代わりにturbopack
設定 を使用してください。- AMP Next.js での Turbopack サポートは計画されていません。
- Yarn PnP Turbopack でのサポートは計画されていません。
experimental.urlImports
サポートする予定はありません。experimental.esmExternals
サポートする予定はありません。Turbopack は Next.js のレガシーなesmExternals
設定をサポートしません。- 一部の Next.js 実験的フラグ
experimental.typedRoutes
experimental.nextScriptWorkers
experimental.sri.algorithm
experimental.fallbackNodePolyfills
これらは将来的に実装する予定です。
各機能フラグとそのステータスの詳細な内訳については、Turbopack API リファレンス を参照してください。
設定
Turbopack は next.config.js
(または next.config.ts
)の turbopack
キーで設定できます。設定オプションには以下が含まれます:
rules
ファイル変換用の追加の webpack ローダー を定義します。resolveAlias
手動エイリアスを作成します(webpack のresolve.alias
と同様)。resolveExtensions
モジュール解決用のファイル拡張子を変更または拡張します。moduleIds
モジュール ID の生成方法を設定します('named'
または'deterministic'
)。treeShaking
開発時および将来の本番ビルドでツリーシェイキングを有効または無効にします。memoryLimit
Turbopack のメモリ制限(バイト単位)を設定します。
より詳細な設定例については、Turbopack 設定ドキュメント を参照してください。
パフォーマンスデバッグ用のトレースファイル生成
パフォーマンスやメモリの問題が発生し、Next.js チームが診断するのを支援したい場合は、NEXT_TURBOPACK_TRACING=1
を dev コマンドに追加してトレースファイルを生成できます:
これにより .next/trace-turbopack
ファイルが生成されます。GitHub の Next.js リポジトリ で問題を作成する際にこのファイルを含めると、調査の助けになります。
まとめ
Turbopack は Rust ベース の インクリメンタル バンドラーで、特に大規模アプリケーションのローカル開発とビルドを高速化するために設計されています。Next.js に統合されており、ゼロ設定で CSS、React、TypeScript をサポートします。
Turbopack の改善と本番ビルドサポートの追加に取り組んでいるため、今後の更新にご期待ください。それまでの間、next dev --turbopack
で試してみて、フィードバックをお寄せください。
バージョン変更履歴
バージョン | 変更点 |
---|---|
v15.3.0 | build の実験的サポート |
v15.0.0 | dev 用 Turbopack が安定版に |