Node.js 24 で TypeScript がそのまま動く時代になってた話(tsx いらずで快適)
Node.js 22 で追加された型除去(strip-types)機能が Node.js 24 ではデフォルトになりました。tsx や ts-node なしで .ts ファイルを直接実行できる環境がどれだけ快適か、試してみた体験を書きます。
🙌 結論から
Node.js 24(2026年現在のLTS)では、.ts ファイルを node コマンドでそのまま実行できます!
tsx や ts-node のインストールが不要で、開発スクリプトの依存関係がかなりスッキリしました(^o^)/
ただし、型の除去(strip)のみで型チェックは行いません。
型エラーを事前に検出したいなら tsc --noEmit を別途走らせる必要があります。
💡 Node.js での TypeScript 実行の変遷
少し前まで .ts ファイルを Node.js で直接実行するには、ts-node や tsx を devDependencies に追加するのが定番でした。
# 以前のやり方
npx tsx src/scripts/setup.ts
これが Node.js 22.6.0 で --experimental-strip-types フラグとして実験的に導入され、Node.js 23 ではフラグなしで使えるようになりました!
そして Node.js 24(現在の LTS)では、.ts ファイルを指定するだけで自動的に型除去が走るようになっています。
# Node.js 24 では追加フラグなしで動く
node src/scripts/setup.ts
これだけで動く時代がきました(^^)
🔧 実際に試してみた
個人開発プロジェクトで、package.json の scripts から tsx を外して試してみました。
変更前:
{
"scripts": {
"sns:prepare": "tsx sns/generate_post.ts"
}
}
変更後:
{
"scripts": {
"sns:prepare": "node sns/generate_post.ts"
}
}
tsx への依存が消えてすっきりしました!
ただし enum を使ったコードや、TypeScript 独自の変換が必要な構文(const enum など)は型除去の対象外で、エラーになる場合があります。
そういったコードには --experimental-transform-types フラグが必要です。
自分のプロジェクトは enum をほぼ使っていないので、ほぼそのまま移行できました(^_^)
👀 使ってみた感想
一番助かったのは、軽量なユーティリティスクリプトとの相性がかなりよい点です。
CI のプリスクリプトやローカル開発ツールなど、型チェックよりも「動けばいい」場面が結構あります。
そういった場面で tsx を入れずに済むのはありがたいですね。
一方で、プロジェクトのメインコードをすべて tsx から切り替えるかというと、まだ様子見の部分もあります(・_・;)
型チェックをしないままコードが動いてしまうので、CI で tsc --noEmit を必ず走らせる仕組みとセットにする方が安心です。
個人的には「tsx から完全移行」ではなく「新規スクリプトはフラグなしで書けるようになった」という使い方が、今のところ一番しっくりきています。
🔧 —experimental-transform-types フラグでenumも動かしてみた
enum を使っているスクリプトはエラーになる、と書いた点について、実際に試してみました。
デフォルトの型除去(strip-types)は「型注釈をただ消すだけ」の処理なので、enum のように実行時に実体を持つ構文は対象外です。
// これは strip-types だけだとエラーになる
enum Status {
Active,
Archived,
}
これを動かすには --experimental-transform-types フラグを付けます。
node --experimental-transform-types src/scripts/with-enum.ts
このフラグを使うと、enum や namespace、パラメータプロパティ(constructor(private name: string) のような書き方)まで変換してくれるようになります。
ただし公式ドキュメントにも実験的機能と明記されている通り、まだ安定版の挙動ではない点は意識しておいた方がよさそうです。
私は結局、新しく書くスクリプトでは enum の代わりに as const のオブジェクトを使うように書き方を変えました。
const Status = {
Active: 'active',
Archived: 'archived',
} as const;
type Status = (typeof Status)[keyof typeof Status];
こうしておけば --experimental-transform-types フラグなしでも動きますし、型としても十分実用的です。
「フラグを増やして無理に enum を使い続ける」より、**「フラグなしで動く書き方に寄せる」**方が、この機能の恩恵を素直に受けられると感じています(・∀・)
パパ系Webエンジニア〜愛用ガジェット一覧 🛍️
この記事を書いている作業環境のガジェットを楽天ROOMにまとめています ✨ 在宅エンジニアのデスク作りの参考にどうぞ 🙌
🙌 まとめ
- Node.js 24(現在のLTS)では
.tsファイルをフラグなしで直接実行できる tsxやts-nodeの依存を外せて、セットアップがかなりシンプルになる- 型の除去のみで型チェックはしないため、
tsc --noEmitとセットで使うのがおすすめ enumを使ったコードは別途対応が必要
開発スクリプトやユーティリティを TypeScript で書いている方は、一度 tsx なしで動かしてみてください🙌
※ Node.jsのLTSスケジュールや機能は今後も更新されます。最新情報は Node.js公式サイト をご確認ください👀