Jarred Sumnerは、Claudeを活用した敵対的レビュー(adversarial-review)ワークフローを駆使し、BunランタイムをZigからRustへと書き換えました。彼は6,778件のコミットを通じて100万行以上のコードをプッシュし、16,000件ものコンパイルエラーを解消しました。この取り組みでは50件のClaude Codeワークフローが実行され、最大で64個のClaudeエージェントが同時稼働し、大規模な言語移行のための再現可能なプレイブックを残しました。

なぜこの書き換えが重要なのか

レガシーコードとの格闘や戦略的な言語移行に直面しているあらゆるプロジェクトにとって、「Sumner Method(サマーナー・メソッド)」は、漠然とした約束ではなく、具体的なテンプレートを提供します。

AIを「代替品」ではなく「パートナー」に変えたワークフロー

Sumnerのプロセスは、密接にループしています。

  1. タスク割り当て – エージェントが具体的な移行タスクを受け取ります。
  2. 実装 – 2番目のエージェントがRustコードを記述します。
  3. 敵対的レビュー – 3番目のエージェントは、コードが間違っていると仮定して差分(diff)を精査し、ソースファイルとテストを用いて、あらゆる主張が誤りであることを証明しようと試みます。
  4. 修正 – 実装エージェントがレビュアーの指摘事項を取り入れます。
  5. 自動ゲート – コンパイラ、テストスイート、および静的解析チェックが変更内容を検証します。

最も重要なルールは分離です。書き手はレビュアーの推論を見ることはなく、レビュアーは書き手の意図を見ることはありません。バイアスを排除することで、システムはレビュアーに対し、形ばかりの「問題なし(looks good)」という承認ではなく、隠れたバグを徹底的に探し出すことを強制します。

Rustの機械的に検証可能なフィードバックは、人間が読み取れる数千もの潜在的なエラーを、管理可能なキューへと変換します。コンパイルエラー、borrow-checkerの失敗、あるいはClippyの警告のそれぞれが、敵対的レビュアーが直接ターゲットにできる作業項目となります。

8フェーズのプレイブック

Sumnerはこのワークフローを8つの連続したフェーズに凝縮しました。各フェーズには、独自のタスクキュー、完了の定義(definition of done)、レビュー用プロンプト、および自動ゲートが備わっています。

  • フェーズA – 事実の抽出とガイドの作成 – アーキテクチャに関する事実を収集し、移行ガイドを作成します。
  • フェーズB – 機械的なファイル変換 – ZigファイルをRustのスケルトン(骨組み)に変換します。
  • フェーズC – コンパイルエラーの修正 – 変換中に記録された16,000件のコンパイルエラーを解決します。
  • フェーズD – ランタイム動作の一致 – Rustの出力がZigの動作を正確に反映していることを検証します。
  • フェーズE – テストスイートの完了 – 既存のすべてのテストに合格させます。
  • フェーズF – パフォーマンスの回復 – 書き換えによって生じたあらゆる速度低下を排除します。
  • フェーズG – コード品質の磨き上げ – Rustらしい(idiomaticな)パターンを適用し、可読性のためにリファクタリングを行います。
  • フェーズH – セキュリティの強化unsafeコードの監査を実行し、発見された脆弱性に対処します。

各フェーズは次のフェーズへと繋がり、ステップの飛ばしを防ぎ、デグレ(退行)を早期に発見することを保証します。

プレイブックの入手先

Sumnerは、テンプレート、プロンプト、およびフェーズ定義の全セットを https://github.com/Lumafy/sumner-method でオープンソースとして公開しています。Bunの移行の詳細を解説した関連記事はこちらです:https://dev.to/lumafy/the-sumner-method-what-buns-ai-assisted-zig-rust-rewrite-teaches-about-large-migrations-2gpo。継続的な議論のためのTelegramコミュニティは https://t.me/GyaanSetuAi で運営されています。