- HOME >
- Jamstack用語集 >
- Turbopack
Turbopack
ターボパック
Next.js v13.4で新たに導入されたTurbopack
Webpackは長年にわたり、開発者コミュニティによって広く採用され、Web開発の中心的なモジュールバンドラとなりました。しかし、その性能と拡張性の制約により、新たなツールが求められるようになりました。Vercelは、これらの問題を解決するためにTurbopackを開発しました。
そして、Next.js v13.4で新たに導入されたのが、このTurbopackですね。ついにきたか〜という感じです。
Turbopackとは何かっていうと、JavaScriptとTypeScriptのために最適化された、Rustで書かれたインクリメンタルなバンドラーのことを指します。このTurbopackはNext.jsに組み込まれているんですよ。
Rustで書かれたTurbopackは、生産にのみ必要な最適化作業をスキップすることで、より高速にバンドルを行うことができるとのこと。Turboビルドエンジンで、スケジュールされたすべての関数の結果をキャッシュし、同じ作業を二度行う必要がないようにしているようです。
「そもそもバンドラーって何?」って思いますよね。ざっくり言うと、バンドラーは、複数のJavaScriptファイルやモジュールを、一つまたは複数の出力ファイルにまとめ上げてくれるツールのことを指します。このまとめ上げ作業を高速化するのが、このTurbopackの役目なんです。
使い方
Turbopackは、Next.jsのpages
ディレクトリとapp
ディレクトリの両方で使用でき、ローカル開発を高速化します。Turbopackを有効にするには、Next.jsの開発サーバーを実行するときに--turbo
フラグを使用します。
{
"scripts": {
"dev": "next dev --turbo",
"build": "next build",
"start": "next start",
"lint": "next lint"
}
}
プロジェクトから始める場合
npx create-next-app --example with-turbopack
Turbopack Quickstart – Turbopack
ただし、現在のところ、Turbopackはnext dev
のみをサポートしていて、next build
はサポートしていないんですよね。でも心配しないでください、開発チームはnext build
のサポートを進行中のようです。
ただ、現状ではTurbopackはまだ完全にWebpackやNext.jsとの機能の互換性がありません。でも、Vercelの開発チームはバグの修正に取り組んでいて、Turbopackのインクリメンタルエンジンとキャッシングレイヤーの改善を進めています。これにより、ローカル開発がさらにスピードアップされる予定なんです。
公式サイトによると、将来的には、スタンドアロン CLI、プラグイン API、および Svelte や Vue などの他のフレームワークのサポートをリリースする予定だそうです。今後のアップデートに期待ですね。
Turbopackの役割
さて、ここでちょっと例え話を使って、Turbopackの役割を理解しやすく説明してみましょう。
皆さんは料理をしたことがありますよね?料理をするとき、食材を一つ一つ準備するのは時間がかかるし大変ですよね。それを効率化するために、料理用のキットがありますよね。あらかじめ必要な食材や調味料がまとめられていて、それを使うだけで簡単に料理ができる、というものです。この料理キットがあれば、料理の準備時間を大幅に短縮でき、より早く美味しい料理を作ることができます。
Turbopackも同じような役割を果たします。それぞれのJavaScriptファイルやモジュールが食材に相当し、Turbopackがそれらを効率よくまとめ上げて、すばやく料理(つまり、アプリケーション)を完成させる役割を果たすんですね。これにより、開発者は各部品を一つ一つ手作業で準備する時間を節約し、より早くアプリケーションを開発することができるんです。
Architecture: Turbopack | Next.js
そもそも、Turbopack とは何か?
Turbopack - The successor to webpackに詳しく書かれているポイントをまとめました。
Turbopackは、Webpackの後継としてRustで書かれたインクリメンタルなバンドラで、JavaScriptとTypeScriptに最適化されています。Webpackの開発者によって作られ、大規模な開発でも非常に高いパフォーマンスを発揮し、インクリメンタルな動作と適応的なバンドリング戦略により、どんなサイズのアプリでも高速で柔軟な開発体験を提供します。
インクリメンタルな設計により、Turbopackが一度行ったタスクは二度と行わないので、ビルドが非常に効率的です。TypeScript、JSX、CSS、CSS Modules、WebAssemblyなどを含むエコシステムに対応しています。アプリケーションのサイズに関係なく、Hot Module Replacement (HMR) が高速に動作します。
React Server Componentsをネイティブにサポートしています。複数の環境(ブラウザ、サーバ、エッジ、SSR、React Server Components)を同時にビルドし、最適化することができます。
ともあれ、Next.jsのプロダクションビルドを、ローカルでもクラウドでもサポート可能ということみたいです。この文章を読むと、Turbopackは非常に興味深いツールであり、JavaScriptとTypeScriptの開発体験を大いに改善する可能性があると感じます。主に以下の点が引き立っています。
1. パフォーマンス
TurbopackがRustで書かれているという点は特筆すべきです。Rustはメモリ安全性を保証し、同時に高いパフォーマンスを提供します。これにより、大規模なプロジェクトでも高速なビルド速度が期待できます。
2. インクリメンタルな設計
一度行ったタスクを二度と行わないという設計原則は、再ビルド時間の大幅な削減を意味します。これは、大規模なコードベースで特に有益です。
3. エコシステムの互換性
TypeScript、JSX、CSS、CSS Modules、WebAssemblyなどの広範な技術へのサポートは、既存のJavaScriptエコシステムとの互換性を確保する重要な要素です。
4. Hot Module Replacement (HMR)
HMRの高速な動作は、開発体験を大きく向上させる要素です。これにより、開発者は変更を即座に確認でき、迅速なフィードバックループが可能になります。
5. React Server Componentsのサポート
これはReactの最新機能への対応を示しており、最新の開発パターンに迅速に対応できるというTurbopackの強力な点です。
6. 複数環境へのビルドと最適化
これは、ブラウザ、サーバ、エッジ、SSR、React Server Componentsなど、さまざまなターゲット環境で一貫した品質とパフォーマンスを提供する能力を示しています。