Turbopack
Turbopack は インクリメンタルバンドラー で、JavaScript と TypeScript に最適化され、Rust で記述され Next.js に組み込まれています。Pages Router と App Router の両方で Turbopack を使用でき、大幅に高速な ローカル開発体験を実現します。
Turbopack の利点
Turbopack は Next.js のパフォーマンスを向上させるために開発されました:
- 統一されたグラフ: Next.js は複数の出力環境(クライアントとサーバーなど)をサポートしています。複数のコンパイラを管理しバンドルを結合するのは面倒です。Turbopack はすべての環境に対して 単一の統一されたグラフ を使用します。
- バンドリング vs ネイティブ ESM: 一部のツールは開発時にバンドリングをスキップし、ブラウザのネイティブ ESM に依存します。これは小さなアプリではうまく機能しますが、大規模なアプリでは過剰なネットワークリクエストにより遅くなることがあります。Turbopack は開発時にも バンドリング を行いますが、大規模アプリを高速に保つ最適化された方法で行います。
- インクリメンタル計算: Turbopack は作業をコア間で並列化し、結果を関数レベルまで キャッシュ します。一度行われた作業は Turbopack が繰り返しません。
- レイジーバンドリング: Turbopack は開発サーバーから実際にリクエストされたもののみをバンドルします。このレイジーなアプローチにより初期コンパイル時間とメモリ使用量を削減できます。
はじめに
Next.js プロジェクトで Turbopack を有効にするには、package.json
ファイルの dev
と build
スクリプトに --turbopack
フラグを追加します:
{
"scripts": {
"dev": "next dev --turbopack",
"build": "next build --turbopack",
"start": "next start"
}
}
現在、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 | サポート済み | Node.js ワーカープールで postcss.config.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 ルール。.module.css
でのcomposes
が.css
ファイルを構成する場合。webpack では.css
ファイルを CSS Module として扱いますが、Turbopack では.css
ファイルは常にグローバルです。CSS Module でcomposes
を使用するには、.css
ファイルを.module.css
に変更する必要があります。- CSS Modules での
@import
が.css
を CSS Module としてインポートする場合。webpack では.css
ファイルを CSS Module として扱いますが、Turbopack では.css
ファイルは常にグローバルです。CSS Module で@import
を使用するには、.css
ファイルを.module.css
に変更する必要があります。
- スタンドアロンの
next.config.js
でのwebpack()
設定 Turbopack は webpack を置き換えるため、webpack()
設定は認識されません。代わりにturbopack
設定を使用してください。- AMP Next.js での Turbopack サポートは計画されていません。
- Yarn PnP Next.js での Turbopack サポートは計画されていません。
experimental.urlImports
Turbopack では計画されていません。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 のメモリ制限をバイト単位で設定します。
module.exports = {
turbopack: {
// 例: エイリアスとカスタムファイル拡張子を追加
resolveAlias: {
underscore: 'lodash',
},
resolveExtensions: ['.mdx', '.tsx', '.ts', '.jsx', '.js', '.json'],
},
}
より詳細な設定例については、Turbopack 設定ドキュメントを参照してください。
パフォーマンスデバッグ用トレースファイルの生成
パフォーマンスやメモリの問題が発生し、Next.js チームが診断するのを支援したい場合は、NEXT_TURBOPACK_TRACING=1
を dev コマンドに追加してトレースファイルを生成できます:
NEXT_TURBOPACK_TRACING=1 next dev --turbopack
これにより .next/trace-turbopack
ファイルが生成されます。このファイルを Next.js リポジトリ の GitHub イシュー作成時に含めてください。
まとめ
Turbopack は Rust ベース の インクリメンタル バンドラーで、特に大規模アプリケーションのローカル開発とビルドを高速化するために設計されています。Next.js に統合されており、ゼロコンフィグの CSS、React、TypeScript サポートを提供します。
Turbopack の改善と本番ビルドサポートの追加に取り組んでいますので、今後の更新にご期待ください。今すぐ next dev --turbopack
で試して、フィードバックをお寄せください。
バージョン変更履歴
バージョン | 変更内容 |
---|---|
v15.3.0 | build の実験的サポート |
v15.0.0 | dev 用 Turbopack が安定版に |