tsx の使い方 — Node.jsでTypeScriptを最も簡単に実行する方法
一言でいうと
tsx(TypeScript Execute) は、Node.js上でTypeScriptやESMファイルを設定不要・高速に実行できるCLIツールです。内部でesbuildを利用したトランスパイルを行い、tscによるビルドステップなしにTypeScriptをそのまま実行できます。
どんな時に使う?
- TypeScriptで書いたスクリプトをサッと実行したい — ビルド設定なしに
tsx script.tsだけで動かせる - 開発中にファイル変更を検知して自動再実行したい —
tsx watchでホットリロード的な開発体験が得られる - Node.jsのREPLでTypeScriptを試したい —
tsxだけ打てばTypeScript対応のインタラクティブシェルが起動する
インストール
# npm
npm install -D tsx
# yarn
yarn add -D tsx
# pnpm
pnpm add -D tsx
グローバルインストールも可能です:
npm install -g tsx
Note: Node.js 18.0.0以上が必要です。
基本的な使い方
TypeScriptファイルを実行する
// greet.ts
const greet = (name: string): void => {
console.log(`Hello, ${name}!`);
};
greet("World");
npx tsx greet.ts
# => Hello, World!
これだけです。tsconfig.json も tsc によるコンパイルも不要で、TypeScriptファイルがそのまま実行されます。
package.json の scripts で使う
{
"scripts": {
"dev": "tsx watch src/index.ts",
"seed": "tsx src/db/seed.ts",
"migrate": "tsx src/db/migrate.ts"
}
}
よく使うAPI・コマンド
1. tsx <file> — ファイル実行
最も基本的な使い方です。.ts、.tsx、.mts、.cts いずれも実行できます。
npx tsx src/index.ts
Node.jsに渡す引数もそのまま使えます:
npx tsx --env-file=.env src/index.ts
2. tsx watch <file> — ファイル監視&自動再実行
ファイルの変更を検知して自動的に再実行します。開発時に非常に便利です。
npx tsx watch src/server.ts
依存ファイルも含めて監視されるため、import しているモジュールの変更も検知されます。
特定のパスを無視したい場合:
npx tsx watch --ignore ./data src/server.ts
3. tsx — TypeScript REPL
引数なしで実行すると、TypeScript対応のインタラクティブREPLが起動します。
npx tsx
> const add = (a: number, b: number): number => a + b
> add(1, 2)
3
型注釈付きのコードをその場で試せるため、ちょっとした動作確認に最適です。
4. --tsconfig — tsconfig.json の指定
特定の tsconfig.json を使いたい場合に指定できます。
npx tsx --tsconfig tsconfig.scripts.json src/seed.ts
5. Node.js --import フラグとの連携
tsx をローダーとして登録し、Node.js 本体の node コマンドから TypeScript を実行することも可能です。
node --import tsx src/index.ts
この方法は、他のCLIツール(例:node --test)と組み合わせたい場合に有用です。
# Node.js 組み込みテストランナーで TypeScript テストを実行
node --import tsx --test src/**/*.test.ts
類似パッケージとの比較
| 特徴 | tsx | ts-node | Node.js (--strip-types) |
|---|---|---|---|
| セットアップ | ほぼ不要 | tsconfig調整が必要な場合あり | 不要(Node.js 22.6+組み込み) |
| 速度 | ◎(esbuild) | △(TypeScript compiler API) | ◎(ネイティブ) |
| ESM対応 | ◎ シームレス | △ 設定が必要 | ◎ |
| 型チェック | なし(トランスパイルのみ) | あり(オプション) | なし |
| watchモード | 組み込み | 別途 nodemon 等が必要 | --watch で可能 |
| パスエイリアス(paths) | ◎ tsconfig.json の paths を自動解決 | 別途 tsconfig-paths が必要 | 非対応 |
| enum / decorator 等 | ◎ 対応 | ◎ 対応 | ✕ 非対応(型の除去のみ) |
補足: Node.js 22.6以降では
--experimental-strip-typesフラグでTypeScriptの型注釈を除去して実行する機能が組み込まれていますが、enumやpathsエイリアスなどTypeScript固有の構文変換には対応していません。tsxはesbuildによるトランスパイルを行うため、これらの構文も扱えます。
注意点・Tips
型チェックは行われない
tsxはesbuildでトランスパイルするだけで、型チェックは一切行いません。型の安全性を担保するには、別途 tsc --noEmit をCIやpre-commitフックで実行してください。
{
"scripts": {
"typecheck": "tsc --noEmit",
"dev": "tsx watch src/index.ts"
}
}
npx tsx と グローバルインストールの使い分け
npx tsx はプロジェクトローカルの tsx を使うため、チーム開発ではこちらが推奨です。個人のスクリプト実行用途ならグローバルインストールが便利です。
CJS / ESM の混在を気にしなくてよい
tsxはCommonJSとESMの相互運用を内部で処理してくれるため、import / require の混在や "type": "module" の設定で悩む必要がほとんどありません。
本番環境では使わない
tsxはあくまで開発・スクリプト実行用のツールです。本番環境では tsc や esbuild 等でビルドした JavaScript を直接 Node.js で実行してください。ランタイムでのトランスパイルはオーバーヘッドになります。
tsconfig.json の paths が自動解決される
// tsconfig.json
{
"compilerOptions": {
"baseUrl": ".",
"paths": {
"@/*": ["src/*"]
}
}
}
// tsx なら追加設定なしで動く
import { db } from "@/lib/database";
ts-node では tsconfig-paths パッケージが別途必要ですが、tsx では自動的に解決されます。
まとめ
tsxは「TypeScriptファイルをNode.jsで実行する」という日常的なタスクを、設定ゼロ・高速に実現するツールです。esbuildベースのトランスパイルにより起動が速く、watchモードやREPLも組み込まれているため、開発体験が大幅に向上します。型チェックは tsc に任せ、実行は tsx に任せる——この分業が、現代のTypeScript開発における実用的なワークフローです。