Upgrade to Pro — share decks privately, control downloads, hide ads and more …

Node vs Deno vs Bun 〜推しランタイムを見つけよう〜

Node vs Deno vs Bun 〜推しランタイムを見つけよう〜

Avatar for すずとも

すずとも

January 09, 2026
Tweet

More Decks by すずとも

Other Decks in Technology

Transcript

  1. 自己紹介 すずとも / subname: kamekyame 株式会社 jig.jp フロントエンドエンジニア 福井県 出身

    ???(←JSランタイムが入る)、Angular 2 @SuzuTomo2001 @kamekyame kamekyame.com
  2. Node, Deno, Bun …の前に JavaScript®(JS)知っていますか? • ブラウザ用に開発され、ECMAScript(言語仕様)を満たした言語 • Java ≠

    JavaScript • ブラウザによって エンジン(実行環境)が異なる ◦ Google Chrome → V8 ◦ Firefox → SpyderMonkey ◦ Safari → JavaScriptCore 4
  3. Node, Deno, Bun …の前に TypeScript(TS)知っていますか? • 「TypeScript is JavaScript with

    syntax for types.」(引用) ◦ 訳)TypeScript は型構文を持つ JavaScript ◦ JavaScript のスーパーセット • Microsoft が開発(オープンソース) ◦ https://github.com/microsoft/TypeScript • コンパイル・開発 時に型チェックができる • 実行するには JS に変換(トラスパイル)する必要がある ◦ 型構文は 無視 される(≠ 型情報が JS に変換される) 5
  4. Node, Deno, Bun とは 三大 JS(/TS)ランタイム • JS を動かすためのソフトウェア •

    JS をサーバサイドでも使えるようにしたもの ◦ サーバサイド に限らず CLIツール・デスクトップアプリ・スマホアプリ • 実行速度… 流石に C, Rust には叶わない(とはいえ気にするほどでもない) どれも JS(/TS)を実行できる 固有の機能、取り巻く環境 など細かい違いがある 7
  5. 👝 持って帰ってほしいこと JS ランタイムを知らない方 → JS ランタイムの概要を Node.js を使ってきた方 → Deno や Bun との違いを

    3つをすでに知っている方 → さらにディープな違いを とにかく比較をしていきます! 最後に僕の推しランタイムを紹介(布教) 8
  6. 基本情報 14 読み方 開発者 エンジン 開発言語 Node Deno Bun HP

    開発元 ノード ジェイエス Ryan Dahl OpenJS Foundation V8 C++, JS https://nodejs.org/ ディーノ(dee-no) Ryan Dahl Deno Land Inc. V8 Rust, JS, TS https://deno.com/ バン Jarred Sumner Anthropic JavaScriptCore Zig, JS, TS https://bun.com/
  7. LTS 周期 初回・最新リリース・LTS 15 Node Deno Bun 偶数バージョン 規則性なし -

    初回リリース日 一般公開 から 30ヶ月 規則性なし - LTS 期間 24.x 2.5.x(※2) - 最新 LTS(※1) ※1 LTS = Long Term Support ※2 Deno の LTS サポートは終了する見込み(参考) 2009.5.28 (v0.0.1) 2019.8.23 (v0.1.0) 2021.9.15 (v0.0.0-10) 最新リリース日 2025.11.17 (v25.2.1) 2026.1.5 (v2.6.4) 2025.12.18 (v1.3.5)
  8. 速度比較 ※ Bun 調べ(引用) 16 Express 1位:Bun 2位:Deno 3位:Node Postgres

    1位:Bun 2位:Node 3位:Deno WebSocket 1位:Bun 2位:Deno 3位:Node
  9. 各ツール Package Manager 17 Lint Format Bundle Node Deno Bun

    × (npm install, ...) Benchmark × × × × ◦ deno add, ... ◦ deno lint ◦ deno fmt ◦ deno bundle ◦ deno bench ◦ bun install, ... × × ◦ bun build ×
  10. TypeScript 対応 18 Node Deno Bun △(※) node main.ts ※

    Enum や Namespace の使用にはフラグが必要 → node --experimental-transform-types main.ts ◦ deno run main.ts ◦ bun main.ts 実行 型チェック × ◦ deno check main.ts × トランスパイラ SWC(WASM) SWC(Rust) 独自実装
  11. モジュールシステム対応 19 Node Deno Bun ◦ △ 拡張子 .cjs, .cts

    のみ ◦ CommonJS ◦ ◎ URL Import にも対応 ◦ CommonJS ESModule const fs = require("node:fs") import * as fs from "node:fs" ESModule
  12. 環境変数ファイル 読み込み 20 Node Deno Bun ◦ --env-file ◎ 自動(※)

    ◦ --env-file=... --env-file-if-exists=... ◦ --env-file=... (Node の if-exists 相当) △ --env-file=.env .env 特定ファイル ◦ --env-file=... ※ NODE_ENV に合わせて .env.production, .env.development, .env.test を読み込む API_BASE_URL=https://api.example.com API_ENDPOINT=${API_BASE_URL}/v1/users × ◦ 変数展開 ◦
  13. テストツール 21 Node Deno Bun node:test node:assert Deno.test() jsr:@std/testing jsr:@std/assert

    jsr:@std/expect コマンド 主な使用関数 パッケージ bun:test ◦ node --test ◦ deno test ◦ bun test
  14. ランタイム本体サイズ・SEA (※) サイズ 22 Node Deno Bun 121.8 MB 88

    MB 57.1 MB 本体 120.5 MB 70.4 MB 57.1 MB SEA(※) SEA作成方法 sea-config.json 作成 node 本体のコピー postject で blob 注入 署名つけ外し deno compile ... bun build --compile ... ※ SEA = Single Excutable Application(単一実行可能ファイル) console.log("Hello, World!"); コンパイルするファイルの中身
  15. カスタムスクリプト(npm scripts のようなもの) 23 Node Deno Bun × (npm run

    ...) ◦ deno task ... ◦ bun run ... - ◦ deno_task_shell cp, mv, rm, mkdir, pwd, sleep, echo, cat, exit, head, unset, xargs クロスプラット フォーム対応 ◦ bun shell ls, cd, rm, … リダイレクト、パイプ、変数、 Shebang、Glob、… リダイレクト、パイプ、変数、sh ファイル、… 対応 - deno.json > "tasks" 記述場所 package.json > "scripts"
  16. Node • 15 年以上前からある古参 JS ランタイム • 実行以外の部分は基本、外部ツール任せ ◦ npm/yarn/pnpm,

    prettier, eslint, biome, tsc, … • npm にある パッケージ資産 も強力 ◦ React, Vue, Angular, Next.js, Vite, … ◦ Jest, Vitest, Playwright, … ◦ Electron, React Native, … • 実運用環境において 実績は抜群 25
  17. Deno • Node の作者(Ryan Dahl)が Node の反省を活かして作ったランタイム • "node".split("").sort().join("") //

    = "deno" • Web 標準 ◦ Stage3 Temporal API など先行実装している部分もある • セキュアなランタイム ◦ デフォルトはファイル・ネットワーク・環境変数など何もアクセスできない • ゼロコンフィグ ◦ 設定不要で TS、フォーマット、リントの機能が利用可能 ◦ deno.json 等でカスタマイズも可能 26 小ネタ:登場した当時、"Deno" で検索すると 札幌の担々麺専門店「175°DENO担々麺」が出てくるので困った
  18. Bun • 速さ と Node 互換性 を意識したランタイム ◦ 速さに関しては諸説ある ◦

    Node API 互換性は 95%! • 単なる パッケージマネージャ としても使用可能 ◦ 実行自体は Node でも OK ◦ パッケージインストールの速度は群を抜いて早い(npm/yarn/pnpm 比較) • v1.0 は Windows 非対応 だったが、v1.1 ですぐ対応された • SQL・S3 クライアントなどに built-in で対応 ◦ PostgreSQL, MySQL, SQLite, Amazon S3, Redis 27
  19. Deno 推しポイント ① つながりがある & かわいい 福井 といえば 恐竜 といえば

    Deno 福井 といえば 越前がに といえば カニ といえば Rust といえば Deno ロゴ・マスコットがかわいい 31 Original v1 v2 v1時代のドキュメントローディング表示 v1 rev.2 引用元 Original, v1 Artwork | Deno v1 rev.2 https://github.com/denoland/dotland/pull/1836 v2 Branding | Deno ローディング Denoで「画像変換&加工」アラカルト - Zenn
  20. Deno 推しポイント ② ゼロコンフィグ & ツールも豊富 • TS を書くまでの敷居は圧倒的に低い ◦

    main.ts を作って、deno run main.ts で実行するだけ • フォーマット・リント込み ◦ どこでも deno fmt, deno lint ◦ JSON, Markdown などフォーマットに対応しているファイルは多い • Jupyter で動く JS/TS カーネル が 標準搭載 ◦ Jupyter で JS/TS が実行できる ◦ コードと実行結果を Jupyter Notebook 形式で保存 → GitHub にプッシュ ▪ GitHub 上でプレビュー可能 ▪ 後から見返すのに便利 32
  21. Deno 推しポイント ③ Deno Deploy • Deno が動く サーバレスホスティングサービス •

    基本無料 • GitHub リポジトリからのデプロイが簡単 ◦ GitHub Actions の yml ファイルがなくても Deno Deploy コンソール上で設定可能 • データベース(Deno KV, PostgreSQL)も使える • Telemetry 表示や Sandbox、Tunnel など 機能が豊富 33
  22. Deno 推しポイント ④ Deno 以外の活動 • パッケージレジストラとして JSR(The JavaScript Registry)を作った

    ◦ TS コードを直接 Publish できる ◦ node などで使用する際には JS へのビルドを JSR 側でやってくれる • JS ランタイムの相互運用を推進する WinterCG を創設(現在の WinterTC) • 公開パッケージ(OSS) ◦ pkg:cargo/rusty_v8 ▪ Deno 本体で使用している V8 の Rustラッパー ◦ pkg:cargo/deno_task_shell ▪ deno task で使用している クロスプラットフォーム Shell ◦ jsr:@std 系 ▪ Deno 標準ライブラリ。JSR を介して Node, Bun でも使用可能 34
  23. Deno まだまだ話したい! • URL Import の仕組みが結局うまく行かなかった ◦ Node の反省から v1

    時代は URL Import ベースのパッケージシステムを推していた ▪ Deno 3rd Party ◦ ただし、外部がホストする URL だと不変性・信頼性・重複読み込みという問題があった ◦ package.json, package-lock.json, node_modules という仕組みはうまく作られていたのかも • NPM サポートをしてしまった ◦ 当初は npm は対応しない方向 ▪ いつまで経っても Deno の普及が進まない… ▪ オプションを付けたときだけ cjs が使えたりちょっと npm 互換に ▪ node 標準ライブラリを対応 ▪ npm 対応 ◦ 型のある・ESM だけの新しい世界…とはならなかった Ask the Speaker, 懇親会 で話しましょう!(Deno に限らず) 35
  24. まとめ Node, Deno, Bun どれも JS を実行できるソフトウェア 固有の機能、取り巻く環境が違う どのランタイムにもいいところがあって どれが最適かはユースケースによる

    日々アップデートされているので1年後には変わっているかも 気になる方はぜひウォッチしてみてください! 37