tsx の使い方

TypeScript Execute (tsx): Node.js enhanced with esbuild to run TypeScript & ESM files

v4.21.034.6M/週MITビルドツール
AI生成コンテンツ

この記事はAIによって生成されました。内容の正確性は保証されません。最新の情報は公式ドキュメントをご確認ください。

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.jsontsc によるコンパイルも不要で、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

類似パッケージとの比較

特徴tsxts-nodeNode.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の型注釈を除去して実行する機能が組み込まれていますが、enumpaths エイリアスなど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はあくまで開発・スクリプト実行用のツールです。本番環境では tscesbuild 等でビルドした JavaScript を直接 Node.js で実行してください。ランタイムでのトランスパイルはオーバーヘッドになります。

tsconfig.jsonpaths が自動解決される

// 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開発における実用的なワークフローです。