Bun⁠バージョン1.4をリリース
—⁠—初のRust実装版

Bunチームは2026年8月20日、JavaScript/TypeScript向けランタイム兼ツールキット「Bun」のバージョン1.4をリリースした。Bun本体をZigからRustへ書き直した初のリリースで、Node.jsとの互換性を高めたほか、CPU・メモリ使用量を削減し、起動を高速化した。また、今回のリリースでは2,900件を超えるIssueを修正した。公式のリリースブログではBun 1.3.0以降の変更もまとめており、パッケージ管理、テスト、ビルドなどの更新を紹介している。

先行発表していたRust版をBun 1.4としてリリース

Bun 1.3.14がZig実装の最終版となり、Bun 1.4からRust実装へ切り替わった。Rust移行は2026年7月8日のブログで先行発表されていた。この書き直しにより、メモリ管理上の問題をコンパイル時に見つけやすくなった。Bunチームは、メモリリークやクラッシュを抑え、安定性を継続的に改善するための基盤が整ったとしている。

Node.js互換性を拡大⁠テスト通過数が1,517件増加

Bun 1.4は、Node.js 26.3のテストスイートで、従来より1,517件多くのテストを通過した。Bunチームは、Bun 1.0以降で最大の互換性向上としている。httpfsclustertimerszlibvmstreamの各モジュールではテスト通過率が97%に達し、eventstrace_eventssqliteでは100%としている。

この改善により、Playwright、Vitest、OpenTelemetry、dd-traceなどがBun 1.4上で動作するようになった。

CPUとメモリの使用量を削減⁠起動も高速化

公式測定では、小さな「Hello World」サーバーのアイドル時CPU使用量がBun 1.3の5分の1に減少した。Bunで動くClaude Codeの本番環境でも、CPU使用率の中央値が5.8%から2.5%へ低下したという。

HTTPサーバーのメモリ使用量は、ワークロードによって13~48%減少した。100万リクエストを64接続で処理する測定では、Expressのメモリ使用量が169MBから92MBへ減少した。小さな「Hello World」プログラムの起動時間も、Windowsで39ミリ秒から15.5ミリ秒、Linuxで10.9ミリ秒から5.1ミリ秒へ短縮した。

性能改善はストリーム処理にも及ぶ。HTTP通信やファイル入出力で使うストリームをJavaScriptCoreのネイティブ実装へ移行したほか、Bun.serve()にバックプレッシャー制御を加えた。これにより、低速なクライアントへの送信時に、未送信データが際限なくバッファリングされるのを防ぐようになった。

1.3系から組み込みAPIを拡充

Bun 1.3系から1.4にかけて、外部パッケージで補うことが多かった機能がランタイムへ順次組み込まれた。リリースブログでは、15個の外部パッケージを置き換えられるとしている。同ブログの概要では、その代表例として、画像のデコードや変換を扱うBun.Image、ブラウザーを操作するBun.WebView、Markdownを処理するBun.markdown、OSのスケジューラーへジョブを登録するBun.cron、疑似端末を扱うBun.Terminalなどを挙げている。

Bun.markdownはGitHub Flavored Markdownに対応し、HTML文字列やReact要素を生成できる。ただし、HTML出力はサニタイズされない。信頼できないMarkdownを処理する場合は、生成したHTMLを別途サニタイズする必要がある。

パッケージ管理⁠テスト⁠ビルドなどを更新

Bun 1.4では、パッケージ管理用コマンドが増えた。bun pm diffはパッケージの2つのバージョンを比較し、変更されたファイルや追加されたインストールスクリプトなどを表示する。bun audit fixは、監査で見つかった脆弱性を修正可能なバージョンへ更新する。重複するバージョンを整理するbun dedupe、ロックファイルに含まれないパッケージを削除するbun prune、依存パッケージのライセンスを一覧化するbun pm licensesも利用できる。

テストでは、過去に記録したファイルごとの実行時間を読み込む--timingsと、実行時間を記録する--update-timingsが加わった。この実行時間データは、1.3系で追加されたbun test --parallelやシャーディングで、処理時間が偏らないようにテストファイルを振り分ける際に使われる。

Bun 1.4はReact Compilerを内蔵し、bun build --react-compilerで有効化できる。公式測定では、同じ入力のコンパイル処理がBabelプラグインの約20倍高速だった。プロジェクト全体を単一の実行ファイルにまとめる測定でも、Babelプラグインを使った場合の13.04秒に対して3.62秒で、3.6倍高速だったという。静的ファイルをBun.serve()から配信する機能や、HTTPレスポンスの圧縮も1.4で追加された。

CPUプロファイルとヒーププロファイルは、それぞれ--cpu-prof-md--heap-prof-mdでMarkdown出力できる。これとは別に、1.3系で追加されたbun build --metafile-mdは、バンドル解析をMarkdownレポートとして出力する。いずれもターミナルで確認しやすく、LLMにも渡しやすい。

Bun.serve()のHTTP/3対応と、fetchによるHTTP/2およびHTTP/3通信は、いずれも実験的な機能として提供される。Bun.serve()のHTTP/3には機能上の制限が残るため、Bunチームはhttp3: trueを指定したサーバーを本番環境で使用しないよう注意している。

このほか、対応プラットフォームも1.3系から拡大し、FreeBSD向け公式バイナリやWindows ARM64のネイティブビルドが加わった。

更新時に確認したい互換性の変更

Bunチームは、ほとんどのコードが変更なしで動作するとしているが、次の変更は既存プロジェクトに影響する可能性がある。

  • Node.js 26への対応に伴い、ランタイムとネイティブアドオンの接続仕様にあたるABI(アプリケーションバイナリインターフェース)の番号が147に変わった。ネイティブアドオンは再ビルドする必要がある。
  • res.writeHeader()は削除され、代わりにres.writeHead()を使う。
  • 一時停止モードのReadableストリームでread()を呼び出すと、1チャンクだけ返すようになった。
  • 新規モノレポでは、依存関係を分離して配置するisolatedリンカーが既定となる。既存のロックファイルを持つプロジェクトは、従来のhoistedリンカーを引き続き使用する。
  • Bunをnodeとして呼び出した場合bun --bunbunx --bunなど⁠⁠、.envファイルを自動で読み込まなくなった。必要な場合は--env-fileを指定する。
  • Bun.YAMLはYAML 1.2に従い、yesnoonoffを真偽値ではなく文字列として扱う。
  • TOMLとbunfig.tomlの解析が厳格になり、これまで許容されていた不正な構文がエラーになる場合がある。

セキュリティ関連の修正も多数含まれる。TLS証明書の検証など一部の既定動作が厳しくなったため、Bun 1.3では接続できていた環境でも検証エラーが発生する可能性がある。Bunチームは、セキュリティ修正を適用するためBun 1.4への更新を推奨している。

インストール済みのBunは、bun upgradeで更新できる。

「Bun 1.4」を紹介した公式の動画

おすすめ記事

記事・ニュース一覧