Anthropicがコード移行の6ステップを公開:Bunは100万行を2週間でZigからRustへ
- 本番稼働中のコードベースの言語を完全に切り替えるのは、業界の一般的な見積もりでは4年・300〜400万ドル、しかも途中で頓挫する可能性が高い。Anthropicはこの1ヶ月で10個のコードパッケージを移行完了。Bunの100万行は2週間足らずで、マージ前の既存テストは全てグリーンだった
- この手法の核心は一言:コードを直すな、コードを生み出すループを直せ、です。同じエラーが何十ものファイルで繰り返し発生する場合、正しい対処はファイルを1つずつ直すのではなく、ルールブックに一文追加して対象を一括で作り直すことです
- 着手前に「判定役」の構築が必須です。既存テストから新旧両方で実行できるものを選び出し、アサーションに書き換えます。さらに意図的に壊したコードで検証し、壊れを検出できない判定役は判定役ではありません。これがないと「いつ移行完了か」の判断基準がありません。
- 工程の詳細はそのまま流用可能です。作業キューは毎回ディスクから再計算するので、中断しても再開できます。実装は小モデル、レビューは大モデル。レビューはそれぞれ独立したコンテキストで行い、意見が割れたら第3のAgeが裁定。どうしても翻訳できない箇所は一律
// TODO(port)を打って後回しにします - コストと効果の計算も明記されています。Bunは未キャッシュ入力トークン59億+出力トークン6.9億、API価格で約16.5万ドルです。Mike Krieger氏のプロジェクトは移行後、コンパイルが8分から約2秒に短縮、起動が6倍高速化、デプロイパイプラインを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の移行を担当したのは、Bunの共同創業者で現在はAnthropicのテクニカルスタッフであるJarred Sumner氏。Python移行は、Instagram共同創業者で現在はAnthropic Labsの共同責任者を務めるMike Krieger氏です。
これまで誰も挑めなかった理由
Jarred氏が当初Zigを選んだのは、C言語並みのパフォーマンスを出しつつ十分シンプルだったからです。本人の言葉を借りれば、大規模言語モデルがない時代に、オークランドの狭いアパートで一人が1年かけてBunを書くための前提条件でした。シンプルさには代償が伴い、その代償は常に存在していました。BunのCLIツールは現在月間ダウンロード数が1,000万を超え、Claude Code内部でも多用されています。
つい先四半期まで、これらの代償はロードマップを凍結し、複数四半期にまたがるプロジェクトにリソースを注ぐ理由にはなり得ませんでした。
- 期間4年、エンジニアリングリソース300〜400万ドル
- 期間中ロードマップは凍結
- 2つのコードベースを複数四半期〜数年にわたり並行運用
- 最悪の結果は類似度90%で、着手前より面倒な状態になること
- 規模は数万〜数十万ドル程度。それでも決して安くはない
- 最悪の結果はブランチを削除してやり直すこと
- 着手理由に「移行しないと生き残れない」は不要
- changelogに1年載ったままのメモリバグ修正、あるいは長期的なボトルネック解消、これで十分な理由になる
Mike氏のプロジェクトも、まさにこのボトルネックがきっかけでした。彼のチームが開発した内部ツールは単一の実行可能ファイルにパッケージ化してユーザーに配布していました。しかしPythonのツールチェーンはプラットフォームごとのコンパイルに約8分かかり、ビルドマトリクス全体では毎回のリリースに30分待たされていました。TypeScriptへの移行後、同じコンパイルは約2秒になり、実行可能ファイルの起動は6倍高速化、チームは独立したデプロイパイプラインを丸ごと1本退役させることができました。
同じエラーが繰り返し出たら、ルールを変える
この記事全体で最も価値があるのは、この一文です:
The core insight is that you don't fix the code. You fix the process (loop) that produced the code.核心的な認識:コードを直すのではなく、コードを生み出すプロセス(ループ)を直すのです・ClaudeDevs
これを具体的な行動に落とすとこうなります。レビューAgentが数十のファイルで同じエラーを繰り返し検出した場合、あなたの手はそれらのファイルに向かいません。ルールブックに一文追加し、影響を受けるバッチを再生成します。ルールブックはプロセス全体を通してどんどん厚くなっていきます。しかし、コードに手動でパッチを当てることは決してありません。