はじめに
「プロジェクトの目標を日本語で入力するだけで、Pythonファイルの設計・実装・テスト・デバッグまで全部やってくれるツールがあったら便利じゃないか?」
そんな発想から生まれたのが Agentic Coder です。
GitHub CopilotやChatGPTのようなクラウドベースのAIツールとは根本的に異なり、このアプリは完全にローカル環境で動作します。APIキーは不要、インターネット接続も不要(モデルダウロード時のみ)、コードが外部サーバーに送信されることもありません。Ollamaを通じてローカルLLMを呼び出し、すべての処理をあなたのマシン上で完結させます。
この記事では、Agentic Coderの目的・仕組み・設計思想について解説します。
こちらのプロジェクトのソースコードはGitHubで公開しています。
そして最近このプロジェクトをもとにRAG組み合わせ、AIコーディングエージェントを作ってみました。
是非一度試してみてください。
なぜクラウドAIではなくローカルLLMなのか
クラウドベースのAIコーディングツールには優れたものが多くありますが、いくつかの根本的な問題があります。
プライバシーの問題
業務コード、社内ロジック、個人プロジェクトをクラウドサービスに送信することに抵抗を感じる開発者は少なくありません。特に企業環境ではセキュリティポリシー上、外部APIへのコード送信が禁止されているケースもあります。
コストの問題
GPT-4やClaude Opusのような高性能モデルはAPIコストが積み上がります。エージェントのように繰り返しLLMを呼び出すシステムでは、コストが予想以上に膨らむことがあります。
ネット環境への依存
オフライン環境、低速回線、出張先でも同じように使えるツールが理想です。
Agentic Coderはこれらすべてを解決します。qwen2.5-coderのような量子化モデルを使えば、一般的なゲーミングPCのGPUで十分に動作します。
アプリケーションの全体像
Agentic Coderは、複数の専門エージェントが協調して動作するマルチエージェントシステムです。ユーザーがプロジェクト目標を入力すると、以下のパイプラインが自動的に実行されます。
ユーザー入力
↓
[Plannerエージェント] → プロジェクトをファイル単位のタスクに分解
↓
[Coderエージェント] → 各ファイルのPythonコードを生成
↓
[Testerエージェント] → pytestテストコードを自動生成
↓
[Debuggerエージェント] → テスト失敗時にコードを自動修正(最大N回リトライ)
↓
成果物をワークフォルダに保存
各エージェントは単一責任を持ち、LLMクライアントやファイルI/Oへの依存はすべてDI(依存性注入)で解決しています。これにより、LLMをモックに差し替えてユニットテストを書くことも容易です。
アーキテクチャの設計思想
クリーンアーキテクチャの採用
本プロジェクトはクリーンアーキテクチャに基づいて設計されています。依存関係は常に内側(ドメイン層)に向かい、フレームワークやインフラの詳細がビジネスロジックに漏れ出さない構造になっています。
UI層 → PySide6ウィジェット、QThreadワーカー
サービス層 → Orchestratorによるエージェント協調
エージェント層 → Planner / Coder / Tester / Debugger
インフラ層 → Ollamaクライアント、SQLiteメモリ、コード実行
ドメイン層 → FileTask、ProjectPlan、カスタム例外
UIがエージェントの内部実装を知る必要はなく、エージェントがUIの存在を知る必要もありません。
pickleではなくSQLiteを使ったメモリシステム
多くの簡易エージェント実装ではpickleでメモリを永続化しますが、pickleにはデシリアライゼーション攻撃のリスクがあります。本プロジェクトではSQLite + JSONでベクトルメモリを保存し、セキュリティと可読性を両立しています。
コサイン類似度の計算もnumpyを使わず標準ライブラリのmathモジュールのみで実装しており、依存パッケージを最小限に抑えています。
QThreadによる非同期実行
PySide6アプリケーションでLLM呼び出しのような重い処理をメインスレッドで実行すると、UIがフリーズします。Agentic CoderではQThreadとQObjectのシグナル/スロット機構を使い、エージェントはバックグラウンドスレッドで動作し、UI更新はシグナル経由でのみ行われます。
# UIスレッドをブロックせずにエージェントを実行する
self._worker = AgentWorker(orchestrator, goal)
self._thread = QThread()
self._worker.moveToThread(self._thread)
self._worker.code_ready.connect(self._on_code_ready) # スレッドセーフ
self._thread.start()
UIの主要機能
ファイルツリーパネル
エージェントが生成する各ファイルの処理状態をリアルタイムで表示します。⏳pending → ⚙️coding → 🧪testing → 🔧debugging → ✅complete の流れがひと目でわかります。
コードキャンバス(タブ付きエディタ)
生成されたPythonコードは構文ハイライト付きのタブエディタで表示されます。コードは直接編集でき、💾Saveボタンでディスクに書き戻せます。デバッガーが修正を行った際は⊕Diffボタンが有効になり、修正前後のunified diffをその場で確認できます。
ライブログパネル
PythonのloggingモジュールをQtシグナルにブリッジするLogSignalHandlerを実装し、バックエンドの全ログをリアルタイムでUIに流し込んでいます。ログレベルに応じて行の色が変わるため、警告やエラーを瞬時に識別できます。
ハードウェアメトリクスサイドバー
psutilとnvidia-smiを2秒ごとにポーリングし、CPU使用率・RAM使用量・GPU使用率・VRAMをプログレスバー付きで表示します。ollama psコマンドで現在ロードされているモデル名もリアルタイムに取得します。
実際の使い方
1. 環境準備
# Ollamaのモデルを取得
ollama pull qwen2.5-coder:7b-instruct-q4_K_M
ollama pull nomic-embed-text
qwen2.5-coder:14b-instruct-q4_K_Mもテスト実施しました。(スピードは少々落ちましたが、かなり精度がよかったです!)
2. 起動
run.batをダブルクリックするだけです。初回起動時に自動で仮想環境の作成と依存パッケージのインストールが行われます。2回目以降は既存の仮想環境を再利用するため、すぐに起動します。
3. プロジェクト目標を入力して実行
テキストボックスに目標を入力し、▶ Run Agentをクリックします。
例: SQLiteを使ったFastAPI製ToDoアプリのREST APIを作成してください
例: URLから商品価格を取得してCSVに保存するWebスクレイパーを作って
例: MarkdownファイルをHTMLに変換する目次付きCLIツールを作成してください
あとはエージェントが自動でファイルを設計・実装・テスト・デバッグします。
技術スタック
| カテゴリ | 使用技術 |
|---|---|
| LLM実行基盤 | Ollama |
| 推論モデル | qwen2.5-coder:7b-instruct-q4_K_M |
| 埋め込みモデル | nomic-embed-text |
| GUI | PySide6 6.6+ |
| メモリ永続化 | SQLite + JSON |
| テスト | pytest |
| ハードウェア監視 | psutil / nvidia-smi |
| 言語 | Python 3.11+ (3.11.9でテスト) |
今後の展望
現在のバージョンはPythonプロジェクトの生成に特化していますが、以下の機能拡張を検討しています。
- マルチ言語対応 — TypeScript、Rustなど他言語のコード生成
- RAGによるドキュメント参照 — プロジェクトのREADMEや仕様書をコンテキストとして注入
- エージェント間の対話ログ可視化 — どのエージェントが何を考えて判断したかのトレース表示
- モデル切り替えUI — サイドバーからOllamaモデルをその場で切り替え
おわりに
Agentic Coderは「AIにコードを書かせる」ツールではなく、「AIエージェントがチームとして協調してプロジェクトを完成させる」ツールです。そしてそのすべてが、あなたのマシンの中だけで完結します。
現在は英語のみで動くようになっていますが今後日本語も対応できるようにしていきます。
ソースコードはGitHubで公開しています。
関連記事:
この記事が参考になったら、
をお願いします!