4
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

Node.js vs Deno vs Bun:正直どれ使えばいいの?

Last updated at Posted at 2025-07-12

はじめに

JavaScriptのサーバーサイド界隈、最近めちゃくちゃ賑やかですよね。Node.jsだけでも十分だったのに、DenoだBunだと新しいランタイムがどんどん出てきて「また勉強することが増えた...」って思ってる人、私だけじゃないはず。

重要なポイント:DenoとBunは、どちらもNode.jsの「代替」として設計された完全に独立したランタイムです。 つまり、Node.jsをインストールしなくても、それぞれ単体で動作します。これって結構重要な話で、「新しいツールを試すのにNode.jsも必要」みたいな誤解をしている人が多いんですよね。

というわけで、現場で実際に使ってみた感想も交えながら、この3つを正直ベースで比較してみました。

各ランタイムの第一印象

Node.js(ノードジェイエス):安心のベテラン

もう15年も現役で頑張ってるNode.js。正直、これを選んでおけば間違いないという安心感があります。ただ、最近は「古臭い」なんて言われることも...。でも実際のところ、まだまだ現役バリバリです。

Deno(ディーノ):理想主義者

Node.jsの作者が「あー、Node.js作り直したい」って言って作ったのがDeno。セキュリティとかTypeScriptとか、確かに理想的なんですが、現実的には「うーん...」となることも多い。

Bun(バン):新参の暴れん坊

「俺、めっちゃ速いんで」って登場したBun。確かに速いんですよ、マジで。でも新しすぎて不安になることもしばしば。

本音で比較してみた

項目 Node.js Deno Bun
ランタイムエンジン V8(Google) V8(Google) JavaScriptCore(Apple)
学習コスト 低(情報豊富) 中(考え方が違う) 低(Node.js経験者なら)
実際の速度 まあまあ 速い 爆速(マジで)
安定性 抜群 そこそこ 未知数
エコシステム 化け物級 発展中 追いかけてる
TypeScript 設定地獄 いい感じ

実際使ってみた感想

Node.js:やっぱり安定

// 普通にExpressでサーバー立てる
const express = require('express');
const app = express();

app.get('/', (req, res) => {
  res.send('動くことは間違いない');
});

良いところ:

  • 何でもnpmで解決できる(パッケージ数がえげつない)
  • ググればなんでも出てくる
  • 会社で「Node.js使います」って言って反対される確率は低い
  • 枯れてるので変な挙動が少ない

イマイチなところ:

  • TypeScript環境作るのが面倒(webpack、babel、設定ファイル地獄)
  • なんでもできるから逆に迷う
  • パフォーマンスはそこそこ止まり

Deno:思想は素晴らしいけど...

// TypeScriptがそのまま動くのは確かに気持ちいい
import { serve } from "https://deno.land/std@0.200.0/http/server.ts";

const handler = (req: Request): Response => {
  return new Response("設定なしでTypeScript!");
};

serve(handler, { port: 3000 });

良いところ:

  • TypeScriptの体験が最高(設定いらず)
  • セキュリティ機能が本当に安心
  • Web標準に忠実(将来性◎)
  • URL importは慣れると便利

イマイチなところ:

  • npm ecosystemとの相性が微妙(使えるけど...)
  • 権限システムが面倒なときもある(--allow-allしがち)
  • まだ情報が少ない(StackOverflowで解決率低め)
  • 会社で採用するには説得が必要

Bun:速すぎて逆に不安

// これだけでサーバーが立つ(しかも爆速)
const server = Bun.serve({
  port: 3000,
  fetch(req) {
    return new Response("速すぎてちょっと怖い");
  },
});

良いところ:

  • とにかく速い(パッケージインストールが3秒とか意味不明)
  • all-in-oneで楽(バンドラーもテストも全部入り)
  • Node.js互換性が高い(大体そのまま動く)
  • 開発体験が最高

イマイチなところ:

  • 新しすぎて本番投入が怖い
  • Windows対応がまだ微妙
  • 会社で「Bun使います」は相当勇気が必要

速度比較(体感)

実際に同じAPIを3つで作って測ってみました:

# package install(React + TypeScript環境)
Node.js:  25秒(長い...コーヒータイム)
Deno:     なし(URL importなので)
Bun:      3秒(は?って感じ)

# サーバー起動時間
Node.js:  200ms(普通)
Deno:     80ms(速い)
Bun:      30ms(一瞬)

# Hello World API レスポンス
Node.js:  普通に速い
Deno:     結構速い
Bun:      異次元(req/s が桁違い)

Bunの速度は本当にヤバいです。開発中にホットリロードが一瞬すぎて「あれ、保存できてる?」ってなります。

現実的な選び方

Node.js を選ぶべき人

  • 「安定が一番」派
  • 既存プロジェクトの拡張
  • チーム全員Node.js経験者
  • 「新しいもの追いかけるの疲れた」派

正直、これを選んでおけば間違いないです。15年の実績は伊達じゃない。

Deno を選ぶべき人

  • 「TypeScript愛が強い」派
  • 「セキュリティ大事」派
  • 「Web標準に従いたい」派
  • 新規プロジェクト&説得力がある人

個人的には一番思想が好きなんですが、現実的にはハードルが高いことも。

Bun を選ぶべき人

  • 「速度こそ正義」派
  • 「新しいもの好き」派
  • 個人開発・小規模チーム
  • 「設定ファイル書きたくない」派

速度に魅力を感じるなら、とりあえず触ってみる価値はあります。

本音の使い分け

個人開発なら

趣味プロジェクト: Bun(楽しい)
ポートフォリオ: Deno(モダンアピール)
副業案件: Node.js(安全)

会社なら

新規サービス: Node.js(安定志向)
実験的プロジェクト: Deno(説得できれば)
内部ツール: Bun(速度重視)
レガシー改修: Node.js(一択)

2025年のリアルな状況

Node.js: まだまだ王者。求人数も圧倒的。
Deno: 徐々に増えてるけど、まだニッチ。
Bun: スタートアップや先進的な企業で採用が増加中。速度を武器に存在感を示してる。

転職を考えてるなら、Node.jsのスキルは必須。DenoやBunは「知ってると良い」レベルです。

まとめ:結局どれを選ぶ?

個人的な推奨度:

  • 初心者: Node.js 一択(情報量が違う)
  • TypeScript好き: Deno(ストレスフリー)
  • 速度厨: Bun(中毒性あり)
  • 現場エンジニア: 用途によるけど Node.js が安牌

正直なところ、どれも良いツールです。ただ、現実的には:

  1. Node.js でしっかり基礎を固める
  2. 余裕ができたら Deno か Bun を触ってみる
  3. プロジェクトの要件に応じて選択

これが一番バランス良いかなと思います。

新しいツールに飛びつくのも楽しいですが、まずは手堅く実績を積むのが大事。そのうえで「ここは Bun の速度が欲しい」とか「ここは Deno のセキュリティが必要」とか判断できるようになれば理想的ですね。

あ、あと一つ本音を言うと...どのランタイムを選んでも、結局はコードの品質の方が大事です(当たり前だけど)。

Bunを実際に使ってみよう

せっかくなので、Bunを試してみたい人向けに基本的な使い方をまとめておきます。

インストール方法

# macOS/Linux(一番簡単)
curl -fsSL https://bun.sh/install | bash

# Homebrew(macOS)
brew tap oven-sh/bun
brew install bun

# npm経由(皮肉だけど動く)
npm install -g bun

# Windows(PowerShell)
powershell -c "irm bun.sh/install.ps1 | iex"

インストール後、ターミナルを再起動して確認:

bun --version

基本的な使い方一覧

プロジェクト管理

# 新しいプロジェクト作成
bun init

# 既存のプロジェクトにBunを導入
cd your-project
bun install  # package.jsonがあれば自動で依存関係をインストール

パッケージ管理

# パッケージのインストール
bun install                    # package.jsonの依存関係を全てインストール
bun add react                  # パッケージを追加
bun add -d typescript          # 開発依存として追加
bun add -g some-cli-tool       # グローバルインストール

# パッケージの削除
bun remove react

# パッケージの更新
bun update
bun update react              # 特定のパッケージのみ更新

ファイル実行

# JavaScriptファイルを実行
bun run script.js

# TypeScriptファイルを直接実行(トランスパイル不要)
bun run app.ts

# package.jsonのスクリプト実行
bun run dev
bun run build
bun run test

# または短縮形
bun dev
bun build
bun test

バンドル作成

# 基本的なバンドル
bun build ./src/index.ts --outdir ./dist

# 最適化されたバンドル(minify付き)
bun build ./src/index.ts --outdir ./dist --minify

# ブラウザ向けバンドル
bun build ./src/index.ts --outdir ./dist --target browser

# 実行可能ファイルとしてコンパイル
bun build ./src/index.ts --compile --outfile myapp

# 複数のエントリーポイント
bun build ./src/index.ts ./src/worker.ts --outdir ./dist

テスト実行

# 全テストを実行
bun test

# 特定のファイルをテスト
bun test src/utils.test.ts

# watchモードでテスト
bun test --watch

# カバレッジ付きでテスト
bun test --coverage

実践的な例:Reactアプリを作ってみる

# Reactプロジェクトの作成
bun create react-app my-react-app
cd my-react-app

# 依存関係のインストール(爆速)
bun install

# 開発サーバー起動
bun run dev

Node.jsプロジェクトからの移行

既存のNode.jsプロジェクトをBunに移行するのは超簡単:

# 既存プロジェクトのディレクトリで
rm -rf node_modules  # 既存のnode_modulesを削除
rm package-lock.json # ロックファイルも削除(あれば)

bun install         # Bunでインストール(爆速で終わる)
bun run dev         # 普通に動く(はず)

よく使うBunの便利機能

# パッケージ情報を確認
bun pm ls           # インストール済みパッケージ一覧
bun pm cache        # キャッシュ情報

# 依存関係の問題をチェック
bun install --dry-run

# ホットリロード付きで実行
bun --hot script.ts

# 静的ファイルサーバーを一瞬で立てる
bunx serve ./public

つまづきポイントと対処法

Windows使いの場合:

  • まだ実験的なので、WSL2を使う方が安定
  • PowerShellでインストールがうまくいかない場合は、WSL2でLinux版を使う

既存プロジェクトで動かない場合:

# デバッグ情報を出力
bun --verbose run script.js

パッケージが見つからない場合:

  • npm registryを明示的に指定
bun install --registry https://registry.npmjs.org/

これで基本的なBunの使い方はマスターできるはず。速度にビックリすること間違いなしです!

参考リンク

4
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
4
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?