tsc vs Babel: CIでTypeScriptをコンパイルするのにどちらを使うべきか?
tscは型チェックとJavaScriptの出力の両方を行います。Babelは型を取り除いて高速にトランスパイルするだけです - そのため多くのパイプラインは、異なる仕事のために両方を使います。
tscはTypeScriptのコンパイラです。型チェックを行い、JavaScriptを出力できます。Babel (TypeScriptプリセット付き) は型を取り除いて高速にトランスパイルしますが、型チェックは行いません。両者は重なりつつも異なる問題を解決します。
| tsc | Babel | |
|---|---|---|
| 型チェック | あり | なし (型を取り除くのみ) |
| 出力速度 | 遅め | 高速 |
| ファイル間の型情報 | あり | なし (ファイルごとのトランスフォーム) |
| プラグイン / トランスフォーム | 限定的 | 大きなプラグインエコシステム |
| CIでの典型的な役割 | 型チェック (--noEmit) | バンドラー内での高速トランスパイル |
CIでの挙動
一般的で高速なパターンは、高速なトランスパイラー (Babel、esbuild、またはSWC) にJavaScriptを出力させながら、型チェックのみのためにtsc --noEmitを実行することです。tsc単体は、チェックと出力の両方を行うため最も安全な単一ツールですが、より遅いです。Babel単体は高速ですが型エラーを検出できません - そのため、出力をBabelに頼る場合は、別途tsc --noEmitのステップが不可欠です。
高速化する
型チェック (tsc --noEmit) とビルドを並列jobで実行し、依存関係とTSのbuild infoをcacheしましょう。どちらもCI runner上で動作します。より高速なマネージドrunnerは、大きなコードベースでの長い型チェックパスを短縮します。
結論
チェックと出力を1つのツールで行いたいなら: tsc。高速なトランスパイルと豊富なトランスフォームが欲しいなら: Babel - ただしtsc --noEmitの型チェックステップを追加しましょう。ほとんどのパイプラインは、高速なトランスパイラーとチェック用のtscを組み合わせます。
関連ガイド
SWC vs Babel: Which JS/TS Transpiler for CI?SWC vs Babel for CI: transpile speed, plugin ecosystem, presets, and compatibility. Which transpiler keeps yo…
esbuild vs SWC: Which JS/TS Transpiler for CI?esbuild vs SWC for CI: transpile and bundle speed, language coverage, and integration. Which fast transpiler…
mypy vs Pyright: Which Python Type Checker for CI?mypy vs Pyright for Python CI: speed, strictness, editor integration, and inference. Which static type checke…