GitHub Projectで管理されるバックログを、自律的に実装し、人間がレビュー・マージ可能な状態でPull Requestを自動作成するAIエージェントを開発する。開発サイクルを高速化し、開発者の負担を軽減することを目的とする。
エージェントは、以下の状態とトリガーに基づいて動作する。処理は常に**一度に1タスクずつ(直列で)**実行される。
状態遷移図:
graph TD
subgraph 初期起動
A[エージェント起動] --> B{バックログに<br>タスクは?};
end
subgraph 正常サイクル
B -- Yes --> C[一番上のタスクを取得];
B -- No --> D[アイドル状態で待機];
D -- "トリガーA:<br>自身のPRが<br>mainにマージ" --> B;
C --> E[コード実装・PR作成];
subgraph レビューサイクル
E --> F_AI[外部AIレビュー実行];
F_AI --> G{AIレビュー結果に<br>クリティカルな問題あり?};
G -- "Yes (3回未満)" --> H_Fix[Agentがコードを修正];
H_Fix --> F_AI;
G -- "No" --> I[人間にテスト依頼を通知];
I --> J[人間による手動テスト・確認];
J --> L{人間レビューOK?};
L -- "No (修正依頼)" --> H_Fix;
end
L -- "Yes (承認)" --> K[人間がPRをマージ];
K --> D;
end
subgraph 例外処理
E -- "タイムアウト/エラー<br>(3回失敗)" --> M[人間に通知し待機状態へ];
G -- "Yes (3回超過)" --> M;
end
ワークフロー詳細:
- 初回起動: エージェント起動時、まずバックログを確認する。タスクがあれば、一番上のものを取得して処理を開始する。タスクがなければ、アイドル状態で待機する。
- タスク実行: コード実装、PR作成、レビュー対応(最大3回)を行う。
- 作業ブランチの独立性: タスク着手時点の
main
をベースとし、作業中にmain
が更新されてもその変更は取り込まない。
- 作業ブランチの独立性: タスク着手時点の
- AIレビューサイクル:
- Pull Requestが作成されると、外部のAIレビュー(GitHub Actions等)が実行されるのを待つ。
- AIレビューの結果(PRコメント)を解釈し、「クリティカルな問題」の有無を判断する。
- 問題がある場合: エージェントは指摘内容に基づきコードを修正してPushする。この修正サイクルは最大3回までとする。上限に達した場合は、人間に通知して処理を中断する。
- 問題がない場合: 人間にテストを依頼する通知を送る。
- 人間によるテストとフィードバックサイクル:
- AIレビューをパスすると、人間にテスト依頼が通知される。
- 人間は手動でテストとコードレビューを行う。
- 修正依頼がある場合: 人間がPRにコメント等で修正点を指摘する。エージェントはそれを解釈し、コードを修正する(H_Fixへ)。修正後、再度AIレビューからサイクルが再開される。
- 承認された場合: 人間がPull Requestを
main
ブランチにマージする。このマージが次のサイクルのトリガーとなる。
- 待機(アイドル)状態: 以下のトリガーAのみを待つ。
- トリガーA (継続トリガー): エージェント自身が作成したPull Requestが
main
にマージされた場合。バックログを確認し、次のタスクがあれば処理を再開する。
- トリガーA (継続トリガー): エージェント自身が作成したPull Requestが
- 管理外マージの無視: エージェントが関与していないPRがマージされても、それをトリガーとしない。
- バックログが空の場合: トリガーAが発生してもバックログが空なら、何もせず再びアイドル状態に戻り、次のトリガーAを待つ。
ID | 要件名 | 詳細 |
---|---|---|
FR-1 | タスクの自動取得 | 起動時、およびトリガーA発生時に、指定されたGitHub Projectのビューから処理すべきタスクを特定し、取得する。 |
FR-2 | コードの自動実装 | Worker Agentは、設定されたAIモデル(Gemini, Claude等)を用いてコーディングを行う。<br>リポジトリ内の規約ファイル(例: GEMINI.md , CLAUDE.md )を読み込み、基本指示としてLLMに渡す。 |
FR-3 | Pull Requestの自動作成 | 実装完了後、タスク情報に基づいたタイトル・本文でPull Requestを自動作成する。 |
FR-4 | レビューに基づく自動修正 | 自身が作成したPRに投稿された、外部AIレビューおよび人間による全段階(テスト依頼後を含む)のレビューコメントを解釈し、コードを修正してPushする。<br>AIレビューによる修正サイクルは最大3回までとする。 |
FR-5 | リポジトリ規約の遵守 | 依存関係のインストール、ビルド、テストの実行など、対象リポジトリに定められた開発・テスト手順を解釈し、それに従って処理を実行する。 |
FR-6 | 通知機能 | 処理の異常終了時や修正回数の上限到達時に加え、**AIレビューをパスした際の「人間へのテスト依頼」**をGitHubのコメントやSlack等で通知する。 |
FR-7 | 人間からの修正の判断・採択 | 人間からコードの修正案(コメント内のコードスニペット等)が提示された場合、エージェントはその修正案を採択するか、独自の解釈で再実装するか、あるいは拒否するかを自律的に判断する。 |
ID | 要件名 | 詳細 |
---|---|---|
NFR-1 | 実行モデル | 1つのリポジトリに対して1つのエージェントが動作する。<br>同時に処理するバックログタスクは1つに限定する(並列処理は行わない)。 |
NFR-2 | プロセス監視 | 各AI処理(コード生成など)には15分のタイムアウトを設定する。<br>タイムアウトした場合、最大2回まで自動で再実行する。3回失敗した場合は異常とみなし、人間に通知する。 |
NFR-3 | 拡張性 | AIモデルを切り替えられるよう、モデル呼び出し部分を抽象化して設計する。(例: Gemini, Claude) |
NFR-4 | セキュリティ | GitHubトークンや各AIのAPIキーは、環境変数などを用いて安全に管理する。 |
- スコープ内:
- 本要件定義書に記載されたすべての機能。
- 外部のAIレビューシステムの実行をトリガーし、その結果(PRコメント)を解釈して、修正や通知のフローを制御すること。
- スコープ外:
- AIによるレビュー機能そのものの実装。(レビュー機能は、別途用意されたGitHub Actions等の外部ワークフローであることを前提とする。)
Canvasモードで出てきた実装。使えないなぁ。