Skip to content
Latchkey

tsx対ts-node:CIでTypeScriptを実行する

tsxはesbuild経由でTypeScriptを高速に実行し、ESMを苦もなく扱います。ts-nodeはオプションの型チェックを備えた定評ある実行ツールです。

ts-nodeはNode上でTypeScriptを直接実行し、実行しながらオプションで型チェックを行いますが、ESMのセットアップは面倒になり得ます。tsxはesbuildを動力とする実行ツールで、型を高速に取り除き、ESM/CJSを滑らかに扱いますが、それ自体では型チェックを行いません。

ts-nodetsx
エンジンtscベース(型認識オプション)esbuild(トランスパイルのみ)
実行中の型チェックオプションなし(tscを別途実行)
ESMの使い勝手面倒になり得る滑らか
起動速度遅い高速
典型的な用途型安全性を伴うTS実行高速なTSスクリプト / 開発

CIにおいて

tsxは、特にESMで、CIでTypeScriptのスクリプトやツールを高速に実行するのに最適です。esbuildでトランスパイルし、速度のために型チェックを省くからです。型安全性のためには別個のtsc --noEmitステップと組み合わせましょう。ts-nodeは実行しながら型チェックができ、スクリプトにはこれを好む人もいますが、より遅く、そのESM設定はCIの失敗の頻繁な原因です(おなじみのERR_UNKNOWN_FILE_EXTENSION / loaderの問題)。

ベストプラクティス

ほとんどのpipelineでは、型チェックはtsc --noEmitで一度実行し、スクリプトは高速なトランスパイルのみの実行ツール(tsx)で実行しましょう。これにより正しさ(型)と実行(速度)が明確に分離され、二重の作業を避けられます。

結論

高速な実行と苦のないESMを、tscによる別個の型チェックステップとともに望むなら:tsx。実行中の型チェックを望み、動作するts-nodeのセットアップがあるなら:ts-node。一般的なパターンは、実行にtsx、型にtscです。

関連ガイド