AIとの開発作法をAIに聞いたよ。 例えば、Cloude.mdのようなドキュメントや作業場などを配置してオンボーディングをさせる試みが多いようですね。


0. このガイドの位置づけ

あなたがやりたいのは「大企業向けの工程管理」ではなく、

  • 自分の業務改善・自動化(スクリプト、CLI、バッチ、ETL、通知Bot、レポート生成…)
  • 小規模 toC(小さめWebツール、個人向けユーティリティ…)

AIと一緒に高速に作ること。

ただし高速化すると、次の事故が起きやすい:

  • AIが勢いで実装し、あとで直せない(再現性なし・理由が残らない)
  • AIがテストまで作ると、バグ込みで“合格”にしてしまう(循環参照)
  • 調査・検証コードを捨ててしまい、同じ調査を繰り返す(知見が資産化されない)
  • ルールが肥大化してコンテキストを圧迫し、AIが肝心の指示を落とす

そこで本テンプレは、**「速さを落とさず、最低限の安全装置だけ入れる」**ための設計です。


1. 前提(このテンプレが想定する条件)

1-1. ツール前提(ツール非依存)

  • Web UI / IDE拡張 / CLI いずれでも運用可能
  • 特定の “自動で読むファイル名” を前提にしない → 人間が「読むべきファイル」をAIに渡す運用で統一

1-2. Git前提(最低限)

  • git add/commit ができる
  • git diff で差分を確認できる ※PR運用は任意(1人開発ならローカルでも成立)

1-3. セキュリティ前提(最低限)

  • .env はコミットしない(.env.example のみコミット)
  • 実データ(顧客CSVなど)は repo に入れない(マスク・ダミー化)
  • 外部ツール(例:GitHub操作)を使うなら、認証情報は環境変数で扱う

2. 概要:このテンプレが解決すること

2-1. 役割分担(ここが一番重要)

AI主導開発では、あなたの役割は「実装者」よりも 承認者・期待値保持者に寄ります。

  • **人間(あなた)**が握るもの

    • Doneの定義(何ができたら終わりか)
    • 期待値(入力→期待出力のペア)
    • 実装してよい範囲の許可(Approval)
  • AIに任せてよいもの

    • タスク分解案(たたき台)
    • 実装
    • テストの枠組み・比較処理
    • 調査(Spike)用の実験コード作成案
    • 変更点の要約、コミットメッセージ案

この線引きで、レビュー指摘の「循環参照」や「暴走」を潰します。

2-2. “正”はどこに置くか

小規模でドキュメントが増えると形骸化しがちです。そこで:

  • 仕様の正tests/test-data/(期待値は人間が確定)
  • 使い方・運用の正README.md(Troubleshootingもここに集約)
  • AIへのガードレールの正docs/rules/(入口+分割)

spec.md のような二重管理ドキュメントは原則置きません。


3. ワークフロー(安全装置付き・小規模向け)

以下の5フェーズを固定化します。 「毎回同じ順番」を守ると、AI活用が安定します。

  1. Plan & Approve
  • AIが tasks/current.md を生成(たたき台)
  • 人間が Acceptance(期待値)とスコープを確定し、Approval: APPROVED にする
  • APPROVEDになるまで実装禁止
  1. Spike(必要なときだけ)
  • 依存や挙動が不明なら experiments/ に再現コードを置いて観測
  • 調査結果を experiments/README.md に1行で残す(資産化)
  1. Implement & Test
  • 実装は小さく(変更ファイル3〜5を目安)
  • テストはAIが枠組み、期待値は人間が確定した test-data/golden を使う
  1. Review & Commit
  • 人間が git diff を見る(余計な変更停止)
  • Conventional Commits で履歴を資産化(“fix”乱発を防ぐ)
  1. Retrospect & Update(Done条件に組み込む)
  • “学び”をどこかに残す(最低1つ)

    • goldenケース追加 / 実験コード追加 / ルール更新 / README追記
  • tasks/current.mdtasks/YYYYMMDD-*.md として保存


4. 成果物(ディレクトリ)をどう使うか

  • docs/rules/:AIに渡すガードレール(indexは短く、詳細は分割)
  • prompts/:再利用可能な定型プロンプト(あなたの“運転台”)
  • tasks/:タスクの計画と履歴(成功パターンの資産)
  • experiments/:検証・再現コード(未来の自分を助ける動くドキュメント)
  • test-data/:人間が確定した期待値(循環参照を切る核)
  • tests/:自動検証(真実の一部)

5. 使い始め手順(このテンプレの最短導入)

  1. 下の「完成テンプレ」をそのまま配置

  2. AIに渡す(ツール非依存)

    • docs/rules/index.md
    • tasks/current.md
  3. AIに prompts/launch.md を実行させて tasks/current.md を更新させる

  4. あなたが Acceptance に入力→期待出力を入れ、test-data/golden/ に expected を作る

  5. Approval: APPROVED にしてから実装開始


6. フル完成テンプレ(全文・そのままコピペでOK)

以下は「repo直下に配置するファイル内容の全文」です。


6-1. ディレクトリ構造(完成版)

repo/
  README.md
  .gitignore
  .env.example

  docs/
    rules/
      index.md
      workflow.md
      testing.md
      security.md
      coding.md

  prompts/
    launch.md
    onboard.md
    think.md
    spike.md
    implement.md
    test.md
    review.md
    retrospect.md

  tasks/
    current.md
    20251228-example-task.md

  experiments/
    README.md
    20251228-example_spike.md

  test-data/
    README.md
    golden/
      README.md
      case01_input.json
      case01_expected.json

  src/
    core/
    adapters/
    app/

  tests/
    unit/
    integration/

6-2. .gitignore(完成版)

# Secrets
.env

# Logs & temp
*.log
*.tmp
*.bak
*.swp

# OS
.DS_Store
Thumbs.db

# Language/runtime (adjust as needed)
__pycache__/
.pytest_cache/
node_modules/
dist/
build/
coverage/

6-3. .env.example(完成版)

# Copy to .env (DO NOT COMMIT .env)
# Example:
# API_BASE_URL=https://example.com
# API_TOKEN=replace_me

6-4. README.md(完成版)

# AI主導開発(プロンプトドリブン開発)テンプレ

業務改善・自動化・小規模toCを、AIと一緒に高速に開発しつつ、
「再現性」「資産化」「暴走防止」を最小コストで担保するためのテンプレです。

---

## 目的
- 速く作る(AI活用)
- 壊れにくくする(最小の安全装置)
- 後で直せる(プロンプト/調査/期待値を資産化)
- ツールに依存しない(Web UI / IDE / CLI どれでも)

---

## 重要原則(最短)
- **期待値(入力→期待出力)は人間が確定**する(AIの循環参照を防止)
- **プロンプト・タスク計画・検証コードはコミット**する(再現性の要)
- 不明点は **実装前に `experiments/` でSpike(調査)**
- ルールは **入口+分割**(`docs/rules/index.md` は短く保つ)
- Doneには **資産更新**(golden追加/実験追加/ルール更新/README追記)を含める

---

## AIに必ず渡すファイル(ツール非依存)
開始/再開時にAIへ渡す:
1) docs/rules/index.md
2) tasks/current.md

※自動読み込みに依存しません。Web UIなら貼り付け、IDE/CLIなら参照指示を出します。

---

## ワークフロー(安全装置付き)
1) Plan & Approve
- AIが tasks/current.md を作成/更新(たたき台)
- 人間が Acceptance(期待値)を確定し、ApprovalをAPPROVEDにする
- APPROVEDになるまで実装禁止

2) Spike(必要なら)
- 不明点は experiments/ に再現・調査コードを置く
- 結果を experiments/README.md に1行で残す

3) Implement & Test
- 変更は小さく(3〜5ファイル程度が目安)
- テスト枠組みはAIでもよいが、expected(期待値)は人間が確定した test-data を使う

4) Review & Commit
- 人間が git diff を確認(余計な変更を止める)
- Conventional Commits で意味のある履歴を残す

5) Retrospect & Update(Done条件)
- 次のどれか最低1つを実施:
  - goldenテストデータ追加
  - experiment(再現/調査)追加
  - docs/rules または README を更新
- tasks/current.md を日付付きに保存(tasks/YYYYMMDD-*.md)

---

## Troubleshooting
### AIが勝手に実装を始める
tasks/current.md の Approval が APPROVED か確認。WAITING の場合は実装禁止。

### テストは通るのに仕様がおかしい
expected がAI起点になっていないか確認。test-data/golden/*expected* は人間が確定する。

### 依存ライブラリの挙動がわからない
experiments/ に Spike を作って観測してから本実装へ。

### .envをコミットしそうで怖い
.gitignore に .env が入っているか確認。.env.example のみコミットする。

### GitHub操作の自動化(任意)
gh CLI を使うなら認証が必要:
- ローカル:gh auth login
- CI/コンテナ:GH_TOKEN をセットして gh auth status で確認

6-5. docs/rules/index.md(短い入口)

# AI Working Agreement (Index)

## Read order (start/resume)
1) tasks/current.md
2) docs/rules/workflow.md
3) docs/rules/testing.md
4) docs/rules/security.md (if touching auth/data/secrets)
5) docs/rules/coding.md

## Hard rules (must follow)
- Do NOT code until tasks/current.md shows `Approval: APPROVED`.
- Human owns expected outputs (golden data). Do not invent expectations.
- If behavior is unclear, create a Spike under experiments/ before implementing.
- Never commit secrets (.env is forbidden). Use .env.example only.
- Touch only files related to the current task.
- Use Conventional Commits. Every commit should be meaningful.

6-6. docs/rules/workflow.md

# Workflow Rules (Small Project)

## Phases
1) Plan & Approve
- Generate/Update tasks/current.md
- Wait for human approval (APPROVED)

2) Spike (optional)
- Add experiments/ repro or investigation code
- Record result in experiments/README.md (1 line is enough)

3) Implement & Test
- Small changes per step (3-5 files, reasonable diff)
- Add/Update tests and/or test-data

4) Review & Commit
- Human checks git diff
- Conventional Commits

5) Retrospect & Update (Done requirement)
- Add at least one of:
  - new golden test-data case, or
  - new experiment/repro, or
  - rule update in docs/rules/ or README
- Archive tasks/current.md into tasks/YYYYMMDD-*.md

6-7. docs/rules/testing.md(循環参照対策の核)

# Testing Rules

## Source of truth
- Truth = tests/ + test-data/
- Expected outputs (golden) are HUMAN-OWNED.

## Human-owned artifacts
- test-data/golden/*_expected.*  (or snapshots)
- tasks/current.md Acceptance section

## AI responsibilities
- Create test harness and assertions that compare actual vs human-provided expected.
- Do NOT modify expected outputs unless explicitly instructed by human.

## When adding a feature/fix
- Add/Update at least one golden test-data case.
- Cover boundaries and error cases (empty, null, malformed, large input).

## Anti-cheat rules
- Avoid writing tests that only mirror current implementation.
- Prefer black-box tests using golden input/output.

6-8. docs/rules/security.md

# Security & Privacy Rules (Small project baseline)

## Secrets
- Never commit .env. Only commit .env.example.
- No secrets in code, comments, tests, or logs.
- If a secret is found, STOP and warn the user.

## Data handling
- Do not add real customer/user data to repo.
- Use masked or synthetic datasets in test-data/ if needed.

## Token usage (optional tools)
- If using gh CLI, authentication is required:
  - local: `gh auth login`
  - CI/container: set `GH_TOKEN` and verify `gh auth status`
- Keep scopes minimal. Prefer read-only scopes unless needed.

## External tools / integrations
- Avoid introducing new external agents/tools without noting risks in tasks/current.md.

6-9. docs/rules/coding.md

# Coding Rules

## Structure
- src/core: pure logic (no I/O)
- src/adapters: external I/O (API/DB/files)
- src/app: entrypoints (CLI/HTTP/job)

## Change scope
- Only edit files needed for current task.
- If broader refactor is needed, propose it in tasks/current.md and wait for approval.

## Style
- Keep functions small and single-responsibility.
- Prefer explicit error handling for external calls.

## Commit messages (Conventional Commits)
- feat: ...
- fix: ...
- refactor: ...
- test: ...
- docs: ...
- chore: ...

6-10. prompts/launch.md

あなたは開発計画を作るアシスタントです。
次を読んで、tasks/current.md を作成または更新してください。

読む順番:
1) docs/rules/index.md
2) README.md
3) 既存の tasks/current.md(あれば)

出力要件:
- tasks/current.md は「人間が承認する計画書」です。
- 先頭に Goal / Non-goals / Acceptance(Human-owned) を置いてください。
- Plan は「AIが1回のコンテキストで扱える粒度」で分割してください:
  - 変更対象ファイル 3〜5 個程度
  - 差分が大きくなる場合は分割
- 不明点がある場合は Spike を Plan に入れ、experiments/ に出す前提で書いてください。
- Approval は必ず `WAITING` にしてください(人間がAPPROVEDに変えるまで実装禁止)。
- 期待出力(expected)は人間が確定するので、勝手に作らず「人間が記入する欄」を残してください。

6-11. prompts/onboard.md

作業を再開します。次を実行してください。

1) docs/rules/index.md と tasks/current.md を読み、現在の状況を要約する
2) 次にやるチェック項目を tasks/current.md から 1つ選ぶ(ApprovalがAPPROVEDであること)
3) その1項目の「影響ファイル候補」「実装方針」「確認方法」を短く提示する
4) まだコードは書かない(ここでは計画だけ)

6-12. prompts/think.md

次のサブタスクについて、実装前の方針を短くまとめてください。

- 変更する責務(core/adapters/appのどこか)
- 例外・境界条件
- 依存が不明なら Spike が必要か
- テストデータ(golden)で何を追加すべきか(期待値は人間が書く前提)

6-13. prompts/spike.md

Spike(調査)を行います。

- experiments/YYYYMMDD-<topic>.* を作る想定で、調査手順と期待する観測結果を整理してください。
- 何が分かれば本実装に進めるか(Go/No-Go条件)を書いてください。
- 結果メモを experiments/README.md に追記する文案も出してください。

6-14. prompts/implement.md

実装に入ります。ルール:

- tasks/current.md の APPROVED 範囲だけを実装する
- 変更ファイルは最小限(3-5ファイル目安)
- 期待値(test-dataのexpected)は人間が確定するまで変更しない
- 外部I/Oは adapters に閉じ込める
- 実装後に「どう確認するか(コマンド/観測点)」を提示する

6-15. prompts/test.md

テストを整備します。

- tests/ 側のテストコード(比較の枠組み)を作る
- test-data/golden の input/expected を読む形にする
- expectedの中身は人間が用意する前提なので、プレースホルダ扱いにする
- 境界/異常系のケース追加提案をする(ただし期待値は作らない)

6-16. prompts/review.md

レビュー準備をします。

- 変更したファイル一覧を出す
- 想定外の変更が混ざっていないか自己点検する
- 仕様(Acceptance)に対して満たしている/いないを表で示す
- コミットメッセージ案を Conventional Commits で提案する

6-17. prompts/retrospect.md

振り返りをして、資産化してください。

- うまくいったこと / いかなかったこと
- 次回同種タスクで守るべきルール(docs/rulesのどこに追記すべきか提案)
- 追加すべき golden test-data ケース、または experiments の再現コード案
- tasks/current.md を tasks/YYYYMMDD-<short>.md に保存するためのリネーム案

6-18. tasks/current.md(雛形)

# Goal
(人間が書く)このタスクで達成することを1〜3行で。

# Non-goals
(人間が書く)今回やらないこと。スコープ逸脱を防ぐ。

# Acceptance (Human-owned)
※期待値は人間が確定する。AIは作らない。
- Case01: input = test-data/golden/case01_input.json -> expected = test-data/golden/case01_expected.json
- Case02: input = ... -> expected = ...

# Plan (AI drafts, Human approves)
- [ ] Spike: (必要なら)依存/既存コードの挙動確認を experiments/ に追加
- [ ] Implement: src/... を変更(対象ファイル:)
- [ ] Test: tests/... を追加(golden比較)
- [ ] Review: 変更点サマリとコミットメッセージ案作成
- [ ] Retrospect: goldenケース追加 or ルール更新 or experiment追加(Done条件)

# Notes
- 制約、落とし穴、メモ

# Approval
Status: WAITING
Approved by:
Approved at:

6-19. experiments/README.md

# experiments/

依存ライブラリの挙動確認、バグ再現、境界条件の確認などを置きます。
ここは「動くドキュメント」です。使い捨てにしません(コミット対象)。

## Index
- 20251228-example_spike.md: 例

6-20. experiments/20251228-example_spike.md

# Spike: Example

目的:
- ライブラリXの入力フォーマットを確認する

Go/No-Go:
- 入力Aで例外が出ない
- 入力Bでこの形式の出力になる(観測)

結果:
- (実行後に追記)

6-21. test-data/README.md

# test-data/

人間が確定する「期待値」を置きます。
AIの循環参照を防ぐため、expectedは人間がレビューして確定します。

- golden/: ブラックボックスの入力/期待出力ペア

6-22. test-data/golden/README.md

# golden test-data

命名:
- caseNN_input.*
- caseNN_expected.*

運用:
- expectedは人間が確定する(AIが勝手に作らない)
- 境界/異常系のケースを追加する

6-23. サンプル test-data/golden/case01_input.json

{
  "example": "input"
}

6-24. サンプル test-data/golden/case01_expected.json

{
  "example": "expected"
}