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

Anthropicがコード移行の6ステップを公開:Bunは100万行を2週間でZigからRustへ

テンプレートとプロンプトはオープンソース化済み。Bunの移行では未キャッシュ入力トークン59億を消費、API価格で約16.5万ドル相当
1分でわかる要点
  • 本番稼働中のコードベースの言語を完全に切り替えるのは、業界の一般的な見積もりでは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本丸ごと廃止できました。
これは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つステージゲートプロセス全体をいくつかの段階に分け、各段階の終わりにチェックを設け、通過しなければ次へ進めない仕組み。+敵対的レビュー3回
全コマンド最後に新旧両方のコードで各コマンドの出力をdiff照合

Bunの移行を担当したのは、Bunの共同創業者で現在はAnthropicのテクニカルスタッフであるJarred Sumner氏。Python移行は、Instagram共同創業者で現在はAnthropic Labsの共同責任者を務めるMike Krieger氏です。

Jarred Sumner氏の100万行PRのGitHubページ
Jarred氏の100万行PRのGitHubページ。画像出典:ClaudeDevs原文
2前提の変化

これまで誰も挑めなかった理由

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本退役させることができました。

3核となる原則

同じエラーが繰り返し出たら、ルールを変える

この記事全体で最も価値があるのは、この一文です:

The core insight is that you don't fix the code. You fix the process (loop) that produced the code.核心的な認識:コードを直すのではなく、コードを生み出すプロセス(ループ)を直すのです・ClaudeDevs

これを具体的な行動に落とすとこうなります。レビューAgentが数十のファイルで同じエラーを繰り返し検出した場合、あなたの手はそれらのファイルに向かいません。ルールブックに一文追加し、影響を受けるバッチを再生成します。ルールブックはプロセス全体を通してどんどん厚くなっていきます。しかし、コードに手動でパッチを当てることは決してありません。