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
package/package.json
CHANGED
|
@@ -1,56 +1,68 @@
|
|
|
1
|
-
{
|
|
2
|
-
"name": "yodogawa",
|
|
3
|
-
"version": "2.
|
|
4
|
-
"description": "
|
|
5
|
-
"
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
"
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
"
|
|
15
|
-
|
|
16
|
-
"
|
|
17
|
-
"
|
|
18
|
-
"
|
|
19
|
-
"
|
|
20
|
-
"
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
"
|
|
25
|
-
"
|
|
26
|
-
"
|
|
27
|
-
"
|
|
28
|
-
"
|
|
29
|
-
"
|
|
30
|
-
"
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
"
|
|
34
|
-
"
|
|
35
|
-
"
|
|
36
|
-
"
|
|
37
|
-
"
|
|
38
|
-
"
|
|
39
|
-
"
|
|
40
|
-
"
|
|
41
|
-
"
|
|
42
|
-
"
|
|
43
|
-
"
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
"
|
|
49
|
-
"
|
|
50
|
-
"
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
1
|
+
{
|
|
2
|
+
"name": "yodogawa",
|
|
3
|
+
"version": "2.2.0",
|
|
4
|
+
"description": "AIネイティブIDE向け仕様駆動開発スキル集",
|
|
5
|
+
"homepage": "https://github.com/tkysi-mi/Yodogawa#readme",
|
|
6
|
+
"repository": {
|
|
7
|
+
"type": "git",
|
|
8
|
+
"url": "git+https://github.com/tkysi-mi/Yodogawa.git"
|
|
9
|
+
},
|
|
10
|
+
"bugs": {
|
|
11
|
+
"url": "https://github.com/tkysi-mi/Yodogawa/issues"
|
|
12
|
+
},
|
|
13
|
+
"bin": {
|
|
14
|
+
"yodogawa": "bin/cli.js"
|
|
15
|
+
},
|
|
16
|
+
"files": [
|
|
17
|
+
"bin",
|
|
18
|
+
"skills",
|
|
19
|
+
"templates",
|
|
20
|
+
"README.md",
|
|
21
|
+
"CHANGELOG.md"
|
|
22
|
+
],
|
|
23
|
+
"scripts": {
|
|
24
|
+
"test": "node --test \"test/**/*.test.js\"",
|
|
25
|
+
"lint:md": "markdownlint-cli2 \"**/*.md\" \"#node_modules\" \"#test/fixtures\"",
|
|
26
|
+
"lint:md:fix": "markdownlint-cli2 --fix \"**/*.md\" \"#node_modules\" \"#test/fixtures\"",
|
|
27
|
+
"check:repo": "node scripts/repo-check.mjs",
|
|
28
|
+
"sync:manifests": "node scripts/sync-plugin-manifests.mjs",
|
|
29
|
+
"version": "node scripts/sync-plugin-manifests.mjs && git add .claude-plugin/plugin.json .claude-plugin/marketplace.json",
|
|
30
|
+
"prepare": "husky"
|
|
31
|
+
},
|
|
32
|
+
"keywords": [
|
|
33
|
+
"antigravity",
|
|
34
|
+
"cursor",
|
|
35
|
+
"claude-code",
|
|
36
|
+
"codex",
|
|
37
|
+
"skills",
|
|
38
|
+
"spec-driven-development",
|
|
39
|
+
"ai-coding",
|
|
40
|
+
"documentation",
|
|
41
|
+
"project-management",
|
|
42
|
+
"bdd",
|
|
43
|
+
"gherkin",
|
|
44
|
+
"domain-driven-design",
|
|
45
|
+
"event-storming",
|
|
46
|
+
"api-design",
|
|
47
|
+
"adr",
|
|
48
|
+
"task-management",
|
|
49
|
+
"user-stories",
|
|
50
|
+
"copilot",
|
|
51
|
+
"gpt",
|
|
52
|
+
"claude"
|
|
53
|
+
],
|
|
54
|
+
"author": "tkysi-mi",
|
|
55
|
+
"license": "MIT",
|
|
56
|
+
"engines": {
|
|
57
|
+
"node": ">=18"
|
|
58
|
+
},
|
|
59
|
+
"dependencies": {
|
|
60
|
+
"fs-extra": "^11.2.0",
|
|
61
|
+
"kleur": "^4.1.5",
|
|
62
|
+
"prompts": "^2.4.2"
|
|
63
|
+
},
|
|
64
|
+
"devDependencies": {
|
|
65
|
+
"husky": "^9.1.7",
|
|
66
|
+
"markdownlint-cli2": "^0.22.1"
|
|
67
|
+
}
|
|
68
|
+
}
|
|
@@ -19,18 +19,19 @@ allowed-tools: Read, Write, Bash, Glob
|
|
|
19
19
|
|
|
20
20
|
## 手順
|
|
21
21
|
|
|
22
|
-
### 1.
|
|
22
|
+
### 1. ディレクトリ構造の作成
|
|
23
23
|
|
|
24
|
-
|
|
24
|
+
次のディレクトリを作成する(`mkdir -p` なので既存の場合は不足分のみ追加される)。
|
|
25
25
|
|
|
26
26
|
```bash
|
|
27
|
-
|
|
28
|
-
bash "$SCRIPT_DIR/scripts/setup-docs.sh"
|
|
27
|
+
mkdir -p docs/project/01-requirements docs/project/02-behavior docs/project/03-domain docs/project/04-design docs/tasks
|
|
29
28
|
```
|
|
30
29
|
|
|
30
|
+
続いて `docs/README.md` を作成する。内容は [reference/directory-structure.md](reference/directory-structure.md#docsreadmemd-テンプレート) の「docs/README.md テンプレート」をそのまま Write する。`docs/README.md` が既に存在する場合は、上書き前にユーザーへ確認する。
|
|
31
|
+
|
|
31
32
|
### 2. 結果の確認
|
|
32
33
|
|
|
33
|
-
|
|
34
|
+
ディレクトリ構造と `docs/README.md` が期待どおり生成されていることを確認。生成構造と各ディレクトリの用途は [reference/directory-structure.md](reference/directory-structure.md#生成されるディレクトリ構造) を参照。
|
|
34
35
|
|
|
35
36
|
### 3. Git への追加(オプション)
|
|
36
37
|
|
|
@@ -45,8 +46,8 @@ git status
|
|
|
45
46
|
|
|
46
47
|
### 4. 完了条件の確認
|
|
47
48
|
|
|
48
|
-
- [ ] スクリプトが正常に終了した
|
|
49
49
|
- [ ] `docs/` ディレクトリ構造が正しく作成されている
|
|
50
|
+
- [ ] `docs/README.md` が作成されている
|
|
50
51
|
|
|
51
52
|
## 完了条件
|
|
52
53
|
|
|
@@ -17,8 +17,8 @@ docs/
|
|
|
17
17
|
|
|
18
18
|
### 各ディレクトリの用途
|
|
19
19
|
|
|
20
|
-
- `project/01-requirements/` —
|
|
21
|
-
- `project/02-behavior/` — 振る舞い定義(
|
|
20
|
+
- `project/01-requirements/` — 要件定義(Product Brief、MVP スコープ、Parking Lot、ユーザーストーリー。詳細な非機能要件は設計フェーズ/a-014 で扱う)
|
|
21
|
+
- `project/02-behavior/` — 振る舞い定義(Core Scenarios)
|
|
22
22
|
- `project/03-domain/` — ドメインモデル、ユビキタス言語
|
|
23
23
|
- `project/04-design/` — 画面設計、データモデル、API 仕様、アーキテクチャ等
|
|
24
24
|
- `tasks/` — 個別タスク(`task{ID}-{SLUG}/` 形式)
|
|
@@ -32,17 +32,44 @@ docs/
|
|
|
32
32
|
- ドキュメント構成を説明する docs/README.md を追加
|
|
33
33
|
```
|
|
34
34
|
|
|
35
|
-
##
|
|
35
|
+
## docs/README.md テンプレート
|
|
36
36
|
|
|
37
|
-
|
|
38
|
-
if [ -d ".claude" ]; then
|
|
39
|
-
SCRIPT_DIR=".claude"
|
|
40
|
-
elif [ -d ".agents" ]; then
|
|
41
|
-
SCRIPT_DIR=".agents"
|
|
42
|
-
else
|
|
43
|
-
echo "エラー: .claude または .agents ディレクトリが見つかりません"
|
|
44
|
-
exit 1
|
|
45
|
-
fi
|
|
37
|
+
SKILL.md 手順1で `docs/README.md` として Write する内容。
|
|
46
38
|
|
|
47
|
-
|
|
39
|
+
```markdown
|
|
40
|
+
# プロジェクトドキュメント
|
|
41
|
+
|
|
42
|
+
このディレクトリには、プロジェクト全体のドキュメントと個別タスクのドキュメントを管理します。
|
|
43
|
+
|
|
44
|
+
## 構成
|
|
45
|
+
|
|
46
|
+
### project/
|
|
47
|
+
プロジェクト全体のドキュメント。要件定義、設計、アーキテクチャなど、プロジェクトスコープ全体に関わる情報を記載します。
|
|
48
|
+
|
|
49
|
+
- **01-requirements/**: 要件定義(Product Brief、MVP スコープ、Parking Lot、ユーザーストーリーなど。詳細な非機能要件は設計フェーズ/a-014 で扱う)
|
|
50
|
+
- **02-behavior/**: 振る舞い定義(Core Scenarios、ユースケース、ユーザージャーニーなど)
|
|
51
|
+
- **03-domain/**: ドメインモデル(エンティティ、用語集など)
|
|
52
|
+
- **04-design/**: 設計(アーキテクチャ、データモデル、API仕様など)
|
|
53
|
+
|
|
54
|
+
### tasks/
|
|
55
|
+
個別タスクのドキュメント。Issue やチケット単位で作成します。
|
|
56
|
+
|
|
57
|
+
## 更新方針
|
|
58
|
+
|
|
59
|
+
### プロジェクト全体のドキュメント (project/)
|
|
60
|
+
- プロジェクトのスコープ全体に影響する情報を記載
|
|
61
|
+
- チーム全体で共有すべき要件・設計・アーキテクチャを管理
|
|
62
|
+
- 更新時は関係者にレビューを依頼
|
|
63
|
+
|
|
64
|
+
### 個別タスクのドキュメント (tasks/)
|
|
65
|
+
- 特定の Issue やチケットに紐づく情報を記載
|
|
66
|
+
- タスク単位で作成・完了・アーカイブ
|
|
67
|
+
- 完了後は参照資料として保持、または削除
|
|
68
|
+
|
|
69
|
+
## ドキュメント作成ガイドライン
|
|
70
|
+
|
|
71
|
+
- **具体的**: 抽象的な表現を避け、数値・期限・制約を明確に記載
|
|
72
|
+
- **測定可能**: 成功基準やパフォーマンス目標を定量化
|
|
73
|
+
- **最新**: 変更があれば速やかに更新し、古い情報を残さない
|
|
74
|
+
- **簡潔**: 必要最低限の情報に絞り、詳細はコードやリンク先に委ねる
|
|
48
75
|
```
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
---
|
|
2
2
|
name: a-002-initialize-project
|
|
3
|
-
description:
|
|
3
|
+
description: プロジェクトの問題定義(Why)を Product Brief(誰のどの課題を・なぜ今・どう解き・どう成功を測るか)として対話形式で作成し、要件定義の起点とする。MVP スコープ・ユーザーストーリーは後続スキルが担う。新規(greenfield)/ 既存(existing)の2モードに対応し、既定は新規。新規プロジェクト開始時、または要件が未整備の場合に使用。
|
|
4
4
|
disable-model-invocation: true
|
|
5
5
|
allowed-tools: Read, Write, Edit, Bash, Grep, Glob
|
|
6
6
|
---
|
|
@@ -9,54 +9,73 @@ allowed-tools: Read, Write, Edit, Bash, Grep, Glob
|
|
|
9
9
|
|
|
10
10
|
## 目的
|
|
11
11
|
|
|
12
|
-
-
|
|
13
|
-
-
|
|
12
|
+
- Product Brief を中核に、誰のどの課題を・なぜ今・どう解き・どう成功を測るかをステークホルダーと合意できる形で言語化する。
|
|
13
|
+
- 新規(greenfield)/ 既存(existing)の2モードに分岐し、既定は新規プロダクト。
|
|
14
|
+
- Product Brief を起点に後続スキルへ展開する: Parking Lot(アイデア backlog)と MVP スコープは `/a-002a-slice-mvp-scope`、ユーザーストーリーは `/a-002b-define-user-stories` が担う(実装済み機能の棚卸しは existing モードのみ本スキルが扱う)。
|
|
15
|
+
- 詳細な非機能要件(応答時間・稼働率・スケーラビリティ等の定量値)は初期フェーズでは扱わない。MVP の作り方を変えるほど重要な制約のみを Product Brief の「クリティカル制約」に集約し、定量 NFR は設計フェーズ `/a-014-define-infrastructure` が所有する。
|
|
14
16
|
- 抽象的・曖昧な表現を避け、対話を通じて具体的な数値・期限・制約・優先度を明確化する。
|
|
15
17
|
|
|
16
18
|
## 前提
|
|
17
19
|
|
|
18
|
-
- `docs
|
|
19
|
-
-
|
|
20
|
-
- ユーザーがプロジェクト概要と主要機能の基本情報を提供できること
|
|
20
|
+
- `docs/` 配下への書き込み権限があること(必要なディレクトリ構造は本スキルが自動作成するため、`/a-001-setup-doc-structure` の事前実行は不要)
|
|
21
|
+
- ユーザーがプロジェクトの課題・対象ユーザー・期待価値の基本情報を提供できること
|
|
21
22
|
|
|
22
23
|
## 手順
|
|
23
24
|
|
|
24
|
-
### 1.
|
|
25
|
+
### 1. ドキュメント基盤の確保
|
|
26
|
+
|
|
27
|
+
要件定義に必要なディレクトリ構造を確保する。`mkdir -p` なので冪等で、明示的な `/a-001-setup-doc-structure` 実行は不要(必要時に本手順が自動で初期化する)。
|
|
25
28
|
|
|
26
29
|
```bash
|
|
27
|
-
|
|
30
|
+
mkdir -p docs/project/01-requirements docs/project/02-behavior docs/project/03-domain docs/project/04-design docs/tasks
|
|
28
31
|
```
|
|
29
32
|
|
|
30
|
-
|
|
33
|
+
`docs/README.md` が無ければ、[../a-001-setup-doc-structure/reference/directory-structure.md](../a-001-setup-doc-structure/reference/directory-structure.md#docsreadmemd-テンプレート) の「docs/README.md テンプレート」を Write する(既存の場合は上書きしない)。
|
|
31
34
|
|
|
32
|
-
### 2.
|
|
35
|
+
### 2. モード判定(greenfield / existing)
|
|
33
36
|
|
|
34
|
-
|
|
37
|
+
このスキルは新規プロダクト(**greenfield**)と既存プロダクト(**existing / brownfield**)の2モードに対応する。後続手順(テンプレート選定・コード分析・実装済み機能の棚卸し)の分岐に影響するため、最初にモードを確定する。
|
|
35
38
|
|
|
36
|
-
|
|
37
|
-
SCRIPT_DIR=$(for d in .claude .agents; do [ -d "$d" ] && echo "$d" && break; done)
|
|
38
|
-
bash "$SCRIPT_DIR/scripts/init-project-docs.sh" requirements
|
|
39
|
-
```
|
|
39
|
+
判定ロジック:
|
|
40
40
|
|
|
41
|
-
|
|
41
|
+
- ユーザーがモードを明示した場合はそれを優先する。
|
|
42
|
+
- 明示がない場合は、軽量シグナルから推定する。
|
|
42
43
|
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
-
|
|
44
|
+
```bash
|
|
45
|
+
ls -F
|
|
46
|
+
cat package.json 2>/dev/null
|
|
47
|
+
cat README.md 2>/dev/null
|
|
48
|
+
find src app lib -maxdepth 2 2>/dev/null
|
|
49
|
+
```
|
|
48
50
|
|
|
49
|
-
|
|
51
|
+
- ソースコード・`package.json`・既存ドキュメントが揃い相応の規模があれば **existing** を候補にする。
|
|
52
|
+
- ファイルがほとんど無い/ソースコードが無い場合は **greenfield** を候補にする。
|
|
53
|
+
- 推定が曖昧な場合の**既定は greenfield**(Yodogawa の主目的は新規プロダクトの仕様駆動立ち上げのため)。
|
|
54
|
+
- 「このプロジェクトを greenfield(新規)/ existing(既存)として進めます。よろしいですか?」とユーザーに提示し、確認を取る。
|
|
50
55
|
|
|
51
|
-
|
|
56
|
+
確定したモードを以降の手順で参照する。
|
|
52
57
|
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
58
|
+
### 3. テンプレートのコピー(モード別)
|
|
59
|
+
|
|
60
|
+
このスキルの配置ディレクトリ(`skills/a-002-initialize-project/`)を起点に、`docs/project/01-requirements/` へテンプレートを Read→Write する(FOR EACH)。出力先に既に存在するファイルは上書きせずスキップして報告する(冪等)。出力先ディレクトリが無ければ作成する。
|
|
61
|
+
|
|
62
|
+
**existing モード**(2 ファイル):
|
|
63
|
+
|
|
64
|
+
- `../../templates/project/01-requirements/01-product-brief.md` → `docs/project/01-requirements/01-product-brief.md`
|
|
65
|
+
- `../../templates/project/01-requirements/06-features-implemented.md` → `docs/project/01-requirements/06-features-implemented.md`
|
|
56
66
|
|
|
57
|
-
|
|
67
|
+
**greenfield モード**(必須 1 ファイル): `01-product-brief.md` のみ。新規プロダクトでは実装済み機能がまだ存在しないため、`06-features-implemented.md` は**任意**扱いとし、ユーザーが棚卸しを希望した場合のみ「空の任意資料」としてコピーする。
|
|
58
68
|
|
|
59
|
-
|
|
69
|
+
> `03-parking-lot.md` / `02-mvp-scope.md` は本スキルでは生成しない。次スキル `/a-002a-slice-mvp-scope` が作成する。
|
|
70
|
+
> `05-user-stories.md` は `/a-002b-define-user-stories` が作成する。
|
|
71
|
+
>
|
|
72
|
+
> `04-non-functional-requirements.md`(詳細な定量 NFR)は初期フェーズでは生成しない。クリティカル制約は Product Brief(手順5)に集約し、詳細 NFR は設計フェーズ `/a-014-define-infrastructure` が扱う(採番上 04 は欠番)。
|
|
73
|
+
|
|
74
|
+
### 4. コードベースの自動分析と提案(existing モードのみ)
|
|
75
|
+
|
|
76
|
+
> greenfield モードではこの手順をスキップする。
|
|
77
|
+
|
|
78
|
+
**詳細調査**:
|
|
60
79
|
|
|
61
80
|
```bash
|
|
62
81
|
cat package.json 2>/dev/null
|
|
@@ -64,51 +83,53 @@ cat README.md 2>/dev/null
|
|
|
64
83
|
find src app lib -maxdepth 2 2>/dev/null
|
|
65
84
|
```
|
|
66
85
|
|
|
67
|
-
結果から以下を推測・提示:
|
|
68
|
-
|
|
69
|
-
### 4. システム概要の記入
|
|
70
|
-
|
|
71
|
-
`01-system-overview.md` を開き、「背景」「目的」をヒアリングして記入する。質問例は [reference/hearing-questions.md](reference/hearing-questions.md) を参照。
|
|
72
|
-
|
|
73
|
-
### 5. 実装済み機能一覧の記入
|
|
74
|
-
|
|
75
|
-
`02-features-implemented.md` に、コードベース調査で検出したディレクトリ/ファイル名から機能を提案し、ヒアリング結果をテーブルに記入する(Category 1/2、機能名、説明、機能 ID)。
|
|
86
|
+
結果から以下を推測・提示: Product Brief の下書き(課題・目的・技術スタック)、実装済み機能(ファイル構造からの推測)、想定ユーザー像。
|
|
76
87
|
|
|
77
|
-
|
|
88
|
+
### 5. Product Brief の記入(中核)
|
|
78
89
|
|
|
79
|
-
|
|
90
|
+
`01-product-brief.md` を開き、深掘りヒアリングで埋める。**これがこのスキルの中核成果物**で、後続スキル(MVP Scope / Core Scenarios / PM Gate)が参照する。
|
|
80
91
|
|
|
81
|
-
|
|
92
|
+
- 記入対象: 背景/解く課題(証拠・規模つき)、ターゲットユーザー / 主要ペルソナ、ステークホルダー、現在の代替手段・競合スキャン、価値提案/差別化、Why now、成功指標(North Star / KPI / Guardrail +計測方法)、クリティカル制約、非ゴール、未確定事項。
|
|
93
|
+
- **ペルソナ表**: 主要 1〜2 ペルソナを ID(P-XXX)付きで記入する(ゴール / 課題・ペイン / 利用文脈、任意でニーズの強さ)。この ID は後続の User Story(`/a-002b`)が「役割」を参照解決する SSoT になるため、過剰にせず・空欄にせず埋める。
|
|
94
|
+
- **代替手段・競合スキャン**: 主要な数件(2〜4 件)を表で軽量にスキャンする(手作業/Workaround・既製ツール・競合プロダクト)。各代替の「弱み・不満」が価値提案の起点になる。網羅・深追いはしない(YAGNI)。
|
|
95
|
+
- **価値提案 / 差別化**: バリュープロポジションを1文(誰の・どの課題を・どう解き・なぜ既存より良いか)に凝縮し、差別化ポイント(Why us、最大3点)をスキャン表の「弱み」と対応づける。
|
|
96
|
+
- 「課題 → なぜ → なぜ」と3段以上掘り下げ、表層の要望ではなく本質的な課題に到達する。
|
|
97
|
+
- 「この課題を作らずに放置したら何が起きるか」「既存の代替手段で十分ではないか」を必ず確認する。
|
|
82
98
|
|
|
83
|
-
|
|
99
|
+
質問例は [reference/hearing-questions.md](reference/hearing-questions.md#手順5-product-brief) を参照。
|
|
84
100
|
|
|
85
|
-
|
|
101
|
+
### 6. 実装済み機能一覧の記入(existing モードのみ)
|
|
86
102
|
|
|
87
|
-
|
|
103
|
+
> greenfield モードではこの手順をスキップする(`06-features-implemented.md` は任意の空資料)。
|
|
88
104
|
|
|
89
|
-
`
|
|
105
|
+
`06-features-implemented.md` に、コードベース調査で検出したディレクトリ/ファイル名から機能を提案し、ヒアリング結果をテーブルに記入する(Category 1/2、機能名、説明、機能 ID)。
|
|
90
106
|
|
|
91
|
-
|
|
107
|
+
コード調査コマンドとヒアリング項目は [reference/hearing-questions.md](reference/hearing-questions.md#手順6-実装済み機能一覧) を参照。
|
|
92
108
|
|
|
93
|
-
###
|
|
109
|
+
### 7. 全体レビュー
|
|
94
110
|
|
|
95
111
|
- 作成した全ドキュメントをユーザーに提示し、以下を確認:
|
|
96
112
|
- 「記載内容に誤りや漏れはありませんか?」
|
|
97
113
|
- 「抽象的すぎる記述や、解釈が分かれそうな表現はありますか?」
|
|
98
114
|
- 「テンプレートのコメントや不要な例示は適切に処理されていますか?」
|
|
99
115
|
|
|
100
|
-
###
|
|
116
|
+
### 8. 完了条件と構造の確認
|
|
101
117
|
|
|
102
118
|
- ファイルの存在と主要セクション/テーブル構造を検証。
|
|
103
119
|
- 検証コマンド・チェックリスト・Git コミット手順は [reference/structure-check.md](reference/structure-check.md) を参照。
|
|
104
120
|
|
|
105
|
-
###
|
|
121
|
+
### 9. Git への追加(オプション)
|
|
106
122
|
|
|
107
123
|
詳細は [reference/structure-check.md](reference/structure-check.md#git-への追加オプション) を参照。
|
|
108
124
|
|
|
109
125
|
## 完了条件
|
|
110
126
|
|
|
111
|
-
- `docs/project/01-requirements
|
|
127
|
+
- `docs/project/01-requirements/01-product-brief.md` が作成され、課題・ターゲット・代替手段・価値提案・Why now・成功指標・クリティカル制約・非ゴールが具体的に埋まっている(**中核成果物**)
|
|
128
|
+
- あわせて要件定義ドキュメントが作成されている
|
|
129
|
+
- existing モード: `01`, `06` の 2 ドキュメント
|
|
130
|
+
- greenfield モード: `01`。`06-features-implemented.md` は任意
|
|
131
|
+
- `04`(詳細 NFR)は初期フェーズでは生成しない(設計フェーズ `/a-014` が所有)
|
|
132
|
+
- Parking Lot(`03-parking-lot.md`)・MVP スコープ(`02-mvp-scope.md`)は次スキル `/a-002a-slice-mvp-scope` で、ユーザーストーリー(`05-user-stories.md`)は `/a-002b-define-user-stories` で作成する
|
|
112
133
|
- すべてのドキュメントで抽象的表現が最小化され、具体的な数値・期限・制約が記載されている
|
|
113
134
|
- ユーザーがドキュメント内容を確認し、承認またはフィードバックを提供している
|
|
114
135
|
|
|
@@ -120,6 +141,5 @@ find src app lib -maxdepth 2 2>/dev/null
|
|
|
120
141
|
|
|
121
142
|
## 参考
|
|
122
143
|
|
|
123
|
-
- [reference/hearing-questions.md](reference/hearing-questions.md) —
|
|
124
|
-
- [reference/structure-check.md](reference/structure-check.md) — 手順
|
|
125
|
-
- [examples/nfr-baseline.md](examples/nfr-baseline.md) — 非機能要件の標準ベースライン提案値
|
|
144
|
+
- [reference/hearing-questions.md](reference/hearing-questions.md) — Product Brief(手順5)・実装済み機能(手順6)のヒアリング質問集。末尾に深掘りフレーム集(5 Whys / Pre-mortem / 代替手段・競合 / Day 1 MVP / 検証仮説 / Inversion)。深掘りフレーム集は `/a-002a-slice-mvp-scope` からも参照される
|
|
145
|
+
- [reference/structure-check.md](reference/structure-check.md) — 手順8の構造チェックコマンドと Git コミット手順(手順9)
|
|
@@ -1,23 +1,65 @@
|
|
|
1
1
|
# ヒアリング質問集
|
|
2
2
|
|
|
3
|
-
|
|
3
|
+
a-002 の各テンプレートに記入する際のヒアリング質問一覧。Product Brief(問題定義/Why)を中核に、existing モードの実装済み機能をカバーする。Parking Lot / ユーザーストーリーの質問は後続スキル(`/a-002a-slice-mvp-scope` / `/a-002b-define-user-stories`)が扱う。
|
|
4
4
|
|
|
5
|
-
|
|
5
|
+
末尾の「[深掘りフレーム集](#深掘りフレーム集product-brief--mvp-scope-共通)」は Product Brief(a-002)と MVP Scope(`/a-002a-slice-mvp-scope`)の両方で使える思考技法。表層の要望で止めず、根本課題・失敗要因・最小スコープまで掘り下げるために併用する。
|
|
6
6
|
|
|
7
|
-
|
|
7
|
+
## 手順5: Product Brief
|
|
8
8
|
|
|
9
|
-
-
|
|
10
|
-
- 「その問題はなぜ重要ですか?放置した場合のリスクは?」
|
|
11
|
-
- 「問題の影響を受けるステークホルダー(ユーザー、組織、チームなど)は誰ですか?」
|
|
12
|
-
- 「具体的な数値やデータ(作業時間、コスト、離脱率など)があれば教えてください。」
|
|
9
|
+
`01-product-brief.md` の各節を埋めるための質問。表層の要望ではなく**本質的な課題**に到達することを重視する。
|
|
13
10
|
|
|
14
|
-
###
|
|
11
|
+
### 背景 / 解く課題(Why-chain で深掘り)
|
|
15
12
|
|
|
16
|
-
-
|
|
17
|
-
-
|
|
18
|
-
-
|
|
13
|
+
- 「このプロダクトで解決したい**具体的な課題**は何ですか?(誰が・いつ・どこで困っていますか)」
|
|
14
|
+
- 「それはなぜ問題なのですか?」→ さらに「ではなぜそれが起きるのですか?」と**3段以上 Why を繰り返す**(5 Whys)。表層の要望の裏にある根本課題を特定する。
|
|
15
|
+
- 「その課題の**証拠・規模**はありますか?(発生頻度、所要時間、コスト、影響人数などの具体的な数値)」
|
|
16
|
+
- 「この課題を**解かずに放置したら何が起きますか?**(Cost of Inaction)」
|
|
19
17
|
|
|
20
|
-
|
|
18
|
+
### ターゲットユーザー / ペルソナ
|
|
19
|
+
|
|
20
|
+
> 主要 1〜2 ペルソナを ID(P-XXX)付きで `01-product-brief.md` のペルソナ表に記入する。この ID は後続の User Story(/a-002b)が「役割」を参照解決する SSoT になる。MVP では過剰な人物像づくりはしない(YAGNI)。
|
|
21
|
+
|
|
22
|
+
- 「主に**誰のため**のプロダクトですか?1〜2の主要ペルソナに絞るとどうなりますか?」
|
|
23
|
+
- 「そのユーザーが片付けたい**仕事(Job / ゴール)**は何ですか?どんな状況で発生しますか?」
|
|
24
|
+
- 「そのペルソナが今抱えている**主な課題・ペイン**は何ですか?」
|
|
25
|
+
- 「**いつ・どこで・どんな状況**で使いますか?(利用文脈: タイミング・デバイス・頻度)」
|
|
26
|
+
- 「(任意)その課題の**切実さ**はどの程度ですか?(高/中/低。MVP の優先順位判断に使う)」
|
|
27
|
+
|
|
28
|
+
### ステークホルダー / 決裁者
|
|
29
|
+
|
|
30
|
+
- 「この施策の**意思決定者(決裁者)**は誰ですか?」
|
|
31
|
+
- 「**影響を受ける関係者**は誰で、それぞれ何を気にしますか?(コスト、運用、セキュリティ等)」
|
|
32
|
+
|
|
33
|
+
### 現在の代替手段・競合スキャン
|
|
34
|
+
|
|
35
|
+
> 主要な数件(2〜4 件)を `01-product-brief.md` の「現在の代替手段・競合スキャン」表に記入する。網羅・深追いはしない(YAGNI)。
|
|
36
|
+
|
|
37
|
+
- 「今この課題を**どうしのいでいますか?**(手作業、既存ツール、外部サービス、我慢)」
|
|
38
|
+
- 「同じ課題を解く**競合・類似プロダクト**はありますか?(数件で可)」
|
|
39
|
+
- 各代替について「それが**今も使われている理由(強み)**は?」「**何が不十分・不満(弱み)**ですか?」を問い、表の各行を埋める。
|
|
40
|
+
- 「代替手段で十分なら、本当に作る必要がありますか?」(→ 不要なら MVP Scope で Must にしない)
|
|
41
|
+
|
|
42
|
+
### 価値提案 / 差別化 / Why now
|
|
43
|
+
|
|
44
|
+
- 「このプロダクトの価値を**1文**で言うと?」→ 「**[誰]** の **[課題]** を **[解決方法]** で解決する。**[代替手段]** と違い **[なぜ良いか]**」の穴埋めで凝縮する(バリュープロポジション)。
|
|
45
|
+
- 「上のスキャン表の各『弱み』に対し、**我々は何で勝ちますか(Why us)?**」→ 差別化ポイントを最大3点、代替手段の弱みと対応づけて挙げる。
|
|
46
|
+
- 「**なぜ今**作るのですか?(市場・組織・技術・コストの変化)」
|
|
47
|
+
|
|
48
|
+
### 成功指標(North Star / KPI / Guardrail)
|
|
49
|
+
|
|
50
|
+
- 「成功を**1つの指標(North Star)**で表すと何ですか?目標値は?」
|
|
51
|
+
- 「補助的に追う **KPI** は何ですか?それは**先行指標**(行動の早期シグナル)ですか、**遅行指標**(成果の確定値)ですか?」
|
|
52
|
+
- 「**悪化させてはいけない指標(Guardrail =失敗の許容ライン)**は?(例: 苦情件数、離脱率)」
|
|
53
|
+
- 「各指標は**どこで・どう計測**しますか?(取得元・自動/手動・頻度)。今すぐ取れない場合、**代理指標**で測れますか?」
|
|
54
|
+
|
|
55
|
+
### クリティカル制約 / 非ゴール
|
|
56
|
+
|
|
57
|
+
- 「守らないと成立しない**制約**は何ですか?(法規制、セキュリティ、予算、期限、既存連携)」
|
|
58
|
+
- 「このプロダクトが**明示的に目指さないこと(非ゴール)**は何ですか?スコープ外はどこですか?」
|
|
59
|
+
|
|
60
|
+
## 手順6: 実装済み機能一覧
|
|
61
|
+
|
|
62
|
+
> existing モードのみ。greenfield モードでは実装済み機能が存在しないため、この手順全体をスキップする。
|
|
21
63
|
|
|
22
64
|
### コード調査のヒントと提案
|
|
23
65
|
|
|
@@ -40,53 +82,61 @@ find . -type f -name "*Controller*" -o -name "*Service*" -o -name "*Component*"
|
|
|
40
82
|
- **説明**(何ができるか)
|
|
41
83
|
- **機能 ID**(FN-XXX 形式、連番)
|
|
42
84
|
|
|
43
|
-
##
|
|
85
|
+
## 詳細な非機能要件について
|
|
44
86
|
|
|
45
|
-
|
|
87
|
+
初期フェーズでは、定量的な非機能要件(応答時間・稼働率・スケーラビリティ等)の詳細ヒアリングは行わない。MVP の作り方を変えるほど重要な制約のみを Product Brief の「クリティカル制約」に記載する(手順5 の「クリティカル制約 / 非ゴール」を参照)。詳細 NFR は設計フェーズ `/a-014-define-infrastructure` で扱う。
|
|
46
88
|
|
|
47
|
-
|
|
48
|
-
- 「現在の実装に『××』が含まれていますが、関連する『△△機能』は将来的に必要ですか?」
|
|
89
|
+
## 深掘りフレーム集(Product Brief / MVP Scope 共通)
|
|
49
90
|
|
|
50
|
-
|
|
91
|
+
表層の要望をそのまま機能化しないための思考技法。Product Brief(a-002)で課題・価値を掘り下げるとき、
|
|
92
|
+
および MVP Scope(`/a-002a-slice-mvp-scope`)で「本当に作るべきか」を判定するときに併用する。
|
|
51
93
|
|
|
52
|
-
|
|
53
|
-
- **機能名**(アイデア段階でも可)
|
|
54
|
-
- **説明**(目的や価値を中心に)
|
|
94
|
+
### 5 Whys(最低3段)
|
|
55
95
|
|
|
56
|
-
|
|
96
|
+
根本課題に到達するため「なぜ?」を最低3段繰り返す。
|
|
57
97
|
|
|
58
|
-
|
|
98
|
+
- 「なぜそれが問題なのですか?」→「ではなぜそれが起きるのですか?」→ さらに「その背景にある原因は?」
|
|
99
|
+
- 表層の要望(解決策)と、その裏の根本課題(問題)を分けて記録する。
|
|
100
|
+
- 止め時: 「それ以上 why を遡っても自社で手を打てない」レベルまで来たら 1 つ上に戻る。
|
|
59
101
|
|
|
60
|
-
###
|
|
102
|
+
### Pre-mortem(事前検死)
|
|
61
103
|
|
|
62
|
-
|
|
63
|
-
- 「API レスポンス時間の目標は?」
|
|
64
|
-
- 「想定される同時接続ユーザー数、データ量は?」
|
|
104
|
+
リリース前に「すでに失敗した」と仮定し、原因を先回りで洗い出す。
|
|
65
105
|
|
|
66
|
-
|
|
106
|
+
- 「1年後、このプロダクトが**失敗に終わった**と想像してください。最も可能性の高い失敗原因は何ですか?」
|
|
107
|
+
- 「Day 1 で誰も使わなかったとしたら、理由は?(価値が伝わらない / 既存手段で足りる / 使うのが面倒 等)」
|
|
108
|
+
- 出てきた失敗要因を、Critical 制約・Core Scenarios の Critical Failure・Guardrail 指標に反映する。
|
|
67
109
|
|
|
68
|
-
|
|
110
|
+
### より安い代替手段 / 競合分析
|
|
69
111
|
|
|
70
|
-
|
|
112
|
+
「そもそも作らない」「もっと安く検証する」判断のため、既存手段と競合を必ず問う。
|
|
71
113
|
|
|
72
|
-
-
|
|
114
|
+
- 「今この課題を**どうしのいでいますか?**(手作業 / 既存ツール / 外部 SaaS / 我慢)。その代替手段の何が不十分ですか?」
|
|
115
|
+
- 「**手作業や既製ツールで MVP の仮説を検証できませんか?**(スプレッドシート / Slack / Zapier など)」
|
|
116
|
+
- 「同じ課題を解く**競合・類似プロダクト**はありますか?それらに対して何で勝ちますか(Why us)?」
|
|
117
|
+
- 代替手段で十分なら、その機能は Must にしない(→ Not Now / Won't)。
|
|
73
118
|
|
|
74
|
-
###
|
|
119
|
+
### Day 1 MVP の切り出し
|
|
75
120
|
|
|
76
|
-
|
|
121
|
+
価値提供が成立する最小の行動に絞り込む。
|
|
77
122
|
|
|
78
|
-
|
|
123
|
+
- 「**価値提供が成立する最小の利用者行動**は何ですか?(1〜3 ステップで言うと?)」
|
|
124
|
+
- 「その体験から**外しても価値が壊れない**要素はどれですか?」
|
|
125
|
+
- 「Day 1 に**必ず通ってほしい成功体験**を1〜3本に絞るとどれですか?」(→ Core Scenarios の Happy Path に対応)
|
|
79
126
|
|
|
80
|
-
|
|
81
|
-
- 「ログ・監視要件、デプロイ頻度は?」
|
|
127
|
+
### 1ヶ月後に検証したい仮説
|
|
82
128
|
|
|
83
|
-
|
|
129
|
+
MVP は仮説検証の手段。検証対象を 1〜3 個に絞る。
|
|
84
130
|
|
|
85
|
-
|
|
131
|
+
- 「このMVPで**検証したい仮説**は何ですか?『〜なら、ユーザーは〜する』の形で 1〜3 個に絞ると?」
|
|
132
|
+
- 「リリース1ヶ月後に**どの指標がどう動けば**『仮説は正しかった』と言えますか?」(→ North Star / KPI に対応)
|
|
133
|
+
- 仮説が 4 個以上に増えたら MVP が大きすぎる兆候。最も検証したい 1 つを選び直す。
|
|
86
134
|
|
|
87
|
-
|
|
135
|
+
### 絶対にやらないこと(Inversion)
|
|
88
136
|
|
|
89
|
-
|
|
137
|
+
「やること」ではなく「やらないこと」から考え、スコープ境界を明示する。
|
|
90
138
|
|
|
91
|
-
-
|
|
92
|
-
-
|
|
139
|
+
- 「このプロダクトが**絶対にやらないこと**は何ですか?(理由付きで)」
|
|
140
|
+
- 「**やると失敗する**ことは何ですか?(過剰な多機能化 / 全ユーザー対応 / 完璧な作り込み 等)」
|
|
141
|
+
- 「ここまではやらない、と**ステークホルダーと合意**できる境界はどこですか?」
|
|
142
|
+
- 結果は Product Brief の「非ゴール」、MVP Scope の Won't / Out of Scope に落とす。
|