- CopilotエージェントランタイムをTypeScriptからRustへ全面移植
- 80万行超のRustコードの大半をAIエージェントが作成、128件のPRで段階出荷
- SDKの別プロセス起動をやめ、C ABIでインプロセス埋め込みが可能に
何が発表されたのか
GitHubは2026年9月17日、CopilotエージェントランタイムをRustへ書き直したとブログで説明した。このランタイムは、GitHub Copilot CLI、GitHub Copilotアプリ、GitHub Copilot SDKに共通する土台であり、アプリケーションやサービスに組み込めるエージェント実行基盤(エージェントハーネス)と位置づけられている。もともとはTypeScriptで、Node.jsとV8 JavaScriptエンジン上に実装されていた。移植後のコードは80万行を超えるプロダクションRustで、その大半をAIエージェントが書いたという。
変更は128件のプルリクエストとしてmainブランチに取り込まれ、最後に一括で切り替えるのではなく段階的に出荷された。避けられなかった少数の回帰は、その都度すばやく発見・修正されたとしている。ブログでは、エージェント以前なら開発者チーム全員で1〜2年かかったであろうプロジェクトが、主に1人の開発者によって数カ月で完了したと述べられている。その間、チームの他のメンバーはランタイムの機能拡張を続けていたという。
なぜRustへ移植したのか
ランタイムはCopilot CLIだけを支えているわけではない。VS CodeやVisual Studio、CCA(Copilot cloud agent)、Copilot Code Review(CCR)、Copilot Cowork、Copilot Studio、そしてExcel、Outlook、PowerPoint、Wordなど、Microsoft・GitHub・エコシステムの多数の製品が同じランタイムを土台にしている。各製品は独自のエージェントループを実装するのではなく、ランタイムへの入り口であるGitHub Copilot SDKを使う形に置き換えてきた。
問題は、共有する対象であるランタイムの作りにあった。SDKは当初、論理的には逆であるべき構造、つまりランタイムの上にCLIが載る構造ではなく、CLIの上にSDKを重ねる形で作られた。SDKから利用するたびにCLIが子プロセスとして起動され、JSON-RPCで関数呼び出しをやり取りする仕組みだった。そのためC#、Python、Go、Java、Rustなど各言語のSDKは、クライアントごとにNode.jsやV8を含むバイナリを同梱する必要があり、最小でも約100MBのワーキングセットを要したという。
Rustを選んだ理由と移植手法
Rustが選ばれた理由として、依存とオーバーヘッドが小さいこと、C ABI経由でインプロセスに埋め込めること、起動時や常時稼働時の負荷が小さくリソース使用を予測しやすいこと、6種類のSDK言語からFFIで扱いやすいこと、サプライチェーンリスクの小さいツールチェーンが使えることが挙げられている。一方で、すべての大規模TypeScriptプログラムをRustにすべきだという主張ではないとも明記されている。
移植は、新実装を完成させてから一括で切り替える「ビッグバン」ではなく、コンポーネントごとにTypeScriptからRustへ原子的に置き換える「インプレース」方式で進められた。mainブランチは常に活発なままで、常に出荷可能な状態が保たれたとしている。各プルリクエストの変更範囲が1つのコンポーネントやスライスに限定されるため、差分のレビューもしやすかったという。
規模の見積もりと残る課題
当初の移植計画は2026年5月初旬に立てられ、ランタイムは約13万行のTypeScriptと見積もられていた。しかし移植と並行してTUI層からランタイム層へ押し下げられるコードがあり、さらに週に数百件のプルリクエストが新規TypeScriptを追加し続けた。結果として、約43万行のプロダクションTypeScriptが移植を通過したと推定されている。移植期間中、ランタイムは約30万行のTypeScriptを取り込み約43万行を削除し、Rustは約120万行が入り約36.5万行が削除されたという。
ブログは、CLIが今もランタイムの内部を直接呼び出している箇所が複数あり、SDKの公開サーフェス上に完全に移す作業は継続中だとしている。TUIとランタイムを分離する作業も進行中で、今回の記事が主に扱うのはランタイムの移植である。1人の開発者とAIエージェントで数カ月という期間で完了したとされるが、使用したモデルや具体的な運用手順は本文では示されていない。同じ進め方が他の組織でそのまま再現できるかは、現時点では判断できない。
| 項目 | 移植前(TypeScript) | 移植後(Rust) |
|---|---|---|
| 実装言語 | TypeScript(Node.js、V8) | Rust |
| 実行形態 | CLIを子プロセスで起動しJSON-RPCで連携 | C ABIでインプロセスに埋め込み。stdin/stdoutやソケットのサーバー形態も選択可 |
| クライアント側の負担 | 各SDKがNode.jsやV8を含むバイナリを同梱。最小約100MBのワーキングセット | 原文に数値の記載なし |
| 移植の規模 | 当初見積もりは約13万行。移植期間中に約30万行を取り込み約43万行を削除 | 80万行超。移植期間中に約120万行を追加し約36.5万行を削除 |
| 性能 | 記載なし | 桁違いに改善(orders of magnitude) |
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人の開発者によって、わずか数カ月で完了した
今後の見通し
ランタイムのRust化は完了が宣言されたが、CLIをSDKの公開サーフェスへ完全に載せ替える作業は継続中とされている。今後は、各言語SDKのパッケージからNode.jsやV8への依存が実際に外れていくか、アウトプロセス構成が必要な場面で性能やメモリ使用量がどう変わるかが焦点になるとみられる。移植期間中に発生した回帰がどの程度だったのか、具体的な数値や内訳が示されれば、大規模な移植の進め方を評価しやすくなる。
日本の開発者・IT企業にとっての意味
今回の事例は、複数言語向けのSDKを持つツールを提供する企業に対して、ランタイムをどこに置くかという設計上の問いを突きつける。TypeScriptとNode.jsで素早く作り、SDKをCLIの上に重ねる構成は日本でもよく見られるが、クライアントごとに約100MBのワーキングセットを負担する構造は、組み込み先のアプリにとって無視できない。ネイティブバイナリとC ABIでインプロセス利用を可能にする設計は、SDK提供側の選択肢として参考になる。加えて、AIエージェントが大半のコードを書き、128件のPRに分けて段階的に出荷した進め方は、大規模な書き換えの見積もりやレビュー体制を考える材料になる。ただしCLIのTUIは依然としてTypeScript側にあり、すべてがRustになったわけではない点は押さえておきたい。
気になる点
- Copilot SDKはNode.jsなしで使えるようになるのか
- ランタイムは純ネイティブバイナリとしてC ABIを公開し、インプロセスで各言語のSDKから利用できる形になったと説明されています。アウトプロセスが必要な場合はstdin/stdoutやソケットのサーバー形態も選べます。ただしCLIのTUI部分はTypeScriptが残っており、CLI形態では引き続きNode.jsが必要とみられます。
- 日本企業のTypeScript資産をそのまま移行できるのか
- 移植はコンポーネント単位でTypeScriptからRustへ原子的に置き換える方式で進められました。稼働中のmainブランチを止めずに進められる点は参考になりますが、対象はGitHub自身のランタイムであり、一般的な移行手順としてまとめられたものではありません。適用可否は個別の依存関係次第です。
- 1人とAIエージェントで数カ月という規模は再現できるのか
- 原文では、以前ならチームで1〜2年かかった規模を主に1人の開発者が数カ月で完了したと述べられています。ただし使用したモデルや手順の詳細は示されておらず、そのまま再現できるかは不明です。チームの他のメンバーが並行して機能拡張を続けていた点も前提として挙げられています。
用語解説
- エージェントランタイム(エージェントハーネス)
- AIエージェントの推論、ツール呼び出し、セッション管理などを担う実行基盤。複数製品が共通で利用する。
- C ABI
- C言語の呼び出し規約に基づくバイナリ互換のインターフェース。多言語から共通ライブラリを呼ぶ際に使われる。
- FFI
- Foreign Function Interface。ある言語から別の言語で書かれた関数を呼び出す仕組み。
- JSON-RPC
- JSON形式でメソッド呼び出しと応答をやり取りする軽量なプロトコル。プロセス間連携などに使われる。
- TUI
- Text User Interface。端末上で動作する文字ベースのユーザーインターフェース。
出典
Migrating the GitHub Copilot runtime to Rust, using Copilot
AI導入も顧問も、お任せください
何から手をつけるか、どこまでAIに任せるか。自社の業務に合わせて整理し、導入から運用まで伴走します。相談だけでも構いません。
AI導入について相談する