Node.jsでTypeScriptがそのまま動く時代が来た:ネイティブTSサポート解説
by あくえり
#nodejs
#typescript
#javascript
#ランタイム
目次
ts-nodeなしでTypeScriptが動く
Node.js 25.2.0(2025年11月リリース)で、TypeScriptファイルの直接実行がstable(安定版)に昇格しました。これまでts-nodeやtsxが必要だったTypeScriptの実行が、Node.js本体だけで完結します。
# これだけで.tsファイルが実行できる
node app.ts
仕組み:Type Stripping(型ストリッピング)
Node.jsのネイティブTypeScriptサポートはType Stripping方式で動作します。
やっていることはシンプルで、型に関する構文をホワイトスペースに置換してから実行するだけです。
// 元のコード
function greet(name: string): string {
return `Hello, ${name}`;
}
// Type Stripping後(イメージ)
function greet(name ) {
return `Hello, ${name}`;
}
ポイントは、型チェックは一切行わないということ。型チェックはエディタやCIで別途行う前提です。
実際の使い方
基本的な実行
node app.ts
Node.js 23.6以降ならフラグなしで動きます。Node.js 25.2.0以降ではstable機能として安定しています。
注意点:tsconfig.jsonは読まない
Node.jsのType Strippingはtsconfig.jsonを読みません。以下の点に注意が必要です。
pathsエイリアス(@/componentsのような記法)は使えないbaseUrlの設定は反映されないtargetの設定に関わらず、Node.jsの対応するES機能がそのまま使われる
enumには--experimental-transform-typesが必要
TypeScriptのenumはJavaScriptへのコード変換が必要なため、Type Strippingだけでは対応できません。
# enumを含むコードを実行する場合
node --experimental-transform-types app.ts
const enumやstring union型で代替できるなら、そちらの方がシンプルです。
ts-node / tsx との比較
| 項目 | Node.js ネイティブ | ts-node | tsx |
|---|---|---|---|
| 追加インストール | 不要 | 必要 | 必要 |
| 型チェック | なし | あり(オプション) | なし |
| tsconfig.json | 読まない | 読む | 読む |
| pathsエイリアス | 非対応 | 対応 | 対応 |
| enum | 要フラグ | 対応 | 対応 |
| 起動速度 | 最速 | 遅い | 速い |
どんな場面で使える?
向いている場面
- スクリプト実行: 使い捨てのスクリプトや自動化ツール
- シンプルなCLIツール: 型の恩恵を受けつつ素早く実行
- プロトタイピング: アイデアの検証段階
まだts-node/tsxが必要な場面
tsconfig.jsonのpathsエイリアスを多用するプロジェクト- enumを使っているプロジェクト(transformフラグをつければ動くが)
- 型チェックもランタイムで行いたい場合
経緯:Node.js 23.6からの歩み
- Node.js 22.6 (2024年):
--experimental-strip-typesフラグで実験的に導入 - Node.js 23.6 (2025年初頭): フラグなしで有効に(ただしexperimental)
- Node.js 25.2.0 (2025年11月): stable(安定版)に昇格
段階的に安定化が進められてきた機能で、十分な検証を経ています。
まとめ
Node.jsのネイティブTypeScriptサポートは、TypeScript開発の敷居をさらに下げる大きな変化です。特にスクリプトや小規模ツールの実行では、追加パッケージなしで.tsファイルを直接実行できるのは非常に便利です。ただし、大規模プロジェクトではtsconfig.jsonの機能が必要な場面も多いので、用途に応じて使い分けましょう。
参考リンク: