Bun 1.4リリース。Rustへの大規模移行とNode.js互換性・パフォーマンスを強化

Bun 1.4リリース。Rustへの大規模移行とNode.js互換性・パフォーマンスを強化

Bun 1.4がリリースされました。

BunがZigからRustへ移行するという話は以前から聞いていて、個人的にも正式リリースを楽しみにしていました。

普段の開発でもBun + Viteの組み合わせをよく使っています。Node.jsで困っているわけではないのですが、できるだけ軽く、依存の少ない開発環境が好みなので、Bunはかなり気に入っているランタイムです。

そんなBunの1.4。

2,900件以上のIssueを修正し、Node.jsのテストスイートでは新たに1,517テストが通過。アイドル時のCPU使用量は最大5分の1、メモリ使用量は最大35%削減、Linuxでの起動も最大50%高速化されています。そして内部実装はZigからRustへ大規模に移行しました。

これだけ大きなアップデートなのに、v2ではなく1.4なんですね(笑)。

ZigからRustへ大規模移行

今回まず気になるのは、やはりRustへの移行です。

Bunといえば「Zigで作られた高速なJavaScriptランタイム」という印象が強かったので、最初にこの話を聞いたときは「そこを変えるんだ」と少し驚きました。

ただ、理由を見ると納得できるところも多いです。

Bunはこれまでメモリリークやuse-after-freeなど、手動のメモリ管理に起因する問題にも対処してきました。Rustへ移行することで、こうした問題を言語側の仕組みでも抑えやすくなります。

さらに興味深いのが、この移行にClaude Codeを大量に並列実行して使ったことです。

AIにコードを書かせること自体はもう珍しくありません。それでも、すでに多くのユーザーがいるJavaScriptランタイムの内部実装を、AIエージェントを使って別言語へ大規模に移植するとなると、なかなか大胆です。

ちなみに、このRust版Bunは今回の正式リリースより前からClaude Codeの内部ランタイムとして本番運用されていたそうで、開発に使ったエージェント自身の足元ですでに動いていたというのも面白いエピソードです。

それを実際に正式リリースまで持っていったことも含めて、Bun 1.4はAIを使った大規模ソフトウェア開発の事例としても気になるリリースです。

Node.js互換性をさらに改善

Bunを実際に使ううえで、速さ以上に気になるのがNode.js互換性です。

npmパッケージを使うときに「これはBunでも普通に動くかな」と確認する場面は、まだあります。

Bun 1.4ではNode.jsの公式テストスイートで、新たに1,517テストが通るようになりました。もちろん、これでNode.jsと完全互換になったわけではありませんが、この「Bunだから一応確認しておこう」が減っていくのはかなり大きいと思います。

さらに1.4では、Node.js互換性の基準となるバージョンが24.3.0から26.3.0へ引き上げられています。process.versions.nodeも26.3.0を返すようになり、NODE_MODULE_VERSIONは147になりました。

ここは互換性向上の裏側にある実務的な変更です。Node 24向けにビルドされたネイティブアドオンは再ビルドが必要になるため、node-gypやN-API周りを使っているプロジェクトでは、Bun本体だけ更新して終わりとは限りません。

普段Bun + Viteで開発していても、互換性で引っかかれば結局Node.jsへ戻ることになります。逆にここが十分に安定すれば、「まずBunで始める」という選択もしやすくなりますね。

Bunの今後を見るうえでは、このあたりがかなり重要だと思っています。

Bun 1.4へのアップグレード時の注意点

1.4は土台からかなり変わっているので、1.3系からの更新は「いつものマイナーアップデート」くらいの気持ちで雑に上げるより、一度リリースノートを読んで検討したほうが良いかもしれません。

x64向けビルドも整理され、従来のHaswell向け個別ビルドは廃止。x64はbaselineビルドへ統一され、SIMDは実行時に切り替える構成になっています。

多くの環境では気にしなくてよい変更ですが、ネイティブアドオンやCPU依存の挙動、Bunを埋め込んだ配布物などを扱っている場合は、1.4移行時に一度確認しておく価値があります。

軽量なJavaScript開発環境としてのBun

Bunというと、とにかく速さがアピールされがちです。

もちろん速いに越したことはないのですが、最近のBunで自分が面白いと思っているのは、むしろ開発環境そのものを小さくできることです。

Bunはランタイムだけではありません。

パッケージマネージャー、テストランナー、bundler、TypeScriptやJSXの実行環境など、普通なら複数のツールを組み合わせるところまで1つのバイナリにまとめています。SQLite、SQL、Redis、S3、Shell、YAMLなども組み込みAPIとして扱えます。

Bun 1.4ではさらにXML APIも追加されました。

最近のBunを見ていると、「Node.jsより速いランタイム」から「JavaScript開発環境を1バイナリにまとめるツール」へ軸足が移ってきたように感じます。

この方向性はかなり好きです。

小さなCLIや個人開発なら、依存パッケージを何個も入れて設定ファイルを増やすより、

bun run
bun test
bun build

くらいで済む方が気持ちいい。

速さ以上に、この雑に使える感じがBunの強みになってきています。

XML・WebViewなど組み込み機能を拡充

Bun 1.4ではXML APIに加えて、実験的なBun.WebViewも追加されています。

WebViewまで入ってきました。

最近ちょうどTauriをもう少し小さくできないか、Web技術で作ったものを軽いデスクトップアプリとして配れないか、と考えていたので、これはかなり気になります。

もちろん現時点でTauriの代わりになるようなものではありません。ただ、Bunにはすでにsingle-file executableがあります。

このあたりがつながってくると、Bun + HTML/CSS/JavaScriptだけで、小さなデスクトップツールを作ってそのまま配布するような使い方も見えてきます。

まだ少し先の話かもしれませんが、このあたりは今後も追ってみたいところです。

Bun 1.4を使ってみたい理由

今回の1.4は、内部ではかなり大きく変わっている一方で、使う側から見るとBunらしさはあまり変わっていません。

全部入りなのに、なるべく軽い。そこへRust移行やNode.js互換性の改善が加わって、普段使う道具としての安心感が少しずつ増してきました。

ちなみに技術的にはまったく関係ないのですが、Bunの肉まんみたいなキャラクターもかわいいですよね。あの妙に力の抜けた感じも含めて、Bunは結構好きです。

自分もBun + Viteの環境でしばらく使ってみようと思います。

参考:Bun 1.4のリリース記事

参考:Bun v1.4.0のGitHub Release

参考:Bun 1.4のbreaking changes一覧

Related Posts:

コメント

コメントを残す

メールアドレスは公開されません。必須項目には印が付きます。

人間であることを証明してください: 10   +   2   =