SWCとは何か?Rust製JavaScriptコンパイラを解説
SWCは、JavaScriptとTypeScriptをトランスパイルしてバンドルする、Rust製の高速なプラットフォームであり、Babelのはるかに高速なドロップイン代替として使われることが多いです。
SWC("Speedy Web Compiler")は、JavaScriptとTypeScriptをコンパイルするためのRust製ツールチェーンです。Babelと同じく、モダンで非標準の構文を広く互換性のあるコードへ変換しますが、はるかに高速であり、そのためNext.jsのようなフレームワークが採用しました。
SWCとは
SWCは、Rustで書かれたJavaScriptとTypeScript向けのコンパイラ兼バンドラーです。コードをASTへパースし、変換(構文のダウンレベル化、型の除去、JSXのサポート)を適用して、出力を生成します。スタンドアロンのツールとしても、より大きなフレームワークやtest runner内の変換エンジンとしても使われます。
なぜ高速なのか
ネイティブなRustであるため、SWCはJavaScriptランタイムのオーバーヘッドを回避し、複数のコアにわたって作業を並列化します。Babelが単一スレッドのJavaScriptで実行するトランスパイル作業に対して、SWCは通常はるかに高速であり、その差は大規模なコードベースやテストスイートで積み重なります。
使用例
CLIはソースツリーをコンパイルします。
# transpile a source directory to an output directory
npx swc src -d distCI/CDでの役割
CIでは、SWCはbuildやテスト実行におけるトランスパイルのステップを高速化し、大規模なpipelineから相当な時間を削減できます。esbuildと同様に、SWCは型チェックを行わないため、通常は別途 "tsc --noEmit" のステップを並行して実行し、型エラーを検出します。変換が高速であることは、コミットごとのフィードバックループが短くなることを意味します。
代替ツール
Babelは、最も豊富なプラグインエコシステムを備えた長年確立されたトランスパイラですが、より低速です。esbuildも非常に高速にトランスパイルします。SWCはその中間に位置し、Babelより高速で、プラグインのサポートも拡大しており、いくつかのモダンなフレームワークでデフォルトの変換エンジンとなっています。
重要なポイント
- SWCは、JSとTypeScript向けのRust製の高速なトランスパイラ兼バンドラーです。
- 多くの場合、Babelのドロップインではるかに高速な代替となります。
- 型チェックは行わないため、CIでは "tsc --noEmit" と組み合わせてください。