Share
Embed
Node vs Deno vs Bun 〜推しランタイムを見つけよう〜
2026.1.10 BuriKaigi 2026 Day2 Room 203 マス 登壇資料
Node vs Deno vs Bun ~推しランタイムを見つけよう~ by すずとも | トーク | BuriKaigi 2026 #burikaigi - fortee.jp
すずとも
January 09, 2026
Transcript
38 slides
-
Node vs Deno vs Bun 〜推しランタイムを見つけよう〜 2025.1.10 BuriKaigi 2026 Day2
- Room 203 マス すずとも / kamekyame -
自己紹介 すずとも / subname: kamekyame 株式会社 jig.jp フロントエンドエンジニア 福井県 出身
???(←JSランタイムが入る)、Angular 2 @SuzuTomo2001 @kamekyame kamekyame.com -
Node, Deno, Bun …の前に JavaScript®(JS)知っていますか? • ブラウザ用に開発され、ECMAScript(言語仕様)を満たした言語 • Java ≠
JavaScript • ブラウザによって エンジン(実行環境)が異なる ◦ Google Chrome → V8 ◦ Firefox → SpyderMonkey ◦ Safari → JavaScriptCore 4 -
Node, Deno, Bun …の前に TypeScript(TS)知っていますか? • 「TypeScript is JavaScript with
syntax for types.」(引用) ◦ 訳)TypeScript は型構文を持つ JavaScript ◦ JavaScript のスーパーセット • Microsoft が開発(オープンソース) ◦ https://github.com/microsoft/TypeScript • コンパイル・開発 時に型チェックができる • 実行するには JS に変換(トラスパイル)する必要がある ◦ 型構文は 無視 される(≠ 型情報が JS に変換される) 5 -
Node, Deno, Bun とは 三大 JS(/TS)ランタイム • JS を動かすためのソフトウェア •
JS をサーバサイドでも使えるようにしたもの ◦ サーバサイド に限らず CLIツール・デスクトップアプリ・スマホアプリ • 実行速度… 流石に C, Rust には叶わない(とはいえ気にするほどでもない) どれも JS(/TS)を実行できる 固有の機能、取り巻く環境 など細かい違いがある 7 -
👝 持って帰ってほしいこと JS ランタイムを知らない方 → JS ランタイムの概要を Node.js を使ってきた方 → Deno や Bun との違いを
3つをすでに知っている方 → さらにディープな違いを とにかく比較をしていきます! 最後に僕の推しランタイムを紹介(布教) 8 -
SNS(X) Node Deno Bun 12 @deno_land @nodejs @bunjavascript 7 万フォロワー
9.6 万フォロワー 90.2 万フォロワー -
基本情報 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/ -
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) -
速度比較 ※ Bun 調べ(引用) 16 Express 1位:Bun 2位:Deno 3位:Node Postgres
1位:Bun 2位:Node 3位:Deno WebSocket 1位:Bun 2位:Deno 3位:Node -
各ツール 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 × -
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) 独自実装 -
モジュールシステム対応 19 Node Deno Bun ◦ △ 拡張子 .cjs, .cts
のみ ◦ CommonJS ◦ ◎ URL Import にも対応 ◦ CommonJS ESModule const fs = require("node:fs") import * as fs from "node:fs" ESModule -
環境変数ファイル 読み込み 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 × ◦ 変数展開 ◦ -
テストツール 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 -
ランタイム本体サイズ・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!"); コンパイルするファイルの中身 -
カスタムスクリプト(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" -
Node • 15 年以上前からある古参 JS ランタイム • 実行以外の部分は基本、外部ツール任せ ◦ npm/yarn/pnpm,
prettier, eslint, biome, tsc, … • npm にある パッケージ資産 も強力 ◦ React, Vue, Angular, Next.js, Vite, … ◦ Jest, Vitest, Playwright, … ◦ Electron, React Native, … • 実運用環境において 実績は抜群 25 -
Deno • Node の作者(Ryan Dahl)が Node の反省を活かして作ったランタイム • "node".split("").sort().join("") //
= "deno" • Web 標準 ◦ Stage3 Temporal API など先行実装している部分もある • セキュアなランタイム ◦ デフォルトはファイル・ネットワーク・環境変数など何もアクセスできない • ゼロコンフィグ ◦ 設定不要で TS、フォーマット、リントの機能が利用可能 ◦ deno.json 等でカスタマイズも可能 26 小ネタ:登場した当時、"Deno" で検索すると 札幌の担々麺専門店「175°DENO担々麺」が出てくるので困った -
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 -
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 -
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 -
Deno 推しポイント ③ Deno Deploy • Deno が動く サーバレスホスティングサービス •
基本無料 • GitHub リポジトリからのデプロイが簡単 ◦ GitHub Actions の yml ファイルがなくても Deno Deploy コンソール上で設定可能 • データベース(Deno KV, PostgreSQL)も使える • Telemetry 表示や Sandbox、Tunnel など 機能が豊富 33 -
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 -
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 -
まとめ Node, Deno, Bun どれも JS を実行できるソフトウェア 固有の機能、取り巻く環境が違う どのランタイムにもいいところがあって どれが最適かはユースケースによる
日々アップデートされているので1年後には変わっているかも 気になる方はぜひウォッチしてみてください! 37