tsx vs ts-node (CI): TypeScriptをより速く実行する
ts-nodeはtscの完全なセマンティクスでTypeScriptを実行し、tsxはesbuildを使って型を除去し、type-checkせずに高速に実行します。
ts-nodeはTypeScriptコンパイラ経由でTypeScriptを実行し、型を意識した完全な実行をサポートします。tsxはesbuildを使ってTypeScriptを高速にトランスパイルして実行し、シームレスなESMサポートを備えますが、type-checkは行いません。
| tsx | ts-node | |
|---|---|---|
| エンジン | esbuild(高速) | tsc |
| Type checking | なし(除去のみ) | 任意(より遅い) |
| ESMサポート | シームレス | 動作する(設定が必要) |
| 起動速度 | 非常に高速 | より遅い |
| 最適な用途 | スクリプト/テストを速く実行 | 型を意識した実行 |
CIでは
tsxは起動が速く、わずかな設定でESMを扱えるため、CIでスクリプト、tooling、テストを速く実行するのに理想的です。ts-nodeは実行しながらtype-checkできますが、それは遅いため、ほとんどのpipelineは代わりにtsxのような高速runnerと、型安全のための別途のtsc --noEmitステップを実行します。TypeScriptを速く実行するだけでよいなら、tsxがより軽量な選択です。
type-checkを分離する
高速実行が型安全をスキップしないよう、tsc --noEmitを独自のステップ(並列)として実行します。どちらもmanaged runnerで動作し、高速なmanaged runnerは大きなコードベースでの長いtype-checkパスを短縮します。
結論
TypeScriptのスクリプトとテストを最速で実行したいなら: tsxを、別途のtsc --noEmitチェックと組み合わせる。型を意識した実行を1つのツールで必要とするなら: ts-node。ほとんどのpipelineは高速実行とtype-checkingを分けます。
関連ガイド
ts-node vs SWC: Running TypeScript Faster in CIts-node vs SWC register for CI: tsc-based execution vs Rust-speed transpile, type checking, and ESM. Which Ty…
tsc vs Babel: Which to Compile TypeScript in CI?tsc vs Babel for CI: type-checking vs fast transpile-only, speed, and tradeoffs. How to compile and check Typ…
SWC vs Babel for CI: Faster JavaScript TranspilingSWC vs Babel for CI: Rust-speed transpiling vs the mature plugin ecosystem, compatibility, and migration. Whi…