この記事の要点
• Bun 1.3でBun.serveのHTTP/2・WebSocket対応が安定版に
• ネイティブSQLite・PostgreSQLドライバ内蔵により外部依存ゼロ
• Node.js互換性テストで99.2%のパススレート達成(npm互換含む)
• 起動速度はNode.js比3倍、メモリ使用量は平均40%削減
Bunとは何か
Bunは2022年に登場したJavaScript/TypeScriptランタイムで、Zigで実装されたJavaScriptCoreを基盤に、パッケージマネージャー・バンドラー・テストランナーを一体化したオールインワンツールキットです。Node.jsやDenoと並ぶ第三の選択肢として、2026年時点で本番環境での採用が急増しています。
Bun 1.3は2026年3月にリリースされ、累計ダウンロード数1億2000万回(npm Registryアクセスログ、2026年4月時点)を突破しました。以前のBun 2.0で大規模リファクタリングが完了し、1.3では実用性と安定性の強化に注力しています。
Bun 1.3の主要機能
1. Bun.serve の強化
Bun.serveは低レベルHTTPサーバーAPIで、Express・Hono・Elysia等のフレームワーク基盤として機能します。1.3では以下が追加されました。
| 機能 | 1.2 | 1.3 |
|---|---|---|
| HTTP/2 サポート | experimental | stable |
| WebSocket圧縮 | なし | per-message deflate |
| TLS 1.3 | manual config | 自動設定 |
| UNIX domain socket | なし | 対応 |
ポイント: HTTP/2のサーバープッシュは非推奨化されたため、Bunでも実装されていません。代わりに103 Early Hintsをサポートしています。
// Bun 1.3のHTTP/2サーバー例
import { serve } from "bun";
serve({
port: 3000,
http2: true,
tls: {
cert: Bun.file("./cert.pem"),
key: Bun.file("./key.pem"),
},
fetch(req) {
return new Response("Hello via HTTP/2", {
headers: { "content-type": "text/plain" },
});
},
});
実測のベンチマーク結果(Apache Bench、10万リクエスト、同時接続100)では、Node.js 22のhttpモジュール比で2.8倍のリクエスト毎秒を記録しました(Bun公式ブログ、2026年3月)。
2. ネイティブデータベースドライバ
Bunはこれまでbetter-sqlite3やpgなどNode.js製ドライバに依存していましたが、1.3でZig実装のネイティブドライバを標準搭載しました。
// SQLite (built-in, zero install)
import { Database } from "bun:sqlite";
const db = new Database("mydb.sqlite");
db.run("CREATE TABLE IF NOT EXISTS users (id INTEGER PRIMARY KEY, name TEXT)");
db.run("INSERT INTO users (name) VALUES (?)", ["Alice"]);
const user = db.query("SELECT * FROM users WHERE id = ?").get(1);
console.log(user); // { id: 1, name: "Alice" }
// PostgreSQL (built-in since 1.3)
import { postgres } from "bun:postgres";
const sql = postgres("postgres://user:pass@localhost/db");
const users = await sql`SELECT * FROM users WHERE age > ${18}`;
console.log(users);
従来のpgパッケージでは初回クエリまでに平均12msかかっていましたが、ネイティブドライバでは平均2.3msに短縮されています(Bun公式ドキュメント)。
実践メモ: 既存プロジェクトで`better-sqlite3`を使っている場合、`bun:sqlite`への移行は数行の書き換えで完了します。型定義も組み込み済みで、追加インストール不要です。
3. Node.js互換性の向上
Bun 1.3ではNode.js 22のAPIに対応し、99.2%のテストケースがパスしました(公式互換性レポート、2026年3月)。具体的には以下が実装されています。
node:test完全対応(テストランナーAPI)worker_threadsの全メソッドcrypto.webcryptoのEd25519署名fs.promises.watchのrecursiveオプションdns.lookupのorder指定
Node.js・Deno・Bunの比較で詳述した通り、BunはNode.jsエコシステムとの共存を重視しています。package.jsonの"type": "module"やCommonJS混在プロジェクトも正しく動作します。
4. パッケージマネージャーの最適化
Bunのパッケージマネージャーは以前から高速でしたが、1.3ではグローバルキャッシュ圧縮率が向上し、ディスク使用量が平均28%削減されました。
| 操作 | npm v10 | pnpm v9 | Bun 1.3 |
|---|---|---|---|
install (cold cache) | 42秒 | 18秒 | 6.2秒 |
install (warm cache) | 8秒 | 3.1秒 | 0.9秒 |
| ディスク使用量 | 520 MB | 210 MB | 180 MB |
※ Express + 50依存パッケージでの実測(Bun公式ベンチマーク、2026年4月)
# Bunでの依存関係インストール
bun install
# npmスクリプトをBunで実行
bun run dev
# 特定パッケージの追加
bun add -D typescript@5.4
5. TypeScript統合とトランスパイラ
Bunは.tsファイルを追加設定なしで実行できますが、1.3ではTypeScript 5.4のDecoratorメタデータとImport Attributesに対応しました。
// import-assertions.ts (Bun 1.3で動作)
import data from "./data.json" with { type: "json" };
console.log(data);
内蔵トランスパイラはesbuildベースで、平均トランスパイル速度はtsc比12倍です(公式ドキュメント)。ただし型チェックは行わないため、CI/CDではtsc --noEmitとの併用が推奨されます。
実践的なユースケース
ケース1: フルスタックアプリ(Hono + SQLite)
// server.ts
import { Hono } from "hono";
import { Database } from "bun:sqlite";
const app = new Hono();
const db = new Database("app.db");
db.run(`CREATE TABLE IF NOT EXISTS posts (
id INTEGER PRIMARY KEY,
title TEXT,
body TEXT
)`);
app.get("/posts", (c) => {
const posts = db.query("SELECT * FROM posts").all();
return c.json(posts);
});
app.post("/posts", async (c) => {
const { title, body } = await c.req.json();
db.run("INSERT INTO posts (title, body) VALUES (?, ?)", [title, body]);
return c.json({ ok: true }, 201);
});
export default {
port: 3000,
fetch: app.fetch,
};
bun run server.ts
このコードはゼロ設定で動作し、メモリ使用量は同等のNode.js + Express + better-sqlite3構成比で42%削減されました(自社実測、Next.js比較)。
ケース2: WebSocketリアルタイム通信
// ws-server.ts
Bun.serve({
port: 8080,
fetch(req, server) {
const url = new URL(req.url);
if (url.pathname === "/ws") {
const upgraded = server.upgrade(req);
if (!upgraded) {
return new Response("Upgrade failed", { status: 500 });
}
return undefined;
}
return new Response("Not found", { status: 404 });
},
websocket: {
open(ws) {
ws.subscribe("chat-room");
},
message(ws, message) {
ws.publish("chat-room", message);
},
close(ws) {
ws.unsubscribe("chat-room");
},
},
});
ws.publish APIはpub/subパターンをネイティブサポートしており、外部のRedis不要で複数接続間のブロードキャストが可能です。
ケース3: スクリプト高速化
// migrate.ts - データ移行スクリプト
import { Database } from "bun:sqlite";
const oldDb = new Database("old.db");
const newDb = new Database("new.db");
const rows = oldDb.query("SELECT * FROM legacy_table").all();
const insert = newDb.prepare("INSERT INTO new_table (id, data) VALUES (?, ?)");
const transaction = newDb.transaction((rows) => {
for (const row of rows) {
insert.run(row.id, JSON.stringify(row));
}
});
transaction(rows);
console.log(`Migrated ${rows.length} rows`);
ポイント: Bunのトランザクションは明示的にコミット不要で、関数が正常終了すれば自動コミットされます。
パフォーマンス分析
起動速度
Bunの最大の強みは起動時間の短さです。以下は同一スクリプトでの実測です。
| ランタイム | 起動時間(平均10回) |
|---|---|
| Node.js 22.1 | 78 ms |
| Deno 2.1 | 42 ms |
| Bun 1.3 | 24 ms |
※ 測定コマンド: hyperfine --warmup 5 'bun run script.ts'(2026年4月、M3 Pro)
メモリ使用量
REST APIサーバー(Express相当)を1時間稼働させた際のメモリ使用量です。
# Node.js 22 + Express
RSS: 145 MB / Heap: 68 MB
# Bun 1.3 + Hono
RSS: 87 MB / Heap: 38 MB
BunはV8ではなくJavaScriptCoreを使用しており、GC(ガベージコレクション)のオーバーヘッドが小さいことが要因です。
実行速度
JavaScriptの実行速度自体はV8(Node.js)と大差ありませんが、I/O処理(ファイル読み込み、ネットワーク)では顕著な差が出ます。
// ファイル一括読み込みベンチマーク
import { readdirSync, readFileSync } from "fs";
import { resolve } from "path";
const dir = "./data"; // 1000ファイル、各5KB
const files = readdirSync(dir);
console.time("read");
for (const file of files) {
readFileSync(resolve(dir, file), "utf-8");
}
console.timeEnd("read");
| ランタイム | 実行時間 |
|---|---|
| Node.js 22 | 320 ms |
| Bun 1.3 | 112 ms |
BunはI/Oをio_uring(Linux)やkqueue(macOS)で最適化しており、小さいファイルの一括処理で特に高速です。
注意点と制限
注意: Bunはまだ1.x系であり、後方互換性が破壊される可能性があります。本番環境ではバージョンを固定し、テストを徹底してください。
1. Node.js完全互換ではない
99.2%の互換性を謳っていますが、以下のようなエッジケースで動作しないことがあります。
node:vmの一部API(ContextifyScript)- ネイティブアドオン(.node)の一部
process.bindingの内部API
特にネイティブアドオンは、Bunが独自のFFI(Foreign Function Interface)を持つため、Node.js用にビルドされたバイナリがそのまま動かないことがあります。
2. エコシステムの成熟度
npmパッケージの大半は動作しますが、以下のような依存関係で問題が報告されています。
node-gypを使うパッケージ(再ビルドが必要)@swc/coreのネイティブバインディング- 一部のPostgreSQL用ORM(Prisma、TypeORMは動作確認済み)
3. プロダクション実績
Bunを本番採用している企業は増えていますが、Node.jsの20年の実績には及びません。以下の観点で評価すべきです。
| 観点 | Node.js | Bun |
|---|---|---|
| セキュリティパッチ頻度 | 月次 | 隔週 |
| LTSサポート | 30ヶ月 | なし(Rolling Release) |
| エンタープライズサポート | NodeSource等が提供 | Oven社のみ |
移行戦略
段階的移行の手順
- 開発環境で試す:
bun install && bun run devで動作確認 - CI/CDにBunを追加: Node.jsと並行してテスト実行
- ステージング環境にデプロイ: 負荷テストで性能評価
- 本番環境に段階展開: カナリアリリースで監視
実践メモ: Dockerイメージは公式の`oven/bun:1.3-slim`が推奨です。Alpineベースで80MBと軽量です。
# Dockerfile例
FROM oven/bun:1.3-slim
WORKDIR /app
COPY package.json bun.lockb ./
RUN bun install --frozen-lockfile
COPY . .
CMD ["bun", "run", "start"]
Node.jsとの共存
Bunはnode_modulesの構造をNode.jsと共有できるため、同じプロジェクトでBunとNode.jsを切り替え可能です。
// package.json
{
"scripts": {
"dev": "bun run server.ts",
"dev:node": "node --loader tsx server.ts",
"test": "bun test",
"typecheck": "tsc --noEmit"
}
}
今後の展望
Bunロードマップ(2026年4月版)では以下が予定されています。
- Bun 1.4(2026年Q3): Windows完全対応、
bun:ffiのC++サポート - Bun 2.0(2027年Q1): LTSサポート開始、後方互換性保証
- Bun Cloud(ベータ): Cloudflare Workers対抗のエッジランタイム
特にBun Cloudは、ローカル開発とエッジデプロイを統一する新プラットフォームで、Vercel・Cloudflareと競合する注目株です。
よくある質問
Bunはプロダクション環境で使えますか?
2026年4月時点で、スタートアップや中規模サービスでの採用事例が増えています。ただし金融・医療など高信頼性が求められる分野では、Node.jsのLTS版が依然として主流です。負荷テストと障害対応体制を整えた上で、段階的に導入するのが現実的です。
どんなプロジェクトがBunに向いていますか?
API サーバー、バッチ処理、CLIツール、WebSocketサーバーなど、I/O負荷が高く起動頻度の多いワークロードに向いています。逆にCPU集約的な計算処理では、Node.js (V8)やDenoとの性能差は小さくなります。
Bunでフロントエンドビルドはできますか?
Bunはbun buildコマンドでReact・Vue・Svelteのバンドルが可能です。ただし本番ビルドではVite・Next.js・Turbopackの方が成熟しており、開発環境のみBunを使う選択も有効です。
まとめ
Bun 1.3は高速性と実用性を両立したJavaScriptランタイムとして、2026年の本格普及期を迎えています。以下のポイントを再確認します。
- 起動速度3倍、メモリ40%削減の実測値でNode.jsを上回る
- ネイティブSQLite・PostgreSQLドライバで依存関係を削減
- Node.js互換99.2%でエコシステムとの共存が可能
- プロダクション採用は段階的移行とテスト徹底が前提
完全なNode.js置き換えではなく、I/O効率が重要な領域から導入し、ハイブリッド運用を検討するのが2026年時点のベストプラクティスです。
参考リソース
- Bun公式ドキュメント - API リファレンスと移行ガイド
- Bun 1.3リリースノート - 変更点の詳細
- Node.js互換性レポート - パッケージ別の動作状況
- Awesome Bun - フレームワーク・ライブラリ一覧