GitHub Copilot Coding AgentをローカルLLMで再現してみた(無料・ローカル)
概要
GitHub CopilotのAgent機能は強力ですが、月額39ドルの費用やデータの外部送信が気になる方も多いはず。
本記事では、GitHub CopilotのCoding Agent相当の仕組みをローカルLLMのみで実現しました。
issueに書いて欲しい仕様を書いて、labelにcoding agent
を振っておくと、自動でissueを見つけてコードを生成、git上に出力してくれます。
(現状では、試したのはhello world出力のみ。多分もうちょっと複雑なことをするにはプロンプトの改良が必要,ただ、qwen3-30Bが凄いので、結果動きそう)
- issueからタスクを自動取得し
- LLMがコードを提案・改良し
- 必要に応じてMCP (Model Context Protocol) サーバーのツールを使ってGitHub APIにアクセス
という一連の処理を、無料で・ローカル環境で・プライバシーを守りながら実行できます。
✅ 実装リポジトリはこちら
https://github.com/notfolder/coding_agent
使い方(Dockerに対応しました!!)
-
プロジェクト内のsample.envを参考に.envファイルを作成、APIキーを設定
-
githubかgitlabのissueにllmにお願い事をかく
-
issueに'''coding agent'''というラベルを付ける
-
run.shをcronで定期起動するとllmがissueを読んでコーディングしたりREADME.md書いたりしてくれます
目的と背景
GitHub Copilot ChatやCopilot Workspaceが登場し、"issue からコードを生成する"という開発スタイルが一般化しつつあります。
しかし、商用モデルを前提とするこれらのツールには次のような制約があります。
- 月額費用(Copilot Pro/Enterprise: $39)
- API利用時の追加課金
- 外部サービスにコードを送信する必要がある
そこで今回は、ローカルで動作するLLM(例:Qwen 30B、Mistralなど)とMCPサーバーを連携し、GitHub Copilot Coding Agentと同様の動作を模倣・拡張できるシステムを構築しました。
システム全体像と仕様(spec.mdより)
以下の仕様に基づき、エージェント全体の処理を構成しています。
主なコンポーネント
- LLM Client(lmstudio / ollama / openai に対応した抽象クラス)
- MCPToolClient:MCPサーバーへの同期呼び出しを抽象化
- TaskGetterFromGitHub:GitHub issueを取得し、Taskとして加工
- TaskGitHubIssue:GitHub上のissueへのコメント/ラベル操作などを抽象化
主な処理フロー
- MCPサーバーを
config.yaml
に定義された設定で起動 - GitHubから「coding agent」ラベル付きissueを取得
- 各issueについて、プロンプトを作成しLLMを呼び出す
- LLMの応答に含まれる
command
指示に基づきMCPサーバーを操作 - 結果を再度LLMに渡して応答を継続
-
done: true
が返るまで繰り返し、完了したらラベル付与・コメント投稿
JSON-RPCでMCPツールを呼ぶときの注意点
MCPサーバーとの通信はJSON-RPC形式で行われます。重要なポイントは以下の通りです。
req_obj = {
"jsonrpc": "2.0",
"id": self._id_counter,
"method": "tools/call",
"params": {
"name": tool,
"arguments": args
}
}
❗️ハマりどころ:tool名をそのままmethodに書くと動かない!
{
"jsonrpc": "2.0",
"method": "update_issue",
...
}
のようにすると Method not found
しか返ってきません。
✅ 正しくは tools/call
を明示
{
"jsonrpc": "2.0",
"method": "tools/call",
"params": {
"name": "update_issue",
"arguments": {
...
}
}
}
これに気づかず、MCPサーバーのレスポンスがずっと「Method not found」で悩み、3週間ほど格闘しました。
特徴と利点
💰 完全無料
- ローカルLLM(例: Qwen 30B, Mistral)を使用し、OpenAIのAPI料金なし
- GitHub APIアクセスもトークンベースで制御(Docker経由)
🔒 プライバシー保護
- LLMもMCPもすべてローカル実行
- 企業内や個人の閉じた開発環境でも安心
🧹 拡張性
- MCPプロトコル準拠のサーバーであれば何でも繋がる
- GitHub操作以外のツール(メール通知、ChatOps等)も追加可能
- Gitlabを実装予定
コード構成(抜粋)
.
├── config.yaml # 各種設定
├── main.py # エージェント起動スクリプト
├── clients/
│ ├── mcp_tool_client.py # MCPサーバー呼び出しロジック
│ └── lm_client.py # LLMプロバイダ別の抽象クライアント
├── handlers/
│ ├── task_handler.py
│ ├── task_getter.py
│ └── task_getter_github.py
たとえば mcp_tool_client.py
では、上述した正しい tools/call
の形式でMCPにリクエストを送り、レスポンスを受けてLLMへ渡す流れを記述しています。
実行方法(例)
- GitHubトークンを環境変数に設定
-
cron
でmain.py
を一定間隔で実行 -
config.yaml
で使用するLLMやMCPツールを定義 -
main.py
を実行してGitHub issueの自動処理開始!
まとめ・所感
本記事では、GitHub Copilot Agent的なタスク駆動型の開発支援を、ローカルLLM + MCPサーバー + GitHub APIで再現しました。
- ローカルLLMなので コストゼロ、情報流出なし
- chatgptと相談して
spec.md
を作って、chatgptにコーディングしてもらいました - JSON-RPCの仕様落とし穴に注意が必要(特に
tools/call
の部分)
Copilot Agentを使いたいが課金や情報管理が気になる方にとって、本記事が参考になれば幸いです。
参考リンク
この記事の作成過程
ChatGPTと複数回の対話を重ねながら、仕様検討・コード設計・エラー対処まで行いました。