ツールチュートリアル · 小互解読

Anthropic流コード移行6ステップ:Bunの百万行を2週間でZigからRustへ

テンプレートとプロンプトはすでにオープンソース化済み。Bunの移行では未キャッシュ入力トークンだけで59億、API価格換算で約16.5万ドルを消費した
1分で要点
  • 本番環境で動くコードベースをまるごと別言語で書き換えるには、業界相場で4年、300~400万ドルかかり、途中で頓挫するリスクも高いとされます。Anthropicの社員はこの1か月で10個のコードパッケージを移行しました。Bunでは100万行を2週間足らずで移行し、マージ前の既存テストはすべてグリーンでした
  • この手法の核心は一つです。コードではなく、そのコードを生み出す本番プロセス(ループ)を直す。同じミスが数十のファイルで繰り返されるなら、ルールブックに一文を加え、該当箇所をまとめて作り直します。ファイルを1つずつ手直しするのではありません
  • 着手前に必ず「判定役」を作ります。既存テストから新旧両方で実行できるものを選び、アサーションとして書き直します。さらに、わざと壊したコードで検証します。壊れたコードを検知できなければ、判定役とは呼べません。これがなければ「いつ移行が終わったか」を判定できません
  • 実装の細部はそのまま拝借できる。作業キューは毎回ディスクから再計算するので中断しても続行可能。実装は小型モデル、評価は大型モデルが担当。2つの評価は互いに独立したコンテキストを持ち、意見が割れたら3体目のAgentが裁定する。訳せない箇所は統一して // TODO(port) を打って後回しにする
  • コストと成果はいずれも数字で示されています。Bunの移行では未キャッシュ入力トークン59億+出力トークン6.9億を使い、API価格換算で約16.5万ドルです。Mike Krieger のプロジェクトでは、移行後にビルド時間が8分から約2秒へ短縮され、プログラムの起動が6倍速くなり、デプロイパイプラインを丸ごと1本廃止しました
これはAnthropicが自社モデルの活用法を語る資料であり、2つの事例の主役はどちらも自社の人間、成果の数字も自社側の言い分によるものです。本文中のすべてのデータはこの前提で読んでください。以降は逐一注記しません。
1導入

1か月で10個のコードパッケージを移行

100万行のコードを別言語に書き換え、2週間で完了、マージ前の既存テスト一式はCIで全部グリーンだった。

これはAnthropic公式アカウントのClaudeDevsが発表した実務記事で、この1か月で社内がClaude Codeを使ってどうコード移行を行ったか、本番環境で動くコードベースを丸ごと別言語に移した経緯を語っています。テンプレートごと全部さらけ出して誰でも真似できるようにしたもので、使われたのはClaude Fable 5、Claude Opus 4.8、Claude Codeのdynamic workflowsです。

この1か月間で、Anthropicの開発者は10個のコードパッケージの移行を完了しました。規模は数万行から数十万行までさまざま。記事では、そのうちの2件だけが詳しく紹介されています。

Bun · Zig → Rust
100万行生成されたコード量。所要時間は2週間足らず
100%マージ前、Bunの既存テストスイートがCIで通過した割合
19件マージ後に浮上したリグレッションもともと正常に動いていた機能が、コードを変更した後に壊れること。「新機能にバグがある」とは別の話。、すべて修正済み
6月Rust版はすでにClaude Codeに組み込まれて稼働中
Mike Krieger · Python → TypeScript
週末1回分で16.5万行のTypeScriptを移行完了
数百体今回の移行で使われたAgentの数
8回の段階ゲート全体の流れをいくつかの区間に分け、各区間の終わりに検査を1つ設ける。通らなければ次の区間には進めない。、加えて対抗評価3ラウンド
コマンド単位で最後に新旧両方の各コマンドの出力をdiffして突き合わせる

Bunの移行を手がけたのはJarred Sumner、Bunの共同創業者で、現在はAnthropicのテクニカルスタッフです。Python側を手がけたのはMike Krieger、Instagramの共同創業者で、現在はAnthropic Labsの共同責任者です。

Jarred Sumnerによる百万行規模のPRのGitHubページ
Jarredのその百万行PRのGitHubページ。画像出典:ClaudeDevs原文
2ハードルの変化

以前はなぜ誰も手を出さなかったのか

Jarredが当初Zigを選んだ理由は、CレベルのパフォーマンスとシンプルさをJarredの言葉を借りれば、オークランドの狭いアパートで、大規模言語モデルすらまだない時代に、たった1人でBunを1年かけて書き上げる前提として両立できたからです。シンプルさには代償があり、その代償はずっとそこにありました。Bunのコマンドラインツールは現在月間ダウンロード数が1000万を超え、Claude Code内部でも大量に使われています。

ほんの前四半期まで、その代償はロードマップを凍結し、いくつもの四半期にまたがるプロジェクトにリソースを賭けるほどの理由にはなっていませんでした。

前四半期以前
  • 4年サイクル、300~400万ドルのエンジニアリングリソース
  • 期間中はロードマップ凍結
  • 2つのコードベースを何四半期、あるいは何年も並行維持
  • 最悪の結果は90%の類似度止まりで、着手前より厄介になる
現在
  • 数万~数十万ドル規模、それでも本物のコストではある
  • 最悪の結果はブランチを削除してやり直すだけ
  • 着手理由に「移行しないと立ち行かない」はもう不要
  • changelogに1年放置されたメモリバグの修正パッチ、あるいは長年のボトルネックがあれば十分

Mikeのプロジェクトはまさにボトルネックに背中を押されて始まりました。彼のチームが手がける内部ツールは単一実行ファイルにパッケージしてユーザーに配布する必要があり、Pythonのツールチェーンはプラットフォームごとにビルドで約8分かかっていました。ビルドマトリクス全体を回すと、リリースのたびに30分待つ羽目になっていました。TypeScriptへの移行後、同じビルドが約2秒に短縮され、実行ファイルの起動は6倍速くなり、チームは独立したデプロイパイプラインを丸ごと退役させました。

3核となる原則

同じミスが繰り返されたら、ルールを直す

記事全体でいちばん価値のある一文はこれです。

The core insight is that you don't fix the code. You fix the process (loop) that produced the code.核心となる認識は、コードを直すのではなく、そのコードを生み出したプロセス(ループ)を直すということだ · ClaudeDevs

これを具体的な行動に落とすとこうなります。評価Agentが数十のファイルで同じミスを繰り返し検出したなら、手を伸ばす先はそれらのファイルではありません。ルールブックに一文加え、影響を受けたそのバッチをまとめて再生成する。ルールブックはプロセス全体を通じて分厚くなる一方で、コードが手作業でパッチを当てられてルールブックに合わせられることは一切ありません。