yodogawa 2.1.1 → 2.2.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +134 -82
- package/LICENSE +1 -1
- package/README.md +351 -246
- package/bin/checks/id-trace.js +137 -0
- package/bin/checks/links.js +59 -0
- package/bin/checks/placeholder.js +132 -0
- package/bin/checks/structure.js +127 -0
- package/bin/cli.js +51 -68
- package/bin/commands/doctor.js +128 -0
- package/bin/commands/install.js +58 -0
- package/bin/commands/new-task.js +117 -0
- package/bin/lib/check-cli.js +19 -0
- package/bin/lib/findings.js +31 -0
- package/bin/lib/markdown.js +103 -0
- package/bin/lib/project-spec.js +138 -0
- package/bin/lib/walk-md.js +23 -0
- package/package.json +68 -56
- package/skills/a-001-setup-doc-structure/SKILL.md +7 -6
- package/skills/a-001-setup-doc-structure/reference/directory-structure.md +40 -13
- package/skills/a-002-initialize-project/SKILL.md +72 -52
- package/skills/a-002-initialize-project/reference/hearing-questions.md +91 -41
- package/skills/a-002-initialize-project/reference/structure-check.md +12 -22
- package/skills/a-002a-slice-mvp-scope/SKILL.md +105 -0
- package/skills/a-002b-define-user-stories/SKILL.md +80 -0
- package/skills/a-002b-define-user-stories/reference/user-stories-guide.md +78 -0
- package/skills/a-003-create-scenarios/SKILL.md +37 -39
- package/{templates/project/02-behavior/01-scenarios.md → skills/a-003-create-scenarios/reference/detailed-gherkin-template.md} +413 -406
- package/skills/a-003-create-scenarios/reference/structure-check.md +20 -17
- package/skills/a-004-define-domain-model/SKILL.md +44 -36
- package/skills/a-004-define-domain-model/reference/event-storming-guide.md +33 -7
- package/skills/a-004-define-domain-model/reference/ubiquitous-language-guide.md +49 -0
- package/skills/a-005-create-domain-diagram/SKILL.md +18 -17
- package/skills/a-006-review-requirements-domain/SKILL.md +59 -22
- package/skills/a-006-review-requirements-domain/examples/review-report-template.md +27 -7
- package/skills/a-006-review-requirements-domain/reference/consistency-checks.md +53 -18
- package/skills/a-007-define-tech-stack/SKILL.md +4 -7
- package/skills/a-008-define-repository-structure/SKILL.md +2 -5
- package/skills/a-009-define-screen-design/SKILL.md +3 -6
- package/skills/a-010-define-design-system/SKILL.md +1 -5
- package/skills/a-011-define-data-model/SKILL.md +4 -7
- package/skills/a-012-define-api-spec/SKILL.md +1 -4
- package/skills/a-013-define-architecture/SKILL.md +1 -4
- package/skills/a-014-define-infrastructure/SKILL.md +9 -4
- package/skills/{a-002-initialize-project → a-014-define-infrastructure}/examples/nfr-baseline.md +2 -1
- package/{templates/project/01-requirements/04-non-functional-requirements.md → skills/a-014-define-infrastructure/examples/non-functional-requirements.md} +120 -115
- package/skills/a-015-review-design/reference/consistency-checks.md +1 -1
- package/skills/b-001-create-task-directory/SKILL.md +14 -8
- package/skills/b-002-create-task-definition/SKILL.md +4 -5
- package/skills/b-003-create-task-research/SKILL.md +4 -5
- package/skills/b-004-create-task-implementation/SKILL.md +4 -5
- package/skills/b-005-review-task/reference/assessment-criteria.md +3 -3
- package/skills/c-001-implement-task/SKILL.md +1 -1
- package/skills/c-001-implement-task/reference/implementation-loop.md +1 -1
- package/skills/c-002-update-documentation/SKILL.md +7 -7
- package/skills/c-002-update-documentation/examples/project-doc-updates.md +4 -4
- package/skills/c-002-update-documentation/reference/doc-structure-and-checks.md +8 -9
- package/templates/project/01-requirements/01-product-brief.md +186 -0
- package/templates/project/01-requirements/02-mvp-scope.md +64 -0
- package/templates/project/01-requirements/03-parking-lot.md +29 -0
- package/templates/project/01-requirements/05-user-stories.md +28 -124
- package/templates/project/01-requirements/{02-features-implemented.md → 06-features-implemented.md} +77 -73
- package/templates/project/02-behavior/01-core-scenarios.md +80 -0
- package/templates/project/03-domain/01-domain-model.md +120 -339
- package/templates/project/03-domain/01-domain-sketch.md +90 -0
- package/templates/project/03-domain/02-ubiquitous-language.md +32 -153
- package/templates/project/04-design/01-tech-stack.md +367 -367
- package/templates/project/04-design/02-repository-structure.md +391 -391
- package/templates/project/04-design/03-screen-design.md +596 -596
- package/templates/project/04-design/04-design-system.md +261 -261
- package/templates/project/04-design/05-data-model.md +211 -211
- package/templates/project/04-design/06-api-spec.md +226 -226
- package/templates/project/04-design/07-architecture.md +183 -183
- package/templates/project/04-design/08-infrastructure.md +180 -180
- package/templates/project/AI_CONTEXT.md +55 -0
- package/templates/project/STAKEHOLDER-SUMMARY.md +66 -0
- package/templates/tasks/task-template/a-definition.md +143 -143
- package/templates/tasks/task-template/b-research.md +185 -185
- package/templates/tasks/task-template/c-implementation.md +200 -200
- package/scripts/create-task.sh +0 -77
- package/scripts/init-project-docs.sh +0 -90
- package/scripts/init-task-doc.sh +0 -77
- package/scripts/setup-docs.sh +0 -92
- package/templates/documentation-rules.md +0 -143
- package/templates/project/01-requirements/01-system-overview.md +0 -49
- package/templates/project/01-requirements/03-features-planned.md +0 -75
|
@@ -1,28 +1,18 @@
|
|
|
1
1
|
# 構造チェックコマンド集
|
|
2
2
|
|
|
3
|
-
SKILL.md 手順
|
|
3
|
+
SKILL.md 手順8で使う、生成済みドキュメントの構造確認用コマンド。
|
|
4
4
|
|
|
5
|
-
##
|
|
5
|
+
## a-002 生成ドキュメントの必須セクション/テーブル検証
|
|
6
6
|
|
|
7
7
|
```bash
|
|
8
|
-
# 01-
|
|
9
|
-
grep "## 背景" docs/project/01-requirements/01-
|
|
10
|
-
grep "##
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
# 03-features-planned.md: テーブルヘッダー
|
|
17
|
-
grep "| Category 1 | Category 2 |" docs/project/01-requirements/03-features-planned.md \
|
|
18
|
-
&& echo "OK" || echo "MISSING: Table Header"
|
|
19
|
-
|
|
20
|
-
# 04-non-functional-requirements.md: テーブルヘッダー
|
|
21
|
-
grep "| カテゴリ | 要件 |" docs/project/01-requirements/04-non-functional-requirements.md \
|
|
22
|
-
&& echo "OK" || echo "MISSING: Table Header"
|
|
23
|
-
|
|
24
|
-
# 05-user-stories.md: テーブルヘッダー
|
|
25
|
-
grep "| ストーリーID | ストーリー |" docs/project/01-requirements/05-user-stories.md \
|
|
8
|
+
# 01-product-brief.md: 主要セクションの確認
|
|
9
|
+
grep "## 背景 / 解く課題" docs/project/01-requirements/01-product-brief.md && echo "OK" || echo "MISSING: 背景 / 解く課題"
|
|
10
|
+
grep "## 成功指標" docs/project/01-requirements/01-product-brief.md && echo "OK" || echo "MISSING: 成功指標"
|
|
11
|
+
grep "計測方法" docs/project/01-requirements/01-product-brief.md && echo "OK" || echo "MISSING: 成功指標の計測方法列"
|
|
12
|
+
grep "## 非ゴール" docs/project/01-requirements/01-product-brief.md && echo "OK" || echo "MISSING: 非ゴール"
|
|
13
|
+
|
|
14
|
+
# 06-features-implemented.md(existing モードのみ): テーブルヘッダー
|
|
15
|
+
grep "| 機能ID | Category 1 |" docs/project/01-requirements/06-features-implemented.md \
|
|
26
16
|
&& echo "OK" || echo "MISSING: Table Header"
|
|
27
17
|
```
|
|
28
18
|
|
|
@@ -42,7 +32,7 @@ git status
|
|
|
42
32
|
推奨コミットメッセージ:
|
|
43
33
|
|
|
44
34
|
```
|
|
45
|
-
docs:
|
|
35
|
+
docs: Product Brief(問題定義/Why)の作成
|
|
46
36
|
|
|
47
|
-
-
|
|
37
|
+
- Product Brief を追加(existing モードは実装済み機能も)
|
|
48
38
|
```
|
|
@@ -0,0 +1,105 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: a-002a-slice-mvp-scope
|
|
3
|
+
description: Product Brief を起点に Parking Lot(アイデア backlog)を生成し、候補機能を Must / Not Now / Won't に切り分けて MVP スコープを確定する。各 Must 機能を課題・仮説・成功指標に紐づけて正当化し、やらないこと(Out of Scope)も明示する。Product Brief 作成後(a-002 の後)に実行。
|
|
4
|
+
disable-model-invocation: true
|
|
5
|
+
allowed-tools: Read, Write, Edit, Bash, Grep, Glob
|
|
6
|
+
---
|
|
7
|
+
|
|
8
|
+
# SliceMvpScope (a-002a)
|
|
9
|
+
|
|
10
|
+
## 目的
|
|
11
|
+
|
|
12
|
+
- 「本当に必要なものだけ作る」ため、候補機能を **Must / Not Now / Won't** に切り分けて MVP スコープを確定する。
|
|
13
|
+
- 各 Must 機能を Product Brief の**課題・検証仮説・成功指標**に紐づけて正当化し、過剰作り込みを排除する。
|
|
14
|
+
- **やらないこと(Out of Scope / Won't)**を理由付きで明示し、ステークホルダーと合意できる状態にする。
|
|
15
|
+
- 実行順は a-002(Product Brief)の後、a-003(シナリオ)の前。
|
|
16
|
+
|
|
17
|
+
## 前提
|
|
18
|
+
|
|
19
|
+
- `docs/project/01-requirements/01-product-brief.md` が作成されていること(なければ先に `/a-002-initialize-project` を実行)。
|
|
20
|
+
- 課題・ターゲット・成功指標・非ゴールが Product Brief に記載されていること。
|
|
21
|
+
- アイデアの backlog(`03-parking-lot.md`)は本スキルが生成・管理する(Product Brief から候補を起こす)。
|
|
22
|
+
|
|
23
|
+
## 手順
|
|
24
|
+
|
|
25
|
+
### 1. 前提の確認
|
|
26
|
+
|
|
27
|
+
```bash
|
|
28
|
+
ls -l docs/project/01-requirements/01-product-brief.md 2>/dev/null || echo "MISSING: 01-product-brief.md"
|
|
29
|
+
```
|
|
30
|
+
|
|
31
|
+
存在しない場合: 「`01-product-brief.md` がありません。先に `/a-002-initialize-project` で Product Brief を作成してください。」と促して中断。
|
|
32
|
+
|
|
33
|
+
### 2. テンプレートの準備
|
|
34
|
+
|
|
35
|
+
このスキルの配置ディレクトリ(`skills/a-002a-slice-mvp-scope/`)を起点に、以下を Read→Write でコピーする(FOR EACH)。出力先に既に存在する場合は上書きせずスキップして報告する(冪等)。
|
|
36
|
+
|
|
37
|
+
- `../../templates/project/01-requirements/02-mvp-scope.md` → `docs/project/01-requirements/02-mvp-scope.md`
|
|
38
|
+
- `../../templates/project/01-requirements/03-parking-lot.md` → `docs/project/01-requirements/03-parking-lot.md`
|
|
39
|
+
|
|
40
|
+
### 3. 候補機能の洗い出し(Parking Lot への記入)
|
|
41
|
+
|
|
42
|
+
`01-product-brief.md`(課題・価値提案・成功指標)を読み込み、課題・価値提案を満たすのに必要な機能を逆算して候補を列挙する。列挙したアイデアは `03-parking-lot.md` に幅広く記入する(この段階では**優先度・機能 ID を厳密に決めず**拾う)。
|
|
43
|
+
|
|
44
|
+
- 差分提案例: 「Product Brief で『〇〇機能』への言及がありましたが backlog に未記載です。Parking Lot に追加しますか?」
|
|
45
|
+
- 記入項目: Category 1 / Category 2 / 機能名(アイデア段階でも可)/ 説明(目的・価値中心)。
|
|
46
|
+
|
|
47
|
+
> existing モードでは `06-features-implemented.md`(実装済み機能、a-002 が生成)も読み込み、未実装のギャップを Parking Lot 候補に加える。
|
|
48
|
+
|
|
49
|
+
### 4. MVP 判定(Must / Not Now / Won't)
|
|
50
|
+
|
|
51
|
+
FOR EACH 候補機能: `02-mvp-scope.md` のテーブルに記入する。
|
|
52
|
+
|
|
53
|
+
- **MVP判定**を Must / Not Now / Won't のいずれかに決める。
|
|
54
|
+
- Must: この MVP の仮説検証に不可欠。これが無いと価値が成立しない。
|
|
55
|
+
- Not Now: 価値はあるが今回は不要(→ Parking Lot へ)。
|
|
56
|
+
- Won't: 明示的に作らない(→ Out of Scope へ)。
|
|
57
|
+
- 各 Must は**課題 / 検証仮説 / 成功指標のいずれかに必ず紐づける**(同じ言葉で参照)。紐づかない Must は過剰作り込み候補として Not Now / Won't に倒す。
|
|
58
|
+
- **「より安い代替手段(手作業・既存ツール・外部サービス)で足りるか」を必ず問う**。足りるなら Must にしない。
|
|
59
|
+
|
|
60
|
+
検証する仮説は 1〜3 個に絞る。多すぎる場合は MVP が大きすぎる兆候として再検討する。
|
|
61
|
+
|
|
62
|
+
### 5. やらないこと(Out of Scope)の明示
|
|
63
|
+
|
|
64
|
+
`02-mvp-scope.md` の「Out of Scope」セクションに、Won't 機能と**作らない理由**を記入する。Product Brief の「非ゴール」と整合させる。
|
|
65
|
+
|
|
66
|
+
### 6. Parking Lot の整理
|
|
67
|
+
|
|
68
|
+
Not Now / Won't と判定したアイデアを `03-parking-lot.md` に移動・整理する。Parking Lot は優先度を厳密に決めない backlog として維持し、MVP Scope(優先度必須)と役割を分ける。
|
|
69
|
+
|
|
70
|
+
### 7. レビュー
|
|
71
|
+
|
|
72
|
+
- ユーザーに MVP Scope を提示し、以下を確認:
|
|
73
|
+
- 「Must が多すぎませんか?削れる Must はありませんか?」
|
|
74
|
+
- 「各 Must は仮説・指標に紐づいていますか?」
|
|
75
|
+
- 「やらないこと(Won't)に合意できますか?」
|
|
76
|
+
|
|
77
|
+
## 完了条件
|
|
78
|
+
|
|
79
|
+
- `docs/project/01-requirements/03-parking-lot.md` が作成され、候補アイデアが幅広く記入されている(優先度・機能 ID は未確定でよい)。
|
|
80
|
+
- `docs/project/01-requirements/02-mvp-scope.md` が作成され、各候補機能に Must / Not Now / Won't 判定が入っている。
|
|
81
|
+
- すべての Must 機能が課題 / 検証仮説 / 成功指標のいずれかに紐づいている。
|
|
82
|
+
- Out of Scope(Won't)が理由付きで記入されている。
|
|
83
|
+
- 検証する仮説が 1〜3 個に絞られている。
|
|
84
|
+
- ユーザーがスコープに合意またはフィードバックを提供している。
|
|
85
|
+
|
|
86
|
+
構造チェック:
|
|
87
|
+
|
|
88
|
+
```bash
|
|
89
|
+
grep "| Category 1 | Category 2 |" docs/project/01-requirements/03-parking-lot.md && echo "OK" || echo "MISSING: parking-lot Table Header"
|
|
90
|
+
grep -E "Must|Not Now|Won't" docs/project/01-requirements/02-mvp-scope.md && echo "OK" || echo "MISSING: MVP 判定"
|
|
91
|
+
```
|
|
92
|
+
|
|
93
|
+
## エスカレーション
|
|
94
|
+
|
|
95
|
+
- **Must が多すぎて削れない**: 「すべてを Day 1 に作ると MVP の意味が薄れます。最も検証したい仮説1つに絞ると、どれが Must ですか?」と問い直す。
|
|
96
|
+
- **代替手段で足りる機能が Must になっている**: 「これは手作業/既存ツールで代替できそうです。まず代替手段で検証しませんか?」と提案。
|
|
97
|
+
- **やらないことに合意が得られない**: 決裁者・関心事(Product Brief のステークホルダー)に立ち戻り、合意形成の論点として記録する。
|
|
98
|
+
|
|
99
|
+
## 参考
|
|
100
|
+
|
|
101
|
+
- [../../templates/project/01-requirements/02-mvp-scope.md](../../templates/project/01-requirements/02-mvp-scope.md) — MVP Scope テンプレート(判定基準・列定義)
|
|
102
|
+
- [../../templates/project/01-requirements/03-parking-lot.md](../../templates/project/01-requirements/03-parking-lot.md) — Parking Lot テンプレート(アイデア backlog)
|
|
103
|
+
- [../a-002-initialize-project/reference/hearing-questions.md](../a-002-initialize-project/reference/hearing-questions.md) — 深掘りフレーム集(より安い代替手段・競合 / Day 1 MVP / 1ヶ月後に検証したい仮説 / Inversion)。手順4・5 のスコープ判定で活用する
|
|
104
|
+
- `01-product-brief.md` — 課題・成功指標・非ゴールの参照元
|
|
105
|
+
- `03-parking-lot.md` — Not Now / Won't アイデアの backlog
|
|
@@ -0,0 +1,80 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: a-002b-define-user-stories
|
|
3
|
+
description: Product Brief と MVP スコープ確定後に、Must 機能を起点としたユーザーストーリー(役割・目的・価値)を作成し、要約レベルの受け入れ基準と優先度を付与する。a-002a(MVP スコープ)の後、a-003(シナリオ)の前に実行。
|
|
4
|
+
disable-model-invocation: true
|
|
5
|
+
allowed-tools: Read, Write, Edit, Bash, Grep, Glob
|
|
6
|
+
---
|
|
7
|
+
|
|
8
|
+
# DefineUserStories (a-002b)
|
|
9
|
+
|
|
10
|
+
## 目的
|
|
11
|
+
|
|
12
|
+
- MVP スコープで Must と判定した機能を、ユーザー視点のストーリー([役割]として[目的]がしたい、なぜなら[価値]だから)に翻訳する。
|
|
13
|
+
- 各ストーリーに要約レベルの受け入れ基準(AC)と優先度を付与し、後続の Core Scenarios(a-003)の入力にする。
|
|
14
|
+
- 実行順は a-002a(MVP スコープ)の後、a-003(シナリオ)の前。
|
|
15
|
+
|
|
16
|
+
## 前提
|
|
17
|
+
|
|
18
|
+
- `docs/project/01-requirements/01-product-brief.md` と `02-mvp-scope.md` が作成されていること(なければ先に `/a-002-initialize-project` → `/a-002a-slice-mvp-scope` を実行)。
|
|
19
|
+
- Must 機能が `02-mvp-scope.md` に確定していること。
|
|
20
|
+
|
|
21
|
+
## 手順
|
|
22
|
+
|
|
23
|
+
### 1. 前提の確認
|
|
24
|
+
|
|
25
|
+
```bash
|
|
26
|
+
ls -l docs/project/01-requirements/01-product-brief.md docs/project/01-requirements/02-mvp-scope.md 2>/dev/null \
|
|
27
|
+
|| echo "MISSING: 01-product-brief.md または 02-mvp-scope.md"
|
|
28
|
+
```
|
|
29
|
+
|
|
30
|
+
不足時: 「先に `/a-002-initialize-project`(Product Brief)→ `/a-002a-slice-mvp-scope`(MVP スコープ)を実行してください。」と促して中断。
|
|
31
|
+
|
|
32
|
+
### 2. テンプレートの準備
|
|
33
|
+
|
|
34
|
+
このスキルの配置ディレクトリ(`skills/a-002b-define-user-stories/`)を起点に、`../../templates/project/01-requirements/05-user-stories.md` を Read→Write で `docs/project/01-requirements/05-user-stories.md` へコピーする。出力先に既に存在する場合は上書きせずスキップして報告する(冪等)。
|
|
35
|
+
|
|
36
|
+
### 3. ストーリーの抽出と記入
|
|
37
|
+
|
|
38
|
+
`01-product-brief.md`(ターゲットユーザー・価値提案)と `02-mvp-scope.md`(Must 機能)を読み込み、Must 機能ごとに主要ユーザージャーニーを抽出する。
|
|
39
|
+
|
|
40
|
+
FOR EACH 主要ジャーニー: `05-user-stories.md` のテーブルに記入する。
|
|
41
|
+
|
|
42
|
+
- テンプレート: 「[役割]として、[〇〇機能]を使いたい、なぜなら[価値]だから」
|
|
43
|
+
- **ペルソナ列を必ず埋める**: `01-product-brief.md` の「ターゲットユーザー / 主要ペルソナ」表の ID(P-XXX)を「ペルソナ」列に記入し、ストーリーの `[役割]` を**その ID のペルソナと一致**させる(役割が宙に浮かないようにする)。
|
|
44
|
+
- **役割が既存ペルソナに無い場合**: 勝手に新しい役割を増やさず、`01-product-brief.md` のペルソナ表に追加してから参照する(ペルソナの SSoT は Product Brief)。
|
|
45
|
+
- ヒアリング: 「他に主要なユーザージャーニーがあれば教えてください」「各ストーリーの優先度・受け入れ基準は?」
|
|
46
|
+
- **Must 機能に紐づかないストーリーは作らない**(スコープ外。Parking Lot / Won't に倒す)。
|
|
47
|
+
|
|
48
|
+
> ストーリーの書き方・INVEST・受け入れ基準(AC)・優先度付け・3C の詳細は [reference/user-stories-guide.md](reference/user-stories-guide.md) を参照。
|
|
49
|
+
|
|
50
|
+
### 4. SSoT の住み分け確認
|
|
51
|
+
|
|
52
|
+
User Story は**要約レベルの受け入れ基準(AC)**を担い、実行時の主要行動は次スキル `/a-003-create-scenarios` の Core Scenario が担う。同じ振る舞いを二重に Gherkin 化しない。
|
|
53
|
+
|
|
54
|
+
### 5. レビューと構造チェック
|
|
55
|
+
|
|
56
|
+
ユーザーにストーリー一覧を提示し、INVEST(独立・交渉可能・価値・見積可能・小さい・テスト可能)の観点で確認する。
|
|
57
|
+
|
|
58
|
+
```bash
|
|
59
|
+
grep "| ストーリーID | ペルソナ | ストーリー |" docs/project/01-requirements/05-user-stories.md \
|
|
60
|
+
&& echo "OK" || echo "MISSING: Table Header"
|
|
61
|
+
```
|
|
62
|
+
|
|
63
|
+
## 完了条件
|
|
64
|
+
|
|
65
|
+
- `docs/project/01-requirements/05-user-stories.md` が作成され、各ストーリーに役割・目的・価値・優先度・受け入れ基準が記入されている。
|
|
66
|
+
- 各ストーリーの「ペルソナ」列が `01-product-brief.md` のペルソナ表の ID(P-XXX)を参照し、`[役割]` がその記載と一致している(役割が宙に浮いていない)。
|
|
67
|
+
- すべてのストーリーが `02-mvp-scope.md` の Must 機能に紐づいている。
|
|
68
|
+
- ユーザーがストーリー内容を確認し、承認またはフィードバックを提供している。
|
|
69
|
+
|
|
70
|
+
## エスカレーション
|
|
71
|
+
|
|
72
|
+
- **Must に紐づかないストーリーが出る**: 「このストーリーは MVP の Must 機能に対応しません。Parking Lot へ回すか、スコープを見直しますか?」と確認。
|
|
73
|
+
- **役割に対応するペルソナが Product Brief に無い**: 「この役割は `01-product-brief.md` のペルソナ表にありません。新しいペルソナとして追加しますか?それとも既存ペルソナに寄せますか?」と確認し、ストーリー側で役割を勝手に増やさない。
|
|
74
|
+
- **AC が曖昧**: 「『正しく動く』では検証できません。観測可能な条件(〜が表示される / 〜が保存される)で書けますか?」と促す。
|
|
75
|
+
|
|
76
|
+
## 参考
|
|
77
|
+
|
|
78
|
+
- [reference/user-stories-guide.md](reference/user-stories-guide.md) — INVEST・受け入れ基準・優先度付け・3C の詳しい考え方
|
|
79
|
+
- `01-product-brief.md` — ターゲットユーザー・価値提案の参照元
|
|
80
|
+
- `02-mvp-scope.md` — Must 機能の参照元
|
|
@@ -0,0 +1,78 @@
|
|
|
1
|
+
# ユーザーストーリー作成ガイド
|
|
2
|
+
|
|
3
|
+
`05-user-stories.md` を書くときの原則・フォーマット・ベストプラクティス集。テンプレートは記入欄中心に保ち、
|
|
4
|
+
詳しい考え方が必要なときに本ガイドを参照する。
|
|
5
|
+
|
|
6
|
+
## ユーザーストーリーとは
|
|
7
|
+
|
|
8
|
+
ユーザー視点の機能要求を物語形式で記述したバックログ。詳細仕様ではなく**議論の出発点(会話のきっかけ)**として機能する。
|
|
9
|
+
|
|
10
|
+
- **目的**: ユーザーの課題とニーズの明確化 / 開発チームとステークホルダーの共通理解 / 開発優先度の判断材料 / スプリント計画の基礎資料。
|
|
11
|
+
- **特徴**: 実装方法ではなくユーザーの「なぜ」に焦点。継続的に追加・更新・削除される Living Document。
|
|
12
|
+
|
|
13
|
+
## INVEST 原則
|
|
14
|
+
|
|
15
|
+
良いストーリーの 6 条件。
|
|
16
|
+
|
|
17
|
+
- **Independent(独立)**: 他ストーリーへの依存が少ない
|
|
18
|
+
- **Negotiable(交渉可能)**: 詳細は会話で詰められる余地がある
|
|
19
|
+
- **Valuable(価値)**: ユーザー/ビジネスに価値がある
|
|
20
|
+
- **Estimable(見積可能)**: 規模を見積もれる
|
|
21
|
+
- **Small(小さい)**: 1〜2 週間のスプリントで完了できるサイズ
|
|
22
|
+
- **Testable(テスト可能)**: 完了を検証できる
|
|
23
|
+
|
|
24
|
+
記載粒度: 大きすぎる場合は Epic として分割、小さすぎる場合は他ストーリーと統合を検討する。
|
|
25
|
+
|
|
26
|
+
## ストーリーのフォーマット
|
|
27
|
+
|
|
28
|
+
標準: 「**[役割]として、[目的]がしたい、なぜなら[理由]**」(英: "As a [role], I want [goal] so that [benefit]")。
|
|
29
|
+
|
|
30
|
+
- **役割(Who)**: ユーザーの種類やペルソナ(例: 新入社員 / 管理者 / エンドユーザー)。`01-product-brief.md` のペルソナ表の ID(P-XXX)を「ペルソナ」列で参照し、役割名をその記載と一致させる(役割を宙に浮かせない)。該当ペルソナが無ければ Product Brief 側に追加する。
|
|
31
|
+
- **目的(What)**: 実現したい機能や行動(例: プロフィールを編集したい)
|
|
32
|
+
- **理由(Why)**: その機能が必要な理由・得られる価値(例: 自分の情報を最新に保つため)
|
|
33
|
+
|
|
34
|
+
書き方のコツ: 技術用語を避けユーザーの言葉で書く / 実装方法(How)ではなく目的(What・Why)に集中 / 1 ストーリー 1 価値 / 曖昧さを避け具体的に。
|
|
35
|
+
|
|
36
|
+
## 受け入れ基準(Acceptance Criteria)
|
|
37
|
+
|
|
38
|
+
ストーリーが「完了」と判断できる明確な基準。測定可能・テスト可能・Yes/No で判定可能であること。
|
|
39
|
+
|
|
40
|
+
**フォーマット1: Given-When-Then(BDD 形式)**
|
|
41
|
+
|
|
42
|
+
```
|
|
43
|
+
Given [前提条件]
|
|
44
|
+
When [アクション]
|
|
45
|
+
Then [期待される結果]
|
|
46
|
+
```
|
|
47
|
+
|
|
48
|
+
例: `Given ログイン済みユーザーが自分のプロフィールページにいる時 / When 「編集」して保存すると / Then 変更後の名前が表示される`
|
|
49
|
+
|
|
50
|
+
**フォーマット2: チェックリスト形式**
|
|
51
|
+
|
|
52
|
+
- [ ] ユーザーは名前・メール・画像を編集できる
|
|
53
|
+
- [ ] 保存時にバリデーションエラーが表示される
|
|
54
|
+
|
|
55
|
+
書き方のベストプラクティス: 最低 1 個、通常 3〜7 個 / UI の細かい仕様ではなくビジネス価値の検証に焦点 / 「意図」を書き「実装方法」は書かない / 開発者とテスターが明確にテストできる内容にする。
|
|
56
|
+
|
|
57
|
+
## 優先度
|
|
58
|
+
|
|
59
|
+
開発順序の判断材料。一般的な分類:
|
|
60
|
+
|
|
61
|
+
- **High**: 必須機能、ビジネス価値が高い、依存が多い
|
|
62
|
+
- **Medium**: 重要だが緊急ではない、代替手段がある
|
|
63
|
+
- **Low**: あると良い、将来検討
|
|
64
|
+
|
|
65
|
+
考慮要素: ビジネス価値 / 緊急性 / リスク / 工数(ROI)/ 依存関係。
|
|
66
|
+
|
|
67
|
+
注意: 優先度は変動する(定期見直し)。すべてが High になる状況を避け、真の優先順位をつける。最終決定権はプロダクトオーナー。
|
|
68
|
+
|
|
69
|
+
> MVP の取捨選択(Must / Not Now / Won't)と検証仮説への紐づけは `/a-002a-slice-mvp-scope`(`02-mvp-scope.md`)が担う。
|
|
70
|
+
> 本ガイドの「優先度」は実装順の目安であり、MVP スコープ判断とは役割を分ける。
|
|
71
|
+
|
|
72
|
+
## 全体のベストプラクティス
|
|
73
|
+
|
|
74
|
+
- **3C 原則**: Card(カード)/ Conversation(会話)/ Confirmation(確認)。
|
|
75
|
+
- ストーリーはチーム全員(PO・開発・デザイナー・QA)で作成する。
|
|
76
|
+
- 定期的なリファインメントで詳細化・分割・統合する。
|
|
77
|
+
- 完了の定義(DoD)を明確にする。実装後のフィードバックを次のストーリーに反映する。
|
|
78
|
+
- テクニカルストーリー(リファクタリング・技術的負債解消)も含めてよい。
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
---
|
|
2
2
|
name: a-003-create-scenarios
|
|
3
|
-
description:
|
|
3
|
+
description: MVP Scope の Must 機能から「価値提供が成立する最小行動(Core Scenarios)」を定義する。Day 1 の成功体験・価値を壊す重大失敗・MVP で対応しない範囲を固定する。詳細な Gherkin は任意。要件定義後、ドメイン設計前の振る舞い明確化に使用。
|
|
4
4
|
disable-model-invocation: true
|
|
5
5
|
allowed-tools: Read, Write, Edit, Bash, Grep, Glob
|
|
6
6
|
---
|
|
@@ -9,64 +9,61 @@ allowed-tools: Read, Write, Edit, Bash, Grep, Glob
|
|
|
9
9
|
|
|
10
10
|
## 目的
|
|
11
11
|
|
|
12
|
-
-
|
|
13
|
-
-
|
|
14
|
-
-
|
|
12
|
+
- MVP Scope の Must 機能から、価値提供が成立する**最小の主要行動**を Core Scenarios として定義する。
|
|
13
|
+
- Day 1 に必ず通る成功体験(Happy Path 1〜3 本)と、価値を壊す重大失敗(Critical Failure)を固定する。
|
|
14
|
+
- MVP で対応しない行動・エラー(Not Covered in MVP)を明示し、スコープ膨張を防ぐ。
|
|
15
|
+
- 全ケース網羅の BDD(ハッピー / エラー / 境界値)は目的としない。詳細 Gherkin は実装直前・テスト設計時の任意作業に降格する。
|
|
15
16
|
|
|
16
17
|
## 前提
|
|
17
18
|
|
|
18
|
-
- `docs/project/01-requirements/05-user-stories.md` が作成されていること(`/a-002-initialize-project` 実行済み)。
|
|
19
|
-
- `docs/project/02-behavior/`
|
|
20
|
-
-
|
|
19
|
+
- `docs/project/01-requirements/01-product-brief.md` / `02-mvp-scope.md` / `05-user-stories.md` が作成されていること(`/a-002-initialize-project` → `/a-002a-slice-mvp-scope` → `/a-002b-define-user-stories` 実行済み)。
|
|
20
|
+
- `docs/project/02-behavior/` ディレクトリが存在すること(未作成なら本スキルが作成する)。
|
|
21
|
+
- ユーザーが Must 機能の主要な利用シーンを説明できること。
|
|
21
22
|
|
|
22
23
|
## 手順
|
|
23
24
|
|
|
24
|
-
### 1.
|
|
25
|
+
### 1. 前提ドキュメントの確認
|
|
25
26
|
|
|
26
27
|
```bash
|
|
27
28
|
ls -la docs/project/02-behavior/ 2>/dev/null || echo "ディレクトリが存在しません"
|
|
28
29
|
```
|
|
29
30
|
|
|
30
|
-
`
|
|
31
|
+
`02-mvp-scope.md` の **Must 機能**と `01-product-brief.md` の成功指標・クリティカル制約を読み込み、Core Scenario 化の対象(Must のみ)を把握する。Not Now / Won't は対象にしない。
|
|
31
32
|
|
|
32
33
|
### 2. テンプレートの準備
|
|
33
34
|
|
|
34
|
-
|
|
35
|
-
SCRIPT_DIR=$(for d in .claude .agents; do [ -d "$d" ] && echo "$d" && break; done)
|
|
36
|
-
cp "$SCRIPT_DIR/templates/project/02-behavior/01-scenarios.md" "docs/project/02-behavior/01-scenarios.md"
|
|
37
|
-
```
|
|
35
|
+
このスキルの配置ディレクトリ(`skills/a-003-create-scenarios/`)を起点に、相対パス `../../templates/project/02-behavior/01-core-scenarios.md` を Read で読み込み、その内容を `docs/project/02-behavior/01-core-scenarios.md` へ Write する。出力先が既に存在する場合は上書きせずスキップして報告する(冪等)。出力先ディレクトリ(`docs/project/02-behavior/`)が無ければ作成する。
|
|
38
36
|
|
|
39
|
-
### 3.
|
|
37
|
+
### 3. Core Flow の抽出と提案
|
|
40
38
|
|
|
41
|
-
|
|
39
|
+
Must 機能から、価値が成立する中核行動の流れ(Core Flow)を 1〜3 本提案する。各フローは「主アクター / 提供価値(So that)/ 対応 Must」で一覧化する。
|
|
42
40
|
|
|
43
|
-
-
|
|
44
|
-
-
|
|
41
|
+
- 「フロー: [フロー名](対応 Must: FN-XXX)」
|
|
42
|
+
- 「主アクター: [誰] / 提供価値: [So that ...]」
|
|
45
43
|
|
|
46
|
-
### 4.
|
|
44
|
+
### 4. Day 1 Happy Path と Critical Failure の記入
|
|
47
45
|
|
|
48
|
-
|
|
46
|
+
`01-core-scenarios.md` を更新する。ユーザーの意図を Given-When-Then で簡潔に書き、UI 操作の詳細には踏み込まない。
|
|
49
47
|
|
|
50
|
-
- **
|
|
51
|
-
-
|
|
52
|
-
-
|
|
53
|
-
- **タグ付け**: `@SC-XXX` ID 採番、`@smoke` `@happy-path` `@error-handling` 等
|
|
48
|
+
- **Day 1 Happy Path**(CS-XXX, 1〜3 本): リリース初日に必ず通る成功シナリオ。
|
|
49
|
+
- **Critical Failure**(CF-XXX): 起きると MVP の価値が崩れる失敗だけ(法務・課金・権限・データ消失など)。各失敗に「MVP での扱い」を書く。
|
|
50
|
+
- 網羅したくなったら止める。詳細な境界値・エラー網羅は任意で [reference/detailed-gherkin-template.md](reference/detailed-gherkin-template.md) を使う。
|
|
54
51
|
|
|
55
|
-
|
|
52
|
+
### 5. Not Covered in MVP と SSoT の整合
|
|
56
53
|
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
ドキュメント冒頭の一覧テーブルに、全シナリオの ID・機能・シナリオ名・優先度を記載する。テーブル例は [examples/gherkin-templates.md](examples/gherkin-templates.md#シナリオ一覧テーブル例) を参照。
|
|
54
|
+
- **Not Covered in MVP**: MVP で対応しない行動・エラーを明示し、`02-mvp-scope.md` の Not Now / Won't と整合させる。
|
|
55
|
+
- **SSoT の住み分け**: User Story(`05-user-stories.md`)は要約レベルの受け入れ基準(AC)、Core Scenario は実行時の主要行動。同じ振る舞いを二重に詳細化しない。
|
|
60
56
|
|
|
61
57
|
### 6. レビューと確認
|
|
62
58
|
|
|
63
|
-
|
|
59
|
+
ユーザーに提示し、(1) Day 1 の成功体験が正しいか、(2) Critical Failure に漏れがないか、(3) Not Covered が MVP Scope と矛盾しないかを確認する。質問例は [reference/structure-check.md](reference/structure-check.md#レビュー確認質問) を参照。
|
|
64
60
|
|
|
65
61
|
### 7. 構造チェック
|
|
66
62
|
|
|
67
63
|
```bash
|
|
68
|
-
grep "
|
|
69
|
-
&& grep "
|
|
64
|
+
grep "## Day 1 Happy Path" docs/project/02-behavior/01-core-scenarios.md \
|
|
65
|
+
&& grep "## Critical Failure" docs/project/02-behavior/01-core-scenarios.md \
|
|
66
|
+
&& grep "## Not Covered in MVP" docs/project/02-behavior/01-core-scenarios.md \
|
|
70
67
|
&& echo "OK" || echo "MISSING SECTION"
|
|
71
68
|
```
|
|
72
69
|
|
|
@@ -76,24 +73,25 @@ grep "Feature:" docs/project/02-behavior/01-scenarios.md \
|
|
|
76
73
|
|
|
77
74
|
```bash
|
|
78
75
|
git add docs/project/02-behavior/
|
|
79
|
-
git commit -m "docs:
|
|
76
|
+
git commit -m "docs: Core Scenarios(MVP 主要行動)の作成"
|
|
80
77
|
```
|
|
81
78
|
|
|
82
|
-
詳細は [reference/structure-check.md](reference/structure-check.md#git-への追加任意) を参照。
|
|
83
|
-
|
|
84
79
|
## 完了条件
|
|
85
80
|
|
|
86
|
-
- `docs/project/02-behavior/01-scenarios.md` が作成されている。
|
|
87
|
-
-
|
|
88
|
-
-
|
|
81
|
+
- `docs/project/02-behavior/01-core-scenarios.md` が作成されている。
|
|
82
|
+
- Must 機能に対する Day 1 Happy Path(1〜3 本)と Critical Failure が記述されている。
|
|
83
|
+
- Not Covered in MVP が明示され、`02-mvp-scope.md` の Not Now / Won't と整合している。
|
|
84
|
+
- User Story と Core Scenario の二重管理が避けられている(要約 AC ↔ 実行時主要行動)。
|
|
89
85
|
- ユーザーが内容を承認している。
|
|
90
86
|
|
|
91
87
|
## エスカレーション
|
|
92
88
|
|
|
93
|
-
-
|
|
94
|
-
-
|
|
89
|
+
- **MVP Scope が未確定でシナリオ化できない**: 「`/a-002a-slice-mvp-scope` に戻って Must 機能を確定しましょう。」
|
|
90
|
+
- **全ケースを網羅したくなる**: 「MVP 初期は網羅不要です。価値を壊す Critical Failure に限定し、残りは Not Covered in MVP へ逃がしましょう。詳細 Gherkin はテスト設計時に任意で作成できます。」
|
|
91
|
+
- **実装詳細への依存が強すぎる**: 「UI 操作(ボタンクリック等)ではなくユーザーの意図(登録する等)に焦点を当てた記述に変更しましょう。」
|
|
95
92
|
|
|
96
93
|
## 参考
|
|
97
94
|
|
|
98
|
-
- [examples/gherkin-templates.md](examples/gherkin-templates.md) — Feature / Scenario / Scenario Outline の記述例、タグ付けガイド、一覧テーブル例
|
|
99
95
|
- [reference/structure-check.md](reference/structure-check.md) — 構造確認コマンド、チェックリスト、レビュー観点、Git 追加例
|
|
96
|
+
- [reference/detailed-gherkin-template.md](reference/detailed-gherkin-template.md) — (任意)詳細な Gherkin / Scenario Outline / タグ運用テンプレート。実装直前・テスト設計時に使用
|
|
97
|
+
- [examples/gherkin-templates.md](examples/gherkin-templates.md) — (任意)Feature / Scenario / Scenario Outline の記述例、タグ付けガイド
|