AI

Bun、Claude Fable 5で53万行をZig→Rust移植

Bunの作者Jarred Sumner氏がClaude Fable 5を活用し、53万5000行のZigコードを11日間でRustへ移植。次バージョンBun 1.4はRust移植版に。メモリリーク根絶、バイナリサイズ約20%削減。

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

Bun、Claude Fable 5で53万行をZig→Rust移植
Photo by Cesar Carlevarino Aragon on Unsplash

JavaScriptランタイム「Bun」の作者であるJarred Sumner氏は、2026年7月8日付の公式ブログで、約53万5000行のZig言語コードをAnthropicのAIエージェント「Claude Fable 5」を活用して約11日間でRust言語へ移植したことを明らかにした。次バージョンのBun 1.4(Canary)はこのRust移植版となる。

移植の結果、メモリリークの根本的な排除が達成された。バイナリサイズは約20%縮小し、パフォーマンスも2%から5%程度向上するという改善が確認されている。Publickeyのjniinoの報道によれば、Sumner氏は「Zig言語でなければここまでBunの開発を進めることはできなかった」としつつも、クラッシュを心配せずに使える安定したソフトウェアを実現するために、メモリ安全なプログラミング言語としてRustを選択したと説明している。

BunはNode.js互換の高速なJavaScriptランタイムである。AnthropicのAIエージェントツール「Claude Code」のランタイムとして採用されており、2025年12月にAnthropicによる買収が発表されている。今回の大規模コード移植は、単なる技術的刷新ではなく、買収後のプロダクト品質向上戦略の中核をなす位置づけと見られる。

11日間の大規模移植

Sumner氏の説明によると、Rust移植前のBunは約53万5000行のZig言語に加え、SQLiteやJavaScript Coreなどを動作させるためのC++および関連ライブラリで構成されていた。今回の移植では、当時未公開だったAnthropicの「Claude Fable 5」を基盤としたClaude Codeが用いられた。

まずSumner氏は、ZigコードのパターンをRustに密接にマッピングする方法についてClaudeと約3時間の議論を行った。この議論の成果は「PORTING.md」として文書化されている。さらに、手動でメモリ管理されているZigのコードをRustに移植するにあたり、Rustのライフタイム(生存期間)をどのようにコードに追加するかを検討するため、次のような指示をClaude Codeに与えている。

Me: Let’s kick off a dynamic workflow to analyze the proper lifetimes of every struct field in the codebase. This workflow should read every struct field within every single file and trace the control flow. First, look for struct fields with complex lifetimes to express in Rust, then propose a lifetime for that field, then use 2 adversarial review agents to review that lifetime, then apply any feedback and serialize into a LIFETIMES.tsv for other claudes to look at.

この指示は、コードベース内の全構造体フィールドを読み取り動作を追跡し、Rustのライフタイムを提案するものだ。提案に対して敵対的なレビューエージェント2つで正確さを確認した上でシリアライズし、ファイル「LIFETIMES.tsv」を作成するというプロセスを指示している。このファイルはSumner氏自身による目視レビューも経ている。

ZigからRustへ移行した理由

BunはもともとZig言語で開発されていた。Sumner氏はZig言語の表現力とパフォーマンスを評価しつつも、メモリ安全性をプロダクション品質の最優先事項と判断した。ZigはC言語と同様に手動メモリ管理が基本であり、解放忘れや二重解放、不正なポインタ操作によるクラッシュのリスクが内在する。

Rustは所有権システムとライフタイムにより、これらのメモリ関連バグをコンパイル時に検出する。Sumner氏は「Bunがクラッシュすることを心配せずに済むような安定したソフトウェア」を目標に掲げ、Rustへの移行を決断した。同氏は2026年5月にZigからRustへの移植について試行錯誤していることを明らかにしていたが、今回のClaude Fable 5の活用により本格的な移植が現実のものとなった。

この経緯は、以前の記事(Bun、ZigからRustへの全面書き換えを完了)で伝えた通りだ。Claude Fableはsqlite-utils 4.0rc2での重大バグ発見にも寄与したことが報告されているが(sqlite-utils 4.0rc2、Claude Fableが重大バグを発見)、今回のBun移植はさらに大規模な活用例として注目される。

動的ワークフローの設計

続いてSumner氏は、Rustコードの生成とレビューを自動化するために、多数のサブエージェントを統括する動的ワークフロー(Dynamic Workflow)を設計した。このワークフローは連続11日間稼働し、次のようなループ構造を持っていた。

最初に、Zigのパターンと型をRustのパターンと型にマッピングするための移植ガイドを生成する。次に、全1448ファイルのZigコードを機械的にRustコードへ変換する。その結果がPORTING.mdおよびLIFETIMES.tsvに合致しているかを確認した上で、Rustのクレートごとに発生するコンパイルエラーをすべて修正する。さらにbun testやbun buildなどのサブコマンドが実行可能な状態にし、最終的にBunの全テストスイートをを通じてさせる。その後に大規模なリファクタリングとクリーンアップを施す。

Sumner氏によると、11日間の作業の大部分はワークフローの監視と出力の確認、問題やバグの発見、および上記ループの編集と修正指示に費やされたという。つまり、自身でコードをレビューするのではなく、テストスイートとアサーション、Claudeによる敵対的コードレビューエージェントによりプロセス自体に修正を加えることで、正しいコードを生成させる手法を採用している。

敵対的レビューエージェント

Sumner氏が特に関心を示したのは、敵対的コードレビューエージェントの構成だ。実装エージェント1つに対して2つ以上のレビューエージェントを設定し、なぜバグが生まれたのか、なぜコードが意図通りに動作しないのかを徹底的に調査するよう要求した。

この手法は、単一のAIによる自己検証よりも高い品質保証を実現する狙いがある。異なるエージェントが独立してコードを分析し、相互に矛盾や問題点を指摘し合うことで、誤った実装や一貫性の欠如を発見する。人間のコードレビューにおける「ペアレビュー」をAIエージェント間で実現した形と言える。

6778コミットと2億6400万円のコスト

Claude Codeのエージェント並列化により、ピーク時には1分間におよそ1300行のRustコードが生成された。全行程で6778のコミットが行われている。

Sumner氏は、このClaudeの使用量をAPI価格に換算すると約16万5000ドル(1ドル160円換算で約2640万円)に相当すると説明している。その上で、コードを完全に理解している3人のエンジニアが1年かけて行う作業を11日間で完了したことになると評価した。

このコスト構造は、従来の人手によるコード移植と比較した場合の新たな経済合理性を示している。3人の上級エンジニアを1年間雇用する人件費(日本国内で試算しても3000万〜5000万円程度)と比較すれば、2640万円というAIエージェントの利用料は十分に競争力を持つ水準と言える。ただし、この試算には移植後のメンテナンスコストや、AIエージェントのワークフロー設計に要したSumner氏自身の時間は含まれていない点に留意が必要だ。

メモリリーク根絶と性能向上

Rust移植の最大の成果はメモリリークの根絶にある。Zigの手動メモリ管理では、開発者が解放処理を誤るとメモリリークが発生する。Rustの所有権モデルはコンパイル時にメモリの解放タイミングを決定するため、解放漏れそのものが発生しない構造になっている。

バイナリサイズの約20%削減は、Rustのコンパイラによるデッドコード除去や最適化が効率的に機能した結果と見られる。パフォーマンスの2%から5%向上は、ZigからRustへの変換によるオーバーヘッドを最小限に抑えつつ、一部の最適化が奏功したことを示している。

ただし、Zig言語が持つ低レベル制御の柔軟性をRustの型システムで完全に代替できたかどうかは、今後の運用を通じて検証が必要な領域である。特に、JavaScript Coreとの連携部分などC++で書かれたコンポーネントとのインタフェースにおいて、Rustのunsafeコードがどの程度必要になるかが、長期的な安全性に影響を与える可能性がある。

編集部の見解

短期的には、Bun 1.4(Canary)のリリースによりJavaScriptランタイム市場における競争構図が変化すると見られる。BunはNode.jsやDenoと比較して起動速度とスクリプト実行速度で優位に立ってきたが、メモリ安全性の不安がエンタープライズ導入の障壁となっていた。Rust移植によりこの障壁が取り除かれれば、CI/CDパイプラインやサーバーサイド実行環境での採用が加速する可能性がある。同時に、AnthropicがBunを自社のClaude Codeランタイムとして活用している点を考慮すれば、Bunの安定性向上はAnthropicのプロダクト品質にも直接的に寄与する。Claude CodeユーザーはBunのバージョンアップに伴うランタイムの安定性改善を享受できる立場にあると言える。 長期的視点では、今回の事例はAIエージェントによる大規模レガシーコードの移植が実用フェーズに入ったことを示す重要なマイルストーンと評価できる。従来、コードベース全体の言語移行は数年にわたるプロジェクトであり、リスクとコストの高さから断念されるケースが少なくなかった。

参考

よくある質問

BunがZigからRustに移植された理由は何か
メモリ安全性の向上が最大の理由である。Zig言語の手動メモリ管理は解放忘れによるメモリリークや不正ポインタ操作によるクラッシュのリスクがあった。Rustは所有権システムとライフタイムによりメモリ関連のバグをコンパイル時に検出するため、Bunを「クラッシュを心配せずに使える安定したソフトウェア」にできると判断された。
Claude Fable 5による移植作業はどのように進められたのか
まずSumner氏がClaudeと3時間議論し移植ガイド(PORTING.md)を作成した。次に1448ファイルのZigコードをRustに変換する動的ワークフローを設計した。実装エージェント1つに2つ以上の敵対的レビューエージェントを組み合わせ、コンパイルエラーとテストスイートをを通じてするまでループ処理を繰り返した。ピーク時には1分間に1300行のRustコードが生成された。
移植にかかったコストはどの程度か
API価格換算で約16万5000ドル(1ドル160円換算で約2640万円)である。全行程で6778のコミットが行われた。Sumner氏は「コードを完全に理解している3人のエンジニアが1年かかる作業を11日間で完了した」と評価している。 ## 参考 - [JavaScriptランタイムのBun、Claude Fable 5を11日間稼働させてZigからRustへの移植を実現。Claudeをどう使ったのか? - Publickey](https://www.publickey1.jp/blog/26/javascriptbunclaude_fable_511zigrustclaude.html) — 2026-07-10公開 - [Bun、ZigからRustへの全面書き換えを完了 - Singulism](https://singulism.com/ja/bun-rust-rewrite-complete) - [sqlite-utils 4.0rc2、Claude Fableが重大バグを発見 - Singulism](https://singulism.com/ja/sqlite-utils-4-rc2-claude-fable-bug-discovery)
出典: Publickey

コメント

← トップへ戻る