Skip to content
Latchkey

tsc vs Babel: CIでTypeScriptをコンパイルするのにどちらを使うべきか?

tscは型チェックとJavaScriptの出力の両方を行います。Babelは型を取り除いて高速にトランスパイルするだけです - そのため多くのパイプラインは、異なる仕事のために両方を使います。

tscはTypeScriptのコンパイラです。型チェックを行い、JavaScriptを出力できます。Babel (TypeScriptプリセット付き) は型を取り除いて高速にトランスパイルしますが、型チェックは行いません。両者は重なりつつも異なる問題を解決します。

tscBabel
型チェックありなし (型を取り除くのみ)
出力速度遅め高速
ファイル間の型情報ありなし (ファイルごとのトランスフォーム)
プラグイン / トランスフォーム限定的大きなプラグインエコシステム
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を組み合わせます。

関連ガイド