Skip to content
Latchkey

esbuild vs SWC: CIに適したJS/TSトランスパイラはどちら?

どちらも多くのパイプラインでBabelを置き換えた高速なネイティブトランスパイラだが - 狙う役割が少し異なる。

esbuild(Go)は極めて高速なことで知られるバンドラー兼トランスパイラです。SWC(Rust)は多くのフレームワークやツールで使われるトランスパイラ/コンパイラで、強力なpluginとBabel置き換えのサポートを備えています。

esbuildSWC
言語GoRust
主な役割バンドラー + トランスパイラトランスパイラ/コンパイラ(バンドラーで使用)
速度極めて高速極めて高速
Babel置き換えの重点部分的強力(多くの構成でdrop-in)
使用元Vite (dev)、多くのツールNext.js、Vitest、その他

CIでは

どちらもBabelに比べてtranspile時間を大幅に削減し、buildやテストの変換を高速化します。esbuildは有能なバンドラーでもあるため、bundlingとtranspileをまとめてカバーできます。SWCは他のツール(Next.js、test runner)内のtranspileエンジンとして、また限りなくdrop-inに近いBabel置き換えとして使われることが最も多いです。適切な選択は通常フレームワークのデフォルトに従います。

実践的な選択

これらを単独で選ぶことはめったにありません - Vite、Next.js、あるいはtest runnerにバンドルされて付いてきます。直接選ぶ場合: 高速なスタンドアロンのbundling/transpileにはesbuild、幅広いBabelスタイルの変換が必要な場合やフレームワークが既に使っている場合はSWCです。

結論

高速なスタンドアロンのバンドラー/トランスパイラが必要: esbuild。フレームワークやtest runner内でBabelを置き換える: SWC。ほとんどのスタックでは選択はフレームワークによって決まり、どちらもBabelよりはるかに高速です。

関連ガイド