Bunは、Node.jsの代替として注目を集めるJavaScriptランタイムです。ランタイム・パッケージマネージャ・テストランナー・バンドラをオールインワンで提供し、Node.jsと比べて圧倒的に高速な動作を実現します。本記事では、Bunの基本的な使い方と、Node.jsとのパフォーマンス比較を解説します。
Bunとは
BunはZig言語で書かれた高速なJavaScript/TypeScriptランタイムです。JavaScriptCore(Safariエンジン)をベースに、起動・ファイルI/O・HTTPサーバなどあらゆる場面で速度を追求しています。Node.jsとの互換性も高く、多くのnpmパッケージがそのまま動作します。
インストール
curl -fsSL https://bun.sh/install | bash
bun --version
基本的な使い方
# 実行
bun run index.ts # TSがそのまま動く(トランスパイル不要)
# パッケージインストール
bun install # npmより数倍~10倍以上速い
# 開発サーバー
bun --hot index.ts # ホットリロード
# テスト
bun test
シンプルなHTTPサーバ
Bun.serve({
port: 3000,
fetch(req) {
return new Response('Hello Bun!');
},
});
Web標準のFetch APIをそのまま使えるのが特徴。Hono・Elysiaなど多くのモダンフレームワークと相性が良好です。
Node.jsとのパフォーマンス比較
あくまで一般的な傾向ですが、以下のような差が公式ベンチで報告されています。
- 起動速度:Bunは数倍~10倍以上速い
- HTTPスループット:Bunが2~3倍程度高速なケースが多い
- パッケージインストール:Bunは数倍~10倍速い
- TypeScript実行:トランスパイル不要でNode比オーバーヘッドが小
実プロジェクトでは「フレームワーク・I/Oパターン」によって差が縮まることもあるため、自分のワークロードでベンチマークを取るのが重要です。
Node.jsとの互換性
- npmパッケージはほぼ動作(一部ネイティブモジュールに非対応)
- 主要なNode API(fs / path / http / streamなど)に対応
- ESM/CJS両方対応
- package.jsonのscriptsは
bun run xxxで実行可能
注意点
- 本番運用での実績はNode.jsより浅い領域がある
- 一部ライブラリのネイティブビルドに依存する場合は互換性確認が必要
- エコシステム(モニタリング・APMなど)の対応状況に差
まとめ
Bunは「起動・パッケージ・HTTP」のあらゆる場面で開発体験を底上げするランタイムです。新規プロジェクトや小規模API、開発時のNode代替として特にメリットが大きく、まずはbun installの速さを体感するところから始めるのがおすすめです。