MENU

SWC — Rustで書かれた高速JS/TSコンパイラ

SWC アイキャッチ
SWC

SWC(Speedy Web Compiler)は、Rust言語で実装されたJavaScript/TypeScriptコンパイラです。2018年から韓国出身の開発者ドンユン・カン(DongYoon Kang)氏が個人プロジェクトとして開発を始め、2021年にVercelに採用されてフルタイムメンテナとなりました。Babel互換のAPI設計でありながらRustのネイティブ性能を活かし、Babel比で20倍以上の変換速度を出します。Next.js 12でBabelの代わりにSWCが標準採用され、Parcel 2・Deno・TurboPack・Jestの代替実装などにも組み込まれています。

目次

この記事の目次

  1. Rust製のコンパイラ基盤
  2. 個人開発からVercel採用へ
  3. Next.jsを支える実装
  4. esbuildとの違い
  5. まとめ

Rust製のコンパイラ基盤

Rust製のコンパイラ基盤

SWCはRust言語でゼロから書かれたJavaScript/TypeScriptコンパイラで、esbuild同様にネイティブ実行されることで圧倒的な速度を実現しています。Rustはメモリ安全性とゼロコスト抽象化を両立する言語で、コンパイラ実装に向くと評価されており、並列処理・メモリ管理・型安全性をRustの特徴で押さえつつJSエコシステムに切り込んでいます。ファイル単位の変換に加えて、ファイル間の依存解析やバンドルまで担えるよう拡張されてきました。

設計上の特徴はBabelのプラグインモデルとの親和性です。SWCにはBabelとほぼ互換のASTとAPIが用意されており、Babelプラグインの主要ロジックをSWC向けに移植するパスが明確に示されています。プラグイン自体もWebAssembly(Wasm)として書ける仕組みが提供され、Rustで書いた自作変換をモジュールごとに差し込めるようになりました。「Babelの後継として性能を底上げする」コンセプトが、API互換性と拡張性の両面から徹底されています。

個人開発からVercel採用へ

個人開発からVercel採用へ

SWCは2018年、当時学生だった韓国出身のドンユン・カン氏が個人OSSとして開発を始めました。Rustでコンパイラを書く知見をJavaScriptエコシステムに持ち込む試みは当初は珍しく、しばらくはニッチな存在でした。状況が変わったのは2021年で、Next.jsを開発するVercelがカン氏を雇用し、SWCをNext.jsのトランスパイル基盤に据えると発表したのが転機となりました。

2021年10月のNext.js 12でBabelに代わるデフォルトコンパイラとしてSWCが採用され、「ビルド時間がVercel計測で17倍速くなった」という公式アナウンスが大きな反響を呼びました。その後Parcel 2・Deno・Jestテスト変換(@swc/jest)・Turbopackなど採用例が広がり、現在もVercelのチームを中心に開発が続いています。Babelに次ぐ「JavaScriptコンパイラ第二の標準」として、特にRust製ツールチェーンが集まるエコシステムの中心に位置しています。

Next.jsを支える実装

Next.jsを支える実装

SWCの最大の利用先はNext.jsです。Next.js 12以降は内部のトランスパイル工程がSWCに置き換わり、TypeScript・JSXの変換、コードsplitting、React Fast Refreshのコード生成までSWCが担うようになりました。Vercelのドキュメントには「Babelからの移行で開発時のrefresh速度が大幅改善」と書かれており、実際に大規模Next.jsアプリでビルド時間が劇的に短縮された事例が多数報告されています。

Next.js以外にも、ParcelはバージョンXからSWCをコアトランスパイラに採用し、DenoのTypeScriptサポートでも内部利用されています。テスト分野では@swc/jestがBabelによるJest変換の代替として使われ、テスト全体の所要時間を半分以下に短縮する事例が一般的です。さらに2022年に登場したTurbopackもSWCを呼び出す形で動いており、SWCの上にレイヤを重ねた新世代ツールが生まれ続けています。「Rust製JSコンパイラ」という新しい潮流の中心にいる存在です。

esbuildとの違い

esbuildとの違い

SWCとesbuildはどちらも「ネイティブ実装のJSコンパイラ」という共通点を持ちますが、思想が異なります。esbuildはGoで書かれ「シンプルで高速」を旗印にしており、設定や拡張点は意図的に絞られています。「速くて素直に動くこと」を最優先にしたツールで、Vite・Bunなど開発サーバー系の土台として広く使われます。

SWCはRustで書かれ「Babelの完全な代替」を狙う立ち位置で、API互換性・プラグインモデル・カスタム変換の自由度を重視しています。Next.jsのような巨大フレームワーク内部で複雑な変換を担うことを前提に設計されており、Wasmプラグインで独自処理を差し込めます。実務では「速度に振りたいならesbuild、Babelからの段階的移行と拡張性ならSWC」と使い分けるケースが多く、両者は競合というよりも、「JSビルドはネイティブ実装する」時代を切り拓いた二大ツールとして並び立っています。

まとめ

SWCはドンユン・カン氏が2018年に開発開始し、2021年にVercelに採用されたRust製JS/TSコンパイラです。Next.js 12で標準採用されて以来、Parcel・Deno・Turbopackなど多くのツールチェーンを支えています。esbuildと並ぶ「ネイティブ実装JSコンパイラ」の二大巨頭として、Babel時代を引き継ぐ新世代の基盤になりました。

※本記事はIT用語辞典の手書きドラフトです。公開前に最新情報・出典を確認のうえ加筆修正してください。

よかったらシェアしてね!
  • URLをコピーしました!
  • URLをコピーしました!

この記事を書いた人

コメント

コメントする

目次