メインコンテンツへスキップ
Hero Image

AI 駆動開発(2026年9月版)

AI-Driven-Development

概要

本記事では、2026 年 9 月時点での、小規模プロジェクトにおける、個人的 AI 駆動開発の進め方を紹介する。 具体的な手順と、テンプレートリポジトリのポイントについて説明する。

結論

人間の仕事は「ドキュメントを書くこと」と「マージを判断すること」の 2 つに絞り、それ以外の工程は 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. 秘匿データへのアクセス
  2. 信頼できないコンテンツへの露出
  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 で対戦させ、観戦することもできる。

https://github.com/gnkm/reversi-ai