TechBlog

Node.jsでTypeScriptがそのまま動く時代が来た:ネイティブTSサポート解説

by あくえり
#nodejs #typescript #javascript #ランタイム
目次

ts-nodeなしでTypeScriptが動く

Node.js 25.2.0(2025年11月リリース)で、TypeScriptファイルの直接実行がstable(安定版)に昇格しました。これまでts-nodetsxが必要だった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-nodetsx
追加インストール不要必要必要
型チェックなしあり(オプション)なし
tsconfig.json読まない読む読む
pathsエイリアス非対応対応対応
enum要フラグ対応対応
起動速度最速遅い速い

どんな場面で使える?

向いている場面

  • スクリプト実行: 使い捨てのスクリプトや自動化ツール
  • シンプルなCLIツール: 型の恩恵を受けつつ素早く実行
  • プロトタイピング: アイデアの検証段階

まだts-node/tsxが必要な場面

  • tsconfig.jsonのpathsエイリアスを多用するプロジェクト
  • enumを使っているプロジェクト(transformフラグをつければ動くが)
  • 型チェックもランタイムで行いたい場合

経緯:Node.js 23.6からの歩み

  1. Node.js 22.6 (2024年): --experimental-strip-typesフラグで実験的に導入
  2. Node.js 23.6 (2025年初頭): フラグなしで有効に(ただしexperimental)
  3. Node.js 25.2.0 (2025年11月): stable(安定版)に昇格

段階的に安定化が進められてきた機能で、十分な検証を経ています。

まとめ

Node.jsのネイティブTypeScriptサポートは、TypeScript開発の敷居をさらに下げる大きな変化です。特にスクリプトや小規模ツールの実行では、追加パッケージなしで.tsファイルを直接実行できるのは非常に便利です。ただし、大規模プロジェクトではtsconfig.jsonの機能が必要な場面も多いので、用途に応じて使い分けましょう。


参考リンク:

共有: