8月20日、Bunが「Bun v1.4」と題した記事を公開した。JavaScriptランタイム「Bun」のメジャーアップデートとなるバージョン1.4の主要な改善点と新機能を紹介する。
Bunは、Node.jsおよびDenoと競合するJavaScriptランタイムで、JavaScriptCoreエンジンとZig言語による実装で高速性を売りにしてきた。2023年9月のv1.0リリース以降、「速いが本番では使いにくい」という評価も一部で聞かれてきたが、Bun 1.4はその認識を変えるきっかけになりうるリリースだ。HTTPサーバーのメモリ使用量が最大48%削減、Linux上の起動速度が2倍高速化、Node.jsテストスイートで**+1,517件**を新たに通過という数字は、単なるベンチマーク改善を超えた実用上の変化を示している。さらに今回は、BunをZigからRustで書き直すという大きな方針転換も表明された。
パフォーマンス改善:メモリ・CPU・起動速度の三冠
今回の改善で最も効くのはメモリ使用量の削減だ。HTTPサーバーを使うアプリケーションで、Bun 1.3比で13〜48%のメモリ削減が確認されている。
| サーバー | Bun 1.4 | Bun 1.3 | Node.js 26 | Δ vs Bun 1.3 |
|---|---|---|---|---|
| fastify | 120 MB | 233 MB | 156 MB | −48% |
| Express | 92 MB | 169 MB | 145 MB | −46% |
| node:http | 81 MB | 135 MB | 107 MB | −40% |
| Elysia | 55 MB | 91 MB | n/a | −40% |
| Next.js | 285 MB | 397 MB | 342 MB | −28% |
| Bun.serve | 36 MB | 45 MB | n/a | −20% |
| Vite dev server | 233 MB | 268 MB | 214 MB | −13% |
Next.js App RouterのSSRでは、1.3で際限なく増加していたメモリ(React.cache + no-store fetchの動的ルート)が、4,000ページ処理でBun 1.4は238 MBに収まった。Node.jsの410 MBを大きく下回る。
背景にあるのはメモリアロケーターの刷新だ。従来はJavaScriptCoreのlibpasとmimallocの2つを併用していたが、JavaScriptCore側もmimallocに統一した。さらにアイドル中にメモリを解放するスカベンジャースレッドや部分的なページクリアなど、mimalloc自体の拡張も加えられている。
CPU面では、Claude Code(Bun上に構築された大規模・長時間稼働アプリケーション)の本番環境での数値が印象的だ。p99で24%→10%、p50で5.8%→2.5%と約2倍の改善。小規模な「hello world」アプリではアイドル時のCPU使用率が5倍削減されている。
起動速度も大きく改善した。
| プラットフォーム | Bun 1.4 | Bun 1.3 | Node.js 26 |
|---|---|---|---|
| Linux 起動時間 | 5.1 ms | 10.9 ms | 27.2 ms |
| Windows 起動時間 | 15.5 ms | 39.0 ms | 40.1 ms |
Linuxで2倍、Windowsで2.5倍の高速化。Linuxではピークメモリも14.6 MBと、Node.jsの44.5 MBの約3分の1に収まる。バイナリサイズもLinux/Windowsで最大17%縮小している。
Node.js互換性:1.0リリース以降で最大の進捗
BunはNode.jsとの互換性を段階的に高めてきたが、今回の+1,517件という通過数はBun 1.0リリース以降の1バージョン間の増加数として最大だとしている。
主な改善モジュール:
- node:quic: 99%通過
- node:events、node:trace_events、node:sqlite: 100%通過
- node:http: 403/415(+193件)
- node:fs: 349/358(+133件)
Playwright、vitest(--coverage含む)、OpenTelemetry、dd-trace、Nuxt(HMR・DevTools)、TypeORM、nock、Fastifyなど、主要なエコシステムとの互換性も広がった。Next.js 16.3のTurbopack + React Compilerでもbun --bun next buildが動作する。
ターミナルで完結するプロファイラ:--cpu-prof-md
地味だが実用的な新機能がMarkdown形式のプロファイラ出力だ。
bun --cpu-prof-md ./app.ts
CPUプロファイル結果をMarkdownで出力し、ターミナルからそのまま読める。SSH越しでの確認、grepによる絞り込み、バグレポートへの貼り付け、LLMへの入力といった用途を想定している。.cpuprofileをChrome DevToolsで開く必要がない場面で効く。同様に--heap-prof-mdでヒーププロファイル、bun build --metafile-mdでバンドル解析結果もMarkdownで出力できる。
新API群
今回追加された主なAPIは以下の通りだ:
Bun.Image: 画像の読み込み・リサイズ・変換などを行う画像処理APIBun.WebView: アプリケーションにWebViewを組み込むためのAPIBun.markdown: MarkdownをHTMLに変換するパーサーBun.cron(): cron式によるタスクスケジューリングBun.Terminal: ターミナルのインタラクティブ操作を扱うAPIbun run --parallel/bun test --parallel: スクリプト・テストの並列実行bun audit fix: 脆弱性の自動修正bun dedupe/bun prune: 依存関係の重複排除・不要パッケージの削除
ZigからRustへ:実装言語の方針転換
Bun最大のトピックのひとつが、実装言語をZigからRustへ移行するという表明だ。BunはこれまでZigによる低レベル実装でメモリ効率と速度を実現してきたが、今回この方針が転換される。
Zigはまだ言語仕様が安定しておらず、エコシステムやツールチェーン(LSP、デバッガ、ライブラリ)の整備がRustに比べて遅れている。一方でRustはメモリ安全性と高パフォーマンスを両立しつつ、豊富なクレート(ライブラリ)群と成熟した開発ツールを持つ。BunチームはRustの方がコントリビューターを集めやすく、長期的な開発速度を維持しやすいと判断したとみられる。移行は段階的に進められる予定で、今後のバージョンで徐々にRust製コンポーネントが増えていくことになる。
アップグレードはbun upgradeコマンドで行える。詳細はBun v1.4を参照していただきたい。