Bunの使い方|Node.jsと比較したパフォーマンス検証

Web開発

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の速さを体感するところから始めるのがおすすめです。