GitHubのエンジニア、Stephen Toub氏は9月16日、Copilotエージェントが主導した大規模な書き換えの振り返りを公開した。Copilotエージェントのランタイムを、TypeScript/Node.jsからRustへと全面的に移行したという内容だ。もともと本番環境で稼働していたTypeScriptは約43万行あったが、最終的に83万2378行の本番用Rustコードとなり、さらに46万8000行のRust単体テストと17万4000行のエンドツーエンドテストが加わった。
作業期間は5月12日から8月21日までの約14.5週間。この間に128件のプルリクエストが段階的にmainブランチへマージされ、リリースも継続的に行われた。累計135バージョン(プレリリース100件、安定版35件)で、1日あたり平均約1.3件のペースだ。
コードの大半はモデルが書いた、では人は何をしたのか
Toub氏はこの取り組みについて率直にこう総括している。
"A project that would have taken a whole team of developers a year or two before agents was now completed primarily by a single developer, in only a few months."
エージェント登場以前ならチーム全体で1〜2年かかっていたはずのプロジェクトが、今回は主に1人の開発者によって、わずか数カ月で完了した。
主に使われたモデルはClaude Opus 4.8、GPT-5.6 Sol、そしてClaude Haikuシリーズだ。スループット最適化を担当するサブエージェントには、Opus 4.8とGPT-5.6 Solが多く使われた。ここで興味深いのは、マイクロソフト傘下のGitHubが自社の中核コンポーネントを本番レベルで書き換えるにあたり、OpenAI一色ではなく、競合であるAnthropicのモデルを主力に据えていた点だ。
人間が担った役割ははっきりしている。主導したエンジニア自身のやり取りの内訳によると、「レビュー、テスト、CI」に31%、「技術的判断への異議」に17.4%、「作業を最後までやり切らせること」に15%の時間を割いたという。アーキテクチャや設計上のトレードオフ、最終的なマージの判断は、一貫して人間の手に残されていた。モデルがコード量を積み上げ、人間が方向性と受け入れ基準を握る、という役割分担だ。
検証は既存テスト頼み、判明した不具合は約50件
今回の書き換えでは新たな受け入れ基準を別途用意したわけではなく、既存のエンドツーエンドテストを新しいRustコードに対して継続的に走らせ、段階的にリリースすることで、リグレッションを早い段階かつ小さな範囲で検出する方式を取った。ほかにも参考になる数値がいくつかある。プロンプトキャッシュのヒット率は96.22%、コンテキスト圧縮はセッション全体で5,116回発生した。
失敗した点も正直に記録されている。プロジェクト全体を通じて判明した既知の問題は50件あまりで、5つのカテゴリーに分類される。移行が不完全だったもの、状態管理やライフサイクルに関する問題、挙動の契約が一致しないもの、ホスト境界に関する問題、そしてテスト側の期待値自体が誤っていたもの、の5種だ。そのほとんどは安定版に至る前に修正された。最後のカテゴリーは、同様の移行作業をする人への注意点として特に重要だ。古いテストで新しい実装の正しさを判定するとき、間違っているのはテストの側であって新しいコードではない、というケースもある。
他のエンジニアリングチームにとっての意味
自社の中核コンポーネントをAIで大規模に作り直す、という今回のような事例は、ベンチマークのスコアよりもコーディングエージェントの実際の限界をよく示している。そのまま応用できる教訓は3つある。まず、一発での全面書き換えを期待しないこと。128件のプルリクエストを段階的にマージし、1日に何度もリリースするという継続的インテグレーションのやり方が、リスクを分散させている。次に、受け入れ基準を事前に固定しておくこと。今回はすべて既存のE2Eテストを物差しにしており、この物差しがなければ「モデルの出力が正しいかどうか」を判断できない。最後に、人の作業がコードを書くことからレビュー・意思決定・見落としの発見へと移ったことで、1人が監督できる書き換えの規模が一桁引き上げられた。
留意すべき点もある。アーキテクチャ面のメリット(プロセス内埋め込み、メモリオーバーヘッドの低減、起動の高速化)は、原文では定性的な説明にとどまり、メモリ・レイテンシー・スループットについての前後比較の数値は示されていない。この書き換えが実際にどれだけの性能向上をもたらしたのかは、今回の振り返り記事からは検証できない。TypeScriptからRustへの移行というやり方も、すべてのチームにとっての標準解ではない。それが成立するのは、頼りにできるだけの充実したテストがあり、毎日でもリリースする覚悟があるチームに限られる。
参考資料:CocoLoop、GitHub Blog(Stephen Toub氏)。83万2000行、128件のプルリクエスト、14.5週間、96.22%のキャッシュヒット率、約50件の既知の問題といった数値は公式の振り返り記事で確認した。