Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
21 changes: 20 additions & 1 deletion README.md
Original file line number Diff line number Diff line change
Expand Up @@ -44,7 +44,7 @@ Codex と Cursor を併用する Python プロジェクト向けのテンプレ
## プロダクト方針と進捗管理

- プロダクト方針の正本は `docs/product/` に置く。
- 各タスク設計は `関連ゴールID` / `関連マイルストーンID` を明記し、日々の実装を中長期目標へ接続する
- 各タスク設計は `関連ゴールID` / `関連マイルストーンID` を明記し、日々の実装をユーザー到達状態へ接続する
- テンプレート利用開始時は、`python-project-bootstrap` の初期対話で `docs/product/*.md` をユーザーと擦り合わせて埋める。

`docs/product/` の役割:
Expand Down Expand Up @@ -78,6 +78,25 @@ python3 scripts/sync_ai_context.py
python3 scripts/sync_ai_context.py --check
```

## 役割分担(誰が何をするか)

| 区分 | ユーザー | エージェント |
| --- | --- | --- |
| 意思決定 | Vision、優先順位、受け入れ可否を決める | 判断材料を整理し、選択肢を提示する |
| 実作業 | 回答・承認・最終判断を行う | コマンド実行、ファイル編集、検証、差分整理を行う |
| リリース導線 | `commit` / `push` / `PR` 実行を依頼する | 依頼された Git 操作を実行し、結果を報告する |

## 新規立ち上げフロー(実行者つき)

| Step | ユーザーがやること | エージェントがやること | 成果物 |
| --- | --- | --- | --- |
| 1 | テンプレートから新規リポジトリを作成し clone する | 該当なし | ローカル作業ディレクトリ |
| 2 | 「初期化を進めて」と依頼する | `sync_ai_context.py --check` と bootstrap を実行する | 初期ファイル一式 |
| 3 | `docs/product` 擦り合わせ質問に回答する | `product-docs-alignment` に沿って 1〜3 問ずつ進行し、回答を反映する | `docs/product/*.md` 初期確定 |
| 4 | 開発タスクを依頼する | `docs/task-designs` に設計書を作成し、承認待ちにする | タスク設計書 |
| 5 | 設計内容を承認する | 実装・検証・差分説明を行う | 実装差分 |
| 6 | `commit & push` / `PR作成` を依頼する | Git 操作を実行し、URL/結果を共有する | PR |

## 新しいプロジェクトの立ち上げ手順

1. テンプレートから新規リポジトリを作成し、ローカルへ clone する。
Expand Down
16 changes: 8 additions & 8 deletions docs/ai/canonical/playbooks/python-project-bootstrap.md
Original file line number Diff line number Diff line change
Expand Up @@ -33,7 +33,14 @@ description: 新しい Python プロジェクトの初期セットアップを
- 未確定項目は既定値を勝手に固定せず、ユーザー確認を優先する。
- 既定値を使う場合は「既定値を採用した」と明示してから確定する。

3. プロダクト方針(docs/product)を対話で初期確定する。
3. 初期構成を生成する。
- `scripts/playbooks/python-project-bootstrap/bootstrap_python_project.py` を実行して、ディレクトリと初期ドキュメントを生成する。
- 例:
- `python3 scripts/playbooks/python-project-bootstrap/bootstrap_python_project.py --target <project-root> --project-name <name> --package-name <package_name> --description "<description>"`
- 必要に応じて `--task-design-dir docs/task-designs`(既定)や `--force` を使う。
- 生成後に手順正本を `<repo>/docs/ai/canonical/playbooks/` に配置してコミットし、以後の実行基盤を repo ローカルへ固定する。

4. プロダクト方針(docs/product)を対話で初期確定する。
- `docs/ai/playbook-assets/python-project-bootstrap/references/product-docs-alignment.md` を使い、1〜3問ずつ擦り合わせる。
- 最低限、次を埋める。
- `docs/product/vision.md`: 対象ユーザー、解く課題、成功状態
Expand All @@ -42,13 +49,6 @@ description: 新しい Python プロジェクトの初期セットアップを
- `docs/product/progress.md`: やるべきこと一覧ベースの現在地
- 不確定項目が残る場合は、`仮置き` と明記して次の確認タイミングを残す。

4. 初期構成を生成する。
- `scripts/playbooks/python-project-bootstrap/bootstrap_python_project.py` を実行して、ディレクトリと初期ドキュメントを生成する。
- 例:
- `python3 scripts/playbooks/python-project-bootstrap/bootstrap_python_project.py --target <project-root> --project-name <name> --package-name <package_name> --description "<description>"`
- 必要に応じて `--task-design-dir docs/task-designs`(既定)や `--force` を使う。
- 生成後に手順正本を `<repo>/docs/ai/canonical/playbooks/` に配置してコミットし、以後の実行基盤を repo ローカルへ固定する。

5. 生成内容をレビューする。
- `docs/ai/playbook-assets/python-project-bootstrap/references/project-structure.md` を基準に、`adapters/application/domain/ports` の責務分離を確認する。
- `docs/rules/solid/README.md` と `docs/rules/code_architecture/README.md` の導線が AGENTS.md から参照できることを確認する。
Expand Down
16 changes: 8 additions & 8 deletions docs/ai/playbooks/python-project-bootstrap.md
Original file line number Diff line number Diff line change
Expand Up @@ -36,7 +36,14 @@ description: 新しい Python プロジェクトの初期セットアップを
- 未確定項目は既定値を勝手に固定せず、ユーザー確認を優先する。
- 既定値を使う場合は「既定値を採用した」と明示してから確定する。

3. プロダクト方針(docs/product)を対話で初期確定する。
3. 初期構成を生成する。
- `scripts/playbooks/python-project-bootstrap/bootstrap_python_project.py` を実行して、ディレクトリと初期ドキュメントを生成する。
- 例:
- `python3 scripts/playbooks/python-project-bootstrap/bootstrap_python_project.py --target <project-root> --project-name <name> --package-name <package_name> --description "<description>"`
- 必要に応じて `--task-design-dir docs/task-designs`(既定)や `--force` を使う。
- 生成後に手順正本を `<repo>/docs/ai/canonical/playbooks/` に配置してコミットし、以後の実行基盤を repo ローカルへ固定する。

4. プロダクト方針(docs/product)を対話で初期確定する。
- `docs/ai/playbook-assets/python-project-bootstrap/references/product-docs-alignment.md` を使い、1〜3問ずつ擦り合わせる。
- 最低限、次を埋める。
- `docs/product/vision.md`: 対象ユーザー、解く課題、成功状態
Expand All @@ -45,13 +52,6 @@ description: 新しい Python プロジェクトの初期セットアップを
- `docs/product/progress.md`: やるべきこと一覧ベースの現在地
- 不確定項目が残る場合は、`仮置き` と明記して次の確認タイミングを残す。

4. 初期構成を生成する。
- `scripts/playbooks/python-project-bootstrap/bootstrap_python_project.py` を実行して、ディレクトリと初期ドキュメントを生成する。
- 例:
- `python3 scripts/playbooks/python-project-bootstrap/bootstrap_python_project.py --target <project-root> --project-name <name> --package-name <package_name> --description "<description>"`
- 必要に応じて `--task-design-dir docs/task-designs`(既定)や `--force` を使う。
- 生成後に手順正本を `<repo>/docs/ai/canonical/playbooks/` に配置してコミットし、以後の実行基盤を repo ローカルへ固定する。

5. 生成内容をレビューする。
- `docs/ai/playbook-assets/python-project-bootstrap/references/project-structure.md` を基準に、`adapters/application/domain/ports` の責務分離を確認する。
- `docs/rules/solid/README.md` と `docs/rules/code_architecture/README.md` の導線が AGENTS.md から参照できることを確認する。
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -27,6 +27,10 @@
/ "references"
/ "_endpoint_template.md"
)
PRODUCT_VISION_TEMPLATE_PATH = REPO_ROOT / "docs" / "product" / "vision.md"
PRODUCT_GOALS_TEMPLATE_PATH = REPO_ROOT / "docs" / "product" / "goals.md"
PRODUCT_MILESTONES_TEMPLATE_PATH = REPO_ROOT / "docs" / "product" / "milestones.md"
PRODUCT_PROGRESS_TEMPLATE_PATH = REPO_ROOT / "docs" / "product" / "progress.md"


def load_template(path: Path, fallback: str) -> str:
Expand Down Expand Up @@ -354,117 +358,38 @@ def build_hexagonal_architecture_doc(package_name: str) -> str:

def build_product_vision_template() -> str:
"""プロダクトビジョンの初期テンプレートを返す。"""
return """# プロダクトビジョン
fallback = """# プロダクトビジョン

最終更新: <YYYY-MM-DD>

## 1. Vision Statement

<このプロダクトが最終的に実現したい状態を1〜2文で記述する。>

## 2. 対象ユーザー

- <最優先ユーザー1>
- <最優先ユーザー2>

## 3. 解決する課題

- <課題1>
- <課題2>

## 4. 提供価値

- <価値1>
- <価値2>

## 5. 成功状態

- <どの状態になれば「価値提供できた」と判断するか>

## 6. Vision の再設定ルール

- <どの条件で Vision を見直すか>

## 7. 関連ドキュメント

- ユーザー到達状態ゴール: `docs/product/goals.md`
- 到達ステップ: `docs/product/milestones.md`
- 現在地スコアボード: `docs/product/progress.md`
"""
return load_template(PRODUCT_VISION_TEMPLATE_PATH, fallback)


def build_product_goals_template() -> str:
"""ユーザー到達状態ゴールの初期テンプレートを返す。"""
return """# ユーザー到達状態ゴール
fallback = """# ユーザー到達状態ゴール

最終更新: <YYYY-MM-DD>

## ゴール一覧

| Goal ID | ユーザーが到達したい状態 | 到達判定(Definition of Done) | 状態 |
| --- | --- | --- | --- |
| G-01 | <到達状態1> | <判定条件1> | Planned |
| G-02 | <到達状態2> | <判定条件2> | Planned |
| G-03 | <到達状態3> | <判定条件3> | Planned |

## 運用ルール

- ゴールは 3〜5 個に絞る。
- 各ゴールは必ず「ユーザーが到達したい状態」で書く。
- 各ゴールに `到達判定(Definition of Done)` を 1 つ以上持たせる。
"""
return load_template(PRODUCT_GOALS_TEMPLATE_PATH, fallback)


def build_product_milestones_template() -> str:
"""到達ステップの初期テンプレートを返す。"""
return """# 到達ステップ
fallback = """# 到達ステップ

最終更新: <YYYY-MM-DD>

## ステップ一覧

| Milestone ID | 対応 Goal ID | 到達ステップ | 完了条件 | 状態 |
| --- | --- | --- | --- | --- |
| M-01 | G-01 | <ステップ1> | <完了条件1> | Planned |
| M-02 | G-02 | <ステップ2> | <完了条件2> | Planned |
| M-03 | G-03 | <ステップ3> | <完了条件3> | Planned |

## 運用ルール

- マイルストーンは時期ではなく「到達ステップ」として管理する。
- 各マイルストーンは必ず Goal ID に紐づける。
- 完了したマイルストーンは削除せず、状態を `Done` に更新して履歴を残す。
"""
return load_template(PRODUCT_MILESTONES_TEMPLATE_PATH, fallback)


def build_product_progress_template() -> str:
"""進捗スコアボードの初期テンプレートを返す。"""
return """# 進捗スコアボード
fallback = """# 進捗スコアボード

最終更新: <YYYY-MM-DD>

## 更新ルール

- 更新頻度: 状態変化があったタイミングで更新する。
- 更新者: 該当 Goal に紐づくタスク設計を更新した担当者。
- 記載単位: Goal ID 単位。
- 進捗表示: `%` は使わず、「やるべきこと一覧」「完了済み」「未完了」「現在地」で記録する。

## Goal別進捗

### G-01: <ゴール名>

**やるべきこと一覧**

| Item ID | やるべきこと | 状態 | 根拠 |
| --- | --- | --- | --- |
| G01-I01 | <やるべきこと1> | Planned | <関連ファイル/リンク> |
| G01-I02 | <やるべきこと2> | Planned | <関連ファイル/リンク> |

- 完了済み: <Item IDの列挙>
- 未完了: <Item IDの列挙>
- 現在地: <現状を1文で記述>
"""
return load_template(PRODUCT_PROGRESS_TEMPLATE_PATH, fallback)


def build_task_readme(task_design_dir: str) -> str:
Expand Down