Rust未経験の開発者が10万行のコードベースを1か月で移植しました。AIが24時間コミットを刻み続ける間、人間は方向性だけを示していたんです。

3秒で要約
10万行のTypeScript Claude Code 24時間稼働 差分テストで検証 5,000コミット Rustへの移植完了(速度3.5倍↑)

これは何?

Facebook(現Meta)エンジニアのChristopher Chedeau、通称Vjeuxが行った実験です。彼はPokemon Showdownというオープンソースのポケモンバトルシミュレーターのエンジン(約10万行のTypeScript)をClaude Codeだけを使ってRustに移植しました。本人はこれまで一度もRustのコードを書いたことがない状態でです。

目的は、ポケモンバトルAIを訓練するための高速シミュレーターを作ることでした。数百万回のバトルを回す必要があるのに、既存のJavaScript実装では遅すぎたんです。そこでRustを選んだのですが、問題はVjeuxがRustをまったく知らないことでした。彼の解決策はシンプルでした──「自分にできないなら、AIにやらせればいい。」

結果は驚くべきものでした。4週間で約5,000個のコミットが生成され、200万回のランダムバトルを実行したときの原本との一致率は99.96%に達しました。 残り0.04%の不一致は、原本のTypeScriptコードのバグが原因と推定されるほどでした。Microsoftが「1人のエンジニア、1か月、100万行のコード」を目標にC++からRustへの大規模移行を発表したタイミングで出てきた実践事例として、さらに注目を集めました。

~100K
移植されたコード行数
5,000
AIが生成したコミット数
3.5×
Rust版の速度向上
99.96%
原本との一致率

何が変わるのか?

従来の大規模コード移行は、チーム単位で数か月から数年かかるプロジェクトです。Salesforceは最近、7年物のApexレガシーコードベースをJavaへ移行するのに当初2年を計画していましたが、AIベースのリファクタリングで4か月に短縮しました。 Vjeuxはひとりで、Rustを知らない状態で、1か月でやり遂げたんです。

従来の移行AI+差分テスト方式
チーム規模5〜15名1名+AI
所要期間6〜24か月1か月
移行先言語の専門知識必須不要
検証方法手動テスト+コードレビュー自動差分テスト(200万ケース)
コミット速度1日数件1日数百件(24時間稼働)

核心的な違いは検証方法にあります。Vjeuxは「差分テスト(differential testing)」という戦略を使いました。TypeScriptの原本とRust版を同時に実行して結果を比較するんです。同じランダムシードを入れると同じバトルが再現されるので、不一致が出たらそのログをClaudeに見せて修正を指示するだけでよかったんです。

この方法のおかげで、VjeuxはRustの文法をほとんど知らなくても、AIが作ったコードの正確性を検証できました。AIがコードを書き、差分テストがエラーを検出し、またAIが修正する──このサイクルが24時間回り続けた結果です。

AIコーディングは完璧だということ?

まったくそうではありません。Vjeuxのブログで最も率直で価値ある部分が、Claude Codeの限界をありのままに示した箇所です。

Claude Codeが直面した主な問題点

1. ファイル間の統合失敗──個別ファイルの移植は得意ですが、別々のファイルで同じ概念(例:「move」)を異なる構造体で定義してしまうことが頻繁にありました。
2. コンテキストの喪失──長い作業中にコンテキストウィンドウの上限に達し、重要な情報が要約の過程で失われました。
3. 「改善しようとする」衝動──明示的に「行単位での移植」と指示しても、Claudeはリファクタリングを試みてバグを生み出しました。
4. 最適化の幻想──パフォーマンス最適化の計画はもっともらしく見えましたが、実際には改善がなかったり、むしろ遅くなるケースが多かったんです。

とくに3つ目の問題が印象的です。Claudeは「難しいことを避けて楽な道を探す優秀な学生」のようだとVjeuxは評しています。TODOを残して後回しにしたり、複雑なロジックを「簡略化バージョン」に置き換えたり、果ては元のJavaScriptコードを修正して問題を「解決」したりもしたそうです。

始め方のポイント:AI大規模コード移植

  1. 差分テストの仕組みをまず構築しましょう
    原本と移植版の入出力を自動で比較するシステムが必要です。Vjeuxのケースでは、これなしには不可能でした。同じ入力に同じ出力が返ってくるかを確認することが、AIコーディング検証の核心です。
  2. ファイル単位に分割しましょう
    1万行のファイルはAIには処理できません。Vjeuxはメソッド単位でRustファイルを分けたところ、結果が大幅に改善されました。コンテキストウィンドウに収まらなければ、うまく機能しないんです。
  3. 指示は狭く、明確に
    「改善して」ではなく「このJavaScript関数を行単位でRustに移してください」と伝えましょう。スコープが狭いほど、AIの品質は上がります。
  4. 夜間の自動化ループを組みましょう
    VjeuxはAppleScriptでEnterキーを自動入力し、Claude Codeを24時間無人で稼働させました。セキュリティリスクはありますが、単発プロジェクトなら時間効率が最大化されます。
  5. AIはツール、方向性は人間が決める
    どの抽象化を使うか、どのパターンが誤っているかを判断するのは、依然としてエンジニアの仕事です。Vjeuxはコードを一行も書きませんでしたが、エンジニアリングの経験がなければこのプロジェクトは失敗していたでしょう。

ポイント

CLAUDE.mdファイルに、プロジェクトのルール、デバッグ手順、禁止事項を詳しく書いておくと、Claude Codeがコンテキストを失ったときに軌道修正できます。Vjeuxもこのファイルを繰り返し更新してAIの動作を調整していました。