開発

Bun、ZigからRustへの全面書き換えを完了

JavaScriptランタイムBunがZigからRustへの全面書き換えを完了。Anthropic買収後、Claude Fable 5を活用。月間2200万ダウンロードの普及率と安定性向上への取り組みを公式ブログで発表。

8分で読める SINGULISM 編集チームが確認・編集

Bun、ZigからRustへの全面書き換えを完了
Photo by Andres Siimon on Unsplash

JavaScriptランタイム「Bun」が、コア実装をZigからRustへ全面書き換えたことを、公式ブログで発表した。2025年12月のAnthropicによる買収後、同社の最新AIモデルClaude Fable 5のプレリリース版を活用した大規模リライトが実施された。Bunは月間2200万ダウンロードを超える普及率を持ち、Claude CodeやOpenCodeなどの人気ツールがランタイムとして採用している。今回の移行は、プロジェクトの長期的な安定性とメンテナンス性を重視した判断と見られる。

Bunの成り立ちとZigへの賭け

Bunは2021年4月、当時の開発者Jarred SumnerがZig言語で最初のコードを書いたことから始まった。きっかけはHacker Newsで公開されたわずか1ページのZig言語リファレンスに触発されたことで、低レベル制御とパフォーマンスへのこだわりに強い魅力を感じたという。

Bunのスコープは当初から極めて広範だった。JavaScript、TypeScript、CSSのトランスパイラ、ミニファイア、バンドラ、npm互換のパッケージマネージャ、Jest互換のテストランナー、Node.js互換のモジュール解決、HTTP/1.1およびWebSocketクライアント、さらにNode.jsのAPI実装(fs、net、tlsなど数十のモジュール)を1つのバイナリに統合するという野心的なプロジェクトである。

初期バージョンはLLM(大規模言語モデル)全盛期以前の時代に、1人で1年かけてオークランドの狭いアパートでZigにより開発された。公式ブログでは「ZigがBunを可能にした。Zigがなければこれほど短期間で構築できなかった」と述べられている。デフォルトで広大なスコープのプロジェクトが死のサイドプロジェクトと化す中、BunはZigの生産性によって存続した。

Rustへの移行を決断した背景

Bunのスコープの広さは安定性の面では常に課題となっていた。公式ブログでは、v1.3.14で修正されたバグの一部が公開されている。これにはヒープ解放後のメモリ使用(use-after-free)クラッシュ、メモリリーク、ダブルフリー、範囲外読み出しなど、C言語系のメモリ安全性に起因する重大な問題が多数含まれている。

具体的には、node:zlibストリームでの非同期処理中のuse-after-free、node:http2でのハッシュマップ再編に伴う内部ストリームポインタの無効化、UDPSocket.send()でのArrayBufferのデタッチ問題、crypto.scryptでのメモリリーク、tlsSocket.setSession()でのSSL_SESSIONリーク(1回の呼び出しで約6.5KB)、fs.watch()でのガベージコレクション不能、CSSパーサーでのダブルフリーなど、多岐にわたる。

これらの問題はZig自体の品質というよりも、大規模かつ高速な開発が求められるランタイムにおいて、手動メモリ管理の複雑さが顕在化した結果と見られる。Rustの所有権システムと借用チェッカーは、コンパイル時にこれらのメモリ安全性問題を防止できるため、長期的な保守性において優位性がある。

Claude Fable 5によるコード生成支援

今回の書き換えでは、Anthropicが開発中のClaude Fable 5のプレリリース版が活用された。このモデルはコード生成とリファクタリングに特化して設計されており、大規模な言語間移植を効率化する目的で使用されたと推測される。

元記事では「Claude Fable 5 for much of the Rust rewrite」と明記されており、AIアシストによる大規模リライトの事例としても注目される。Anthropicによる買収後、BunチームがAnthropic内で開発を継続していることから、自社モデルを実戦投入することで、製品の品質向上とモデル自体のフィードバックループを同時に回す意図が感じられる。

エコシステムへの影響

Bunは現在、Vercel、Railway、DigitalOceanなど主要クラウドプラットフォームがファーストパーティサポートを提供するまでに成長している。Claude CodeやOpenCodeといったAI支援ツールがランタイムとしてBunを選択している点も、エコシステム内での位置づけを強化している。

Rustへの移行により、メモリ安全性の向上に加えて、Rustの豊富なエコシステム(crate.io上のライブラリ)との相互運用性が高まる可能性がある。一方で、Zigコミュニティにとっては、BunがZigの代表的な実績プロジェクトであっただけに、その喪失は一定のインパクトを持つ。

編集部の見解

BunのRust移行は、短期間で急速に成長したプロジェクトが技術的負債と向き合う典型的な事例と評価できる。今後3〜6ヶ月で、メモリ安全性の改善によりクラッシュ頻度が低下し、商用利用での信頼性が向上する可能性が高い。特にサーバーサイドレンダリングやAPIゲートウェイなど、長時間稼働が求められる用途での導入が加速すると見られる。 長期的には、Rustエコシステムとの統合が進むことで、Node.js互換の枠を超えた独自のAPIや拡張機能の開発が容易になる。AnthropicのAIモデルがコード生成能力をさらに向上させれば、同様の大規模リライトを検討するプロジェクトが増えるだろう。言語間移植のコストがAIによって劇的に低下する時代が到来しつつあることを示唆している。 編集部としては、AIアシストによる書き換えがどこまで正確に行われたのか、移行後に新たなバグが発生していないのか、コミュニティの検証が待たれる。また、ZigからRustへの移行がBunの性能特性にどのような変化をもたらすのか、ベンチマーク結果の公開が重要だ。

参考

よくある質問

BunがZigからRustに書き換えた理由は何か
長期的な安定性とメンテナンス性の向上が主な理由。Zigでの開発ではメモリ安全性に関わるバグ(use-after-free、メモリリークなど)が多発しており、Rustの所有権システムによりコンパイル時にこれらの問題を防止できる。また、Rustの豊富なエコシステムとの相互運用性も期待される。
書き換えにはどの程度の期間がかかったのか
正確な期間は公表されていないが、2025年12月のAnthropic買収後、Claude Fable 5のプレリリース版を活用して進められた。大規模な言語間移植であり、数ヶ月から半年程度の開発期間と推測される。
既存のBunユーザーに影響はあるか
今回の書き換えは内部実装の変更であり、APIや動作に大きな変化はないと見られる。バグ修正と安定性向上が主目的であるため、ユーザーにとってはより信頼性の高いランタイムとして恩恵を受ける可能性が高い。ただし、性能特性に変化がある場合はベンチマーク結果の確認が推奨される。
出典: Lobsters

コメント

← トップへ戻る