esbuild とは?超高速の JavaScript バンドラー
esbuild は Go で書かれた JavaScript および TypeScript のバンドラー兼トランスパイラーで、従来のツールより 1 桁から 2 桁速くバンドルを生成します。
esbuild は「バンドラーを待つ」という感覚を過去のものにしました。パイプライン全体を Go で書き、積極的に並列化することで、JavaScript ベースのツールよりも大幅に速く JavaScript と TypeScript をバンドル・トランスパイルし、今では多くの他のビルドツールの dev ステップを支えています。
esbuild とは何か
esbuild は JavaScript と TypeScript 向けのバンドラー、ミニファイア、トランスパイラーです。entry point を受け取り、import を解決し、モダンな構文を変換し、tree-shaking を行い、ミニファイされた bundle を出力できます。これらすべてを高速な単一パスで行います。JSX と TypeScript の構文を out of the box でサポートします(型チェックなし)。
なぜ速いのか
esbuild は Go で書かれてネイティブコードにコンパイルされており、JavaScript の起動および JIT のオーバーヘッドを回避します。ファイルの parse、print、処理を CPU コア間で並列に行い、メモリ効率の高いデータ構造を使用します。その結果、比較対象となる JavaScript ベースのバンドラーよりも多くの場合 10 倍から 100 倍速い build になります。
使用例
単一のコマンドで bundle とミニファイを行います。
# bundle and minify an entry point
esbuild src/index.ts --bundle --minify --outfile=dist/app.jsCI/CD での役割
CI では、esbuild は本番用のバンドラーにも、Vite のようなツール内部の高速な変換レイヤーにもなり得ます。その速度は build ステップを短縮し、これは bundling が pipeline の時間を支配する大規模なコードベースで最も重要です。esbuild は型チェックを行わないため、pipeline は通常、型エラーを検出するために別の "tsc --noEmit" ステップと組み合わせます。
代替手段
Webpack はより設定の自由度が高いですが、はるかに遅いです。Rollup はライブラリ向けにクリーンな bundle を生成し、Vite が本番で使用しているものです。SWC は Rust ベースの同等のトランスフォーマーです。esbuild は build の生の速度が優先されるときに選ばれ、多くの他のツールの高速パスを支えています。
重要なポイント
- esbuild は非常に高速な Go ベースのバンドラー兼トランスパイラーです。
- 型チェックなしで TypeScript と JSX を変換します。
- 型エラーを検出するため、CI では別の "tsc --noEmit" ステップと組み合わせてください。