AI 駆動開発(2026年9月版)
概要
本記事では、2026 年 9 月時点での、小規模プロジェクトにおける、個人的 AI 駆動開発の進め方を紹介する。 具体的な手順と、テンプレートリポジトリのポイントについて説明する。
結論
人間の仕事は「ドキュメントを書くこと」と「マージを判断すること」の 2 つに絞り、それ以外の工程は AI に任せる。 具体的には、以下のツールを組み合わせている。
- Cursor:SRS の作成、Issue の登録、実装、レビュー指摘への対応
- Greptile:プルリクエストのコードレビュー
- GitHub:Issue とプルリクエストによるタスク管理
- Cursor 開発用テンプレートリポジトリ:AI が安全に作業するための設定一式
全体の流れは以下のとおりである。
flowchart LR A[仕様書草案<br>人間] --> B[SRS 作成<br>AI] B --> C[Issue 登録<br>AI] C --> D[着手指示<br>人間] D --> E[実装・PR 作成<br>Cursor] E --> F[コードレビュー<br>Greptile] F --> G[指摘対応<br>Cursor] G --> F F --> H[マージ判断<br>人間]
開発の進め方
以下のとおり、人間はドキュメントとコーディング環境を用意するだけで、基本的な開発は AI に任せている。
テンプレートリポジトリを用意する(人間、AI)
https://github.com/gnkm/cursor-template
私は Cursor を使っているので、Cursor にやってよいこと、やってはいけないことを整理して、 やってはいけないことをできないような設定を準備している。
仕様書草案を作る(人間)
もととなるものとして、01-seed.md といった名前のファイルを作っている。
特に整理せず、思いつく要件を書き出していく。
概要、機能の他に、こだわりがあれば技術スタックも記載しておく。
ISO/IEC/IEEE 29148:2018 形式の仕様書(SRS)を作る(AI)
仕様書草案をもとに SRS を作成する。 要件に ID が割り当てられて、どの要件を満たしている状態なのかがわかりやすいので、 とりあえず ISO/IEC/IEEE 29148:2018 形式を採用している。
タスクを GitHub の Issue に登録する(AI)
Issue テンプレート の形式で Issue を作成する。 Issue の登録も AI に任せている。
Issue で Cursor にコーディングを依頼する(人間)
Issue のコメントで「@cursor 着手してください」とコメントすると、Cursor が自動的にコーディングを開始する。
Cursor が Cloud で実装しプルリクエストを出す(AI)
Cursor はクラウド上で実装をおこない、プルリクエストを出す。
Greptile がコードレビューする(AI)
Greptile がコードレビューをおこない、5 点満点の評価と、コメントをつける。
Cursor がコードレビューの対応をする(AI)
Cursor はプルリクエストを出した後、プルリクエストを確認し続けており、
CI が失敗していたり、コンフリクトしていたり、コードレビューのコメントがつくと
自動的に対応をおこなう。
対応をおこなっていなかったら、Cursor の Web UI で「/autopilot」と入力すると、自動的に対応をおこなう。
コードレビューのコメントの筋が通っていなければ、その旨をコメントすることもある。
プルリクエストをマージする(人間)
Greptile のコメントから、マージして問題ないと判断したら、main ブランチにマージする。
テンプレートリポジトリ
AI に自律的にコーディングさせる以上、プロンプトインジェクションへの備えは欠かせない。 テンプレートリポジトリは、Simon Willison 氏の The lethal trifecta の考え方をもとに設計している。
この記事によると、AI エージェントが以下の 3 つを同時に持つと、攻撃者にデータを盗み出されるおそれがある。
- 秘匿データへのアクセス
- 信頼できないコンテンツへの露出
- 外部への送信手段
裏を返せば、どれか 1 つでも断ち切れば被害は防げる。 ただし、1 つの対策が破られることも想定し、テンプレートリポジトリでは 3 つすべてに対策を入れている。
| 対策 | 断ち切る要素 | 設定場所 |
|---|---|---|
| AI に秘匿情報を見せない | 秘匿データへのアクセス | .cursor/hooks/guard-read.sh |
| AI に与える権限を最小限にする | 外部への送信手段 | .cursor/hooks |
| AI の外部情報へのアクセスを制限する | 信頼できないコンテンツへの露出 | .cursor/environment.json |
AI に秘匿情報を見せない
仮にプロンプトインジェクションを受けても、AI が秘匿情報を知らなければ、盗み出されるものがない。
.cursor/hooks/guard-read.sh で、.env などの秘匿情報を含むファイルの読み込みを拒否している。
.cursorignore でも同様の設定をしているが、こちらは気休め程度である。
.cursorignore はあくまでベストエフォートの仕組みで、ターミナルコマンド経由の読み込みなどは防ぎきれないため、セキュリティの境界としては頼れない。
hooks で確実に拒否するのが本命である。
AI に与える権限を最小限にする
最後の防衛線として、AI が実行できる操作を制限している。
プロンプトインジェクションで AI が乗っ取られても、外部への送信や破壊的な操作ができなければ、被害は限定的になる。
.cursor/hooks で、許可していないコマンドの実行を拒否している。
AI の外部情報へのアクセスを制限する
プロンプトインジェクションの多くは、Web ページや外部ファイルなど、AI が読み込む外部のコンテンツに仕込まれる。
そこで、AI がアクセスできる外部情報を必要最小限に絞り、悪意ある指示に触れる機会そのものを減らしている。
設定は .cursor/environment.json でおこなっている。
課題
UI が課題である。 そもそも良い UI とはなにかがわからない。 エージェントスキルを 作ってみたこともあったが、スキルを使わず、AI に任せた方が良い印象を受けた。 一応 Anthropic の Skillsが あることは知っているが、以前使ったとき、いかにも AI が作ったようなデザインだったので使うのをやめてしまった。
まとめ
最近の AI のコーディング能力は高く、人間はドキュメントとコーディング環境を用意するだけで、 基本的な開発は AI に任せることができる。
参照
サンプルコード
本記事で紹介したテンプレートを用いて、以下のアプリケーションを開発した。
犬種分類アプリケーション
https://github.com/gnkm/fauna-lab
8種類の犬種に分類する機械学習アプリケーションである。 実用性は低くなるが、評価を容易にするために 8 種類に限定した。 SRS、 タスク指示書、 assets を与え、AI にコーディングさせた。
https://github.com/gnkm/fauna-lab-ref に assets や評価基準のドキュメントを準備した。
Jev Prompt 評価システム
AI モデルである Jev に複数のプロンプトを与え、それに対する回答の評価をおこなうシステムである。
https://github.com/gnkm/jev-prompts
Reversi AI
リバーシをおこなうエージェントを複数用意し、それらを対戦させるシステムである。 Web API で対戦させることもできるし、Web UI で対戦させ、観戦することもできる。