最終更新:
Node.js・Bun・Denoの違いは?TypeScriptと互換性で選ぶ
3つともJavaScriptを動かすの?
既存のNode.jsアプリは、そのまま移せる?
TypeScriptはどれでも直接動くんだよね?
動けば型も正しいってこと?
そこは別だよ。Bunも実行時に型検査はしない。Denoも通常のdeno runと型検査は別で、deno checkやdeno run --checkで確認する。Node.jsやBunでは、たとえばTypeScriptのtsc --noEmitをCIへ入れて、実行できても型が間違ったコードを見つけよう。
Denoなら安全なパッケージだけ動くの?
Node.jsには権限を制限する機能がないの?
あるよ。--permissionで有効にするPermission Modelが用意されている。ただし公式には、信頼したコードの意図しない操作を防ぐ仕組みで、悪意あるコードを安全に隔離する保証はないと説明されている。Denoと同じ安全性だとも決めつけないでね。
Bunは必ず速いの?
結局どこから選べばいい?
比較するときにそろえる条件
| 確認点 | Node.js | Bun | Deno |
|---|---|---|---|
| TypeScript実行 | 組み込みの型除去には構文上の制約 | TS・TSXを変換して実行 | TSを変換して実行 |
| 型検査 | tscなどを別途実行 | tscなどを別途実行 | deno checkを利用できる |
| 既存npm資産 | 対象Node.js版での対応を確認 | 公式互換表と実アプリで確認 | npm対応・権限・アドオンを確認 |
| 移行の単位 | 現行環境の基準 | パッケージ管理だけの採用も可能 | ツール群・実行環境の採用範囲を決める |
tsxとBunは同じもの?
tsxはNode.jsでTypeScriptを実行するためのツール、Bunはランタイムも含むツールキットです。TypeScriptを実行したいだけなのか、本番の実行環境も替えたいのかを先に分けると比較しやすくなります。型検査の有無も別に確認してください。
移行前には、テストだけでなく起動・終了処理、ファイル操作、環境変数、DB接続、エラー監視を実際のデプロイ環境で確認します。最新版の番号や「互換率99%」だけでは、自分のアプリが動く根拠になりません。
TypeScriptの「実行」と「型検査」を試す
次をexample.tsに保存します。型注釈と値が食い違う、意図的に型が間違った例です。
const count: number = "3";
console.log(count);
型検査をしない実行では型注釈が取り除かれ、文字列の3を表示できます。一方、型検査ではnumberに文字列を代入した誤りが報告されます。
| 目的 | Node.js | Bun | Deno |
|---|---|---|---|
| このファイルを実行する | node example.ts | bun run example.ts | deno run example.ts |
| 型の誤りを検出する | tsc --noEmit example.ts | tsc --noEmit example.ts | deno check example.ts |
Node.jsのこの実行例は組み込みの型除去が既定で使える22.18以降を想定し、enumやJSXなどは含みません。tscはTypeScriptを導入した環境で使います。実プロジェクトでは、対象ランタイムに合う型定義と設定もそろえてください。
選び方のまとめ
既存のNode.jsアプリなら互換性と運用を基準にし、Bunの統合ツールやDenoの権限設計が解決したい課題に合うか試します。パッケージのインストールだけをBunに替えることと、本番の実行環境を替えることは別です。採用後も型検査・動作テストを残しましょう。
参考資料
確認日:2026年10月4日。製品の仕様・料金・対応環境は導入時にも確認してください。
- Node.js: TypeScript:型除去の対応範囲と型検査・tsconfigの制約。
- Node.js: Permissions:権限機構の存在と悪意あるコードへの保証の限界。
- Bun: Node.js compatibility:APIごとの互換状況。
- Bun: TypeScript:TypeScript実行と型検査の区別。
- Deno: Security and permissions:既定の権限と共有範囲。
- Deno: Node and npm compatibility:npmとネイティブアドオンへの対応。
- Deno: TypeScript:deno checkと通常実行の違い。