概要
GitHubはCopilot CLI・アプリ・SDKのランタイムを、TypeScript/Node.jsからRustへと全面的に書き換えたことを明らかにした。対象となった本番コードは80万行超に及び、AIエージェントを主体とした「AI支援リライト」によって約14.5週間、128件のプルリクエストという比較的短期間で移行を完了させている。注目すべきは、この移行作業と並行して通常のリリースサイクルも維持し続けた点で、移行期間中だけで135件(安定版35件、プレリリース100件)のリリースを出荷したという。最大の成果はパフォーマンスで、クライアントの起動からシングルターンのセッション生成までの時間が5.25秒から292ミリ秒へと、約18倍に短縮された。Node.js/V8ランタイムのオーバーヘッドが解消されたことで、クライアント1つあたりのメモリ使用量も約100MB削減されている。
移行の手法とスケール
今回の移行では、TypeScript版とRust版を並行開発してある時点で切り替えるのではなく、個々のコンポーネントを段階的にRust実装へ置き換えていく漸進的な手法が採られた。移行途中はTypeScriptとRustが共存するため、両者を橋渡しする一時的なN-API相互運用レイヤーを構築。このレイヤーは移行のピーク時には内部向けN-APIエクスポート2,019件、TypeScript側の呼び出し箇所3,356か所にまで膨れ上がったが、移行完了とともに撤去されている。最終的な成果物は本番用Rustコード832,378行、Rust単体テスト468,689行という規模に達し、移行中には4,478回のcargo checkが実行され、そのうち87.1%がクリーンに完了したという。実装の大部分はAIエージェントが生成し、人間はコンパイル・テスト・レビューを担当する役割分担で進められた。新しいRustランタイムはC ABI経由の組み込み統合と、プロセス外モードの両方をサポートしており、Copilot SDK自体は引き続きTypeScript、Python、Go、.NET、Java、Rustといった言語別インターフェースを提供し続けている。
課題と今後の展望
一方でコミュニティからは、この種の大規模書き換えにおける検証の難しさを指摘する声も上がっている。特に「キャンセル処理、リトライ、バックプレッシャー」といった非同期処理まわりの挙動や、レガシーシステムに潜む「文書化されていない暗黙の動作契約」をAIエージェント主導の書き換えでどこまで正確に再現できるかが懸念点として挙げられた。大規模コードベースのAI支援移行は今後も増えていくと見られるが、今回のGitHubの事例は、段階的な置き換えと一時的な相互運用レイヤーによってリリースを止めずに大規模書き換えを完遂できることを示した一方、非決定的な振る舞いや暗黙の契約の検証という課題が依然として残ることも浮き彫りにしている。