Turbopack
Turbopackは、JavaScriptとTypeScriptに最適化されたインクリメンタルなバンドラーであり、Rustで書かれており、Next.jsに組み込まれています。Pages RouterとApp Routerの両方でTurbopackを使用することで、はるかに高速なローカル開発体験が得られます。
Turbopackとは?
Next.jsのパフォーマンスを向上させるためにTurbopackを構築しました。その理由として、以下が挙げられます。
- 統合されたグラフ: Next.jsは複数の出力環境 (例: クライアントとサーバー) をサポートしています。複数のコンパイラを管理し、バンドルを結合するのは面倒な場合があります。Turbopackは、すべての環境に対して単一の統合されたグラフを使用します。
- バンドル vs ネイティブESM: 一部のツールは開発中にバンドルをスキップし、ブラウザのネイティブESMに依存しています。これは小さなアプリではうまく機能しますが、過剰なネットワークリクエストのために大規模なアプリでは速度が低下する可能性があります。Turbopackは開発時にバンドルを行いますが、大規模なアプリを高速に保つために最適化された方法で行います。
- インクリメンタルな計算: Turbopackは、複数のコアにわたって作業を並列化し、関数レベルまで結果をキャッシュします。一度行われた作業は、Turbopackによって繰り返されません。
- 遅延バンドル: Turbopackは、開発サーバーによって実際に要求されたもののみをバンドルします。この遅延アプローチにより、初回コンパイル時間とメモリ使用量を削減できます。
始める
Next.jsプロジェクトでTurbopackを有効にするには、`package.json` ファイルの `dev`、`build`、および `start` スクリプトに `--turbopack
` フラグを追加します。
{
"scripts": {
"dev": "next dev --turbopack",
"build": "next build --turbopack",
"start": "next start --turbopack"
}
}
現在、`dev` 用のTurbopackは安定版ですが、`build` はアルファ版です。Turbopackが安定版に近づくにつれて、本番環境のサポートに積極的に取り組んでいます。
サポートされている機能
Next.jsのTurbopackは、一般的なユースケースに対してゼロコンフィグです。以下に、標準でサポートされている機能の概要と、必要に応じてTurbopackをさらに設定する方法への参照を示します。
言語機能
機能 | ステータス | 備考 |
---|---|---|
JavaScript & TypeScript | サポート済み | 内部ではSWCを使用しています。型チェックはTurbopackでは行われません (型チェックには `tsc --watch ` を実行するか、IDEに依存してください)。 |
ECMAScript (ESNext) | サポート済み | Turbopackは、SWCの対応範囲に一致する最新のECMAScript機能をサポートしています。 |
CommonJS | サポート済み | `require()` 構文は標準でサポートされています。 |
ESM | サポート済み | 静的および動的な `import` は完全にサポートされています。 |
Babel | 部分的に未サポート | TurbopackはデフォルトでBabelを含んでいません。ただし、Turbopackの設定を通じて`babel-loader` を設定できます。 |
フレームワークとReactの機能
機能 | ステータス | 備考 |
---|---|---|
JSX / TSX | サポート済み | SWCがJSX/TSXのコンパイルを処理します。 |
高速リフレッシュ | サポート済み | 設定不要です。 |
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では、` |
JSONインポート | サポート済み | `.json` からの名前付きまたはデフォルトインポートはサポートされています。 |
モジュール解決
機能 | ステータス | 備考 |
---|---|---|
パスエイリアス | サポート済み | `tsconfig.json` の `paths` および `baseUrl` を読み取り、Next.jsの動作と一致させます。 |
手動エイリアス | サポート済み | `next.config.js` で `resolveAlias` を設定 (webpackの `resolve.alias` と同様)。 |
カスタム拡張子 | サポート済み | `next.config.js` で `resolveExtensions` を設定します。. |
AMD | 部分的にサポート済み | 基本的な変換は機能しますが、高度なAMDの使用は制限されています。 |
パフォーマンスと高速リフレッシュ
機能 | ステータス | 備考 |
---|---|---|
高速リフレッシュ | サポート済み | JavaScript、TypeScript、CSSを完全なリフレッシュなしで更新します。 |
増分バンドル | サポート済み | Turbopackは、開発サーバーによって要求されたものだけを遅延的にビルドし、大規模なアプリを高速化します。 |
未サポートおよび未計画の機能
一部の機能はまだ実装されていないか、計画されていません。
- レガシーCSS Modules機能
- スタンドアロンの `:local` および `:global` 擬似クラス (関数形式の `:global(...)` のみがサポートされています)。
- `@value` ルール (CSS変数に置き換えられました)。
- `:import` および `:export` ICSSルール。
- `
next.config.js
` の`webpack()` 設定 Turbopackはwebpackを置き換えるため、`webpack()
` の設定は認識されません。代わりに`experimental.turbo
` 設定を使用してください。 - 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は、`turbopack` キー下の `next.config.js` (または `next.config.ts`) を介して設定できます。設定オプションには以下が含まれます。
- `rules` ファイル変換のための追加のwebpackローダーを定義します。
- `resolveAlias` 手動エイリアスを作成します (webpackの `resolve.alias` と同様)。
- `resolveExtensions` モジュール解決のためのファイル拡張子を変更または拡張します。
- `moduleIds` モジュールIDがどのように生成されるかを設定します (`'named'` vs `'deterministic'`)。
- `treeShaking` 開発ビルドおよび将来の本番ビルドでツリーシェイキングを有効または無効にします。
- `memoryLimit` Turbopackのメモリ制限 (バイト単位) を設定します。
module.exports = {
turbopack: {
// Example: adding an alias and custom file extension
resolveAlias: {
underscore: 'lodash',
},
resolveExtensions: ['.mdx', '.tsx', '.ts', '.jsx', '.js', '.json'],
},
}
詳細な設定例については、Turbopack設定ドキュメントを参照してください。
パフォーマンスデバッグ用のトレースファイルを生成する
パフォーマンスやメモリの問題に遭遇し、Next.jsチームがそれらを診断するのを手助けしたい場合は、開発コマンドに `NEXT_TURBOPACK_TRACING=1` を追加することでトレースファイルを生成できます。
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が安定版に |
お役に立ちましたか?