spec-runner 1.6.0 → 1.8.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.
Files changed (45) hide show
  1. package/bin/spec-runner-installer.js +7 -85
  2. package/package.json +1 -1
  3. package/spec-runner/templates/.claude/rules/agent-delegation.md +1 -0
  4. package/spec-runner/templates/.claude/rules/design-docs.md +34 -26
  5. package/spec-runner/templates/.claude/skills/architecture-definition/SKILL.md +12 -4
  6. package/spec-runner/templates/.claude/skills/architecture-skill-development/SKILL.md +40 -20
  7. package/spec-runner/templates/.claude/skills/ddd-seed/SKILL.md +11 -12
  8. package/spec-runner/templates/.claude/skills/ddd-seed/templates/01_/350/246/201/344/273/266/345/256/232/347/276/251//343/203/246/343/203/223/343/202/255/343/202/277/343/202/271/350/250/200/350/252/236/350/276/236/346/233/270.md +1 -1
  9. package/spec-runner/templates/.claude/skills/ddd-seed/templates/01_/350/246/201/344/273/266/345/256/232/347/276/251//350/246/201/344/273/266/345/256/232/347/276/251.md +1 -1
  10. package/spec-runner/templates/.claude/skills/ddd-seed/templates/02_/346/246/202/350/246/201/350/250/255/350/250/210//343/203/211/343/203/241/343/202/244/343/203/263/343/203/242/343/203/207/343/203/253.md +1 -1
  11. package/spec-runner/templates/.claude/skills/ddd-seed/templates/02_/346/246/202/350/246/201/350/250/255/350/250/210//343/203/246/343/203/274/343/202/271/343/202/261/343/203/274/343/202/271/344/270/200/350/246/247.md +1 -1
  12. package/spec-runner/templates/.claude/skills/ddd-seed/templates/03_/350/251/263/347/264/260/350/250/255/350/250/210/02_/343/203/246/343/203/274/343/202/271/343/202/261/343/203/274/343/202/271/UC-{/346/227/245/346/234/254/350/252/236/345/220/215}.md +0 -15
  13. package/spec-runner/templates/.claude/skills/design-change/SKILL.md +35 -20
  14. package/spec-runner/templates/.claude/skills/existing-project-to-docs/SKILL.md +45 -24
  15. package/spec-runner/templates/.claude/skills/frontend-seed/SKILL.md +121 -0
  16. package/spec-runner/templates/.claude/skills/frontend-seed/templates/01_/350/246/201/344/273/266/345/256/232/347/276/251//350/246/201/344/273/266/345/256/232/347/276/251.md +35 -0
  17. package/spec-runner/templates/.claude/skills/frontend-seed/templates/02_/346/246/202/350/246/201/350/250/255/350/250/210//343/202/263/343/203/263/343/203/235/343/203/274/343/203/215/343/203/263/343/203/210/344/270/200/350/246/247.md +19 -0
  18. package/spec-runner/templates/.claude/skills/frontend-seed/templates/02_/346/246/202/350/246/201/350/250/255/350/250/210//347/224/273/351/235/242/344/270/200/350/246/247.md +25 -0
  19. package/spec-runner/templates/.claude/skills/frontend-seed/templates/02_/346/246/202/350/246/201/350/250/255/350/250/210//347/224/273/351/235/242/351/201/267/347/247/273/345/233/263.md +23 -0
  20. package/spec-runner/templates/.claude/skills/frontend-seed/templates/03_/350/251/263/347/264/260/350/250/255/350/250/210/01_/347/224/273/351/235/242/{/343/202/253/343/203/206/343/202/264/343/203/252/345/220/215}/{/347/224/273/351/235/242/345/220/215}.md +65 -0
  21. package/spec-runner/templates/.claude/skills/frontend-seed/templates/03_/350/251/263/347/264/260/350/250/255/350/250/210/02_/343/202/263/343/203/263/343/203/235/343/203/274/343/203/215/343/203/263/343/203/210/{/343/202/263/343/203/263/343/203/235/343/203/274/343/203/215/343/203/263/343/203/210/345/220/215}.md +41 -0
  22. package/spec-runner/templates/.claude/skills/frontend-seed/templates/03_/350/251/263/347/264/260/350/250/255/350/250/210/90_ADR/ADR-{/346/227/245/346/234/254/350/252/236/345/220/215}.md +46 -0
  23. package/spec-runner/templates/.claude/skills/simple-seed/SKILL.md +9 -10
  24. package/spec-runner/templates/.claude/skills/simple-seed/templates/02_/346/246/202/350/246/201/350/250/255/350/250/210//343/203/246/343/203/274/343/202/271/343/202/261/343/203/274/343/202/271/344/270/200/350/246/247.md +1 -1
  25. package/spec-runner/templates/.claude/skills/simple-seed/templates/03_/350/251/263/347/264/260/350/250/255/350/250/210/01_/343/203/246/343/203/274/343/202/271/343/202/261/343/203/274/343/202/271/UC-{/346/227/245/346/234/254/350/252/236/345/220/215}.md +0 -15
  26. package/spec-runner/templates/.github/instructions/design-docs.instructions.md +33 -25
  27. package/spec-runner/templates/.github/skills/architecture-definition/SKILL.md +12 -4
  28. package/spec-runner/templates/.github/skills/architecture-skill-development/SKILL.md +40 -20
  29. package/spec-runner/templates/.github/skills/ddd-seed/SKILL.md +11 -12
  30. package/spec-runner/templates/.github/skills/design-change/SKILL.md +35 -20
  31. package/spec-runner/templates/.github/skills/existing-project-to-docs/SKILL.md +45 -24
  32. package/spec-runner/templates/.github/skills/frontend-seed/SKILL.md +121 -0
  33. package/spec-runner/templates/.github/skills/frontend-seed/templates/01_/350/246/201/344/273/266/345/256/232/347/276/251//350/246/201/344/273/266/345/256/232/347/276/251.md +35 -0
  34. package/spec-runner/templates/.github/skills/frontend-seed/templates/02_/346/246/202/350/246/201/350/250/255/350/250/210//343/202/263/343/203/263/343/203/235/343/203/274/343/203/215/343/203/263/343/203/210/344/270/200/350/246/247.md +19 -0
  35. package/spec-runner/templates/.github/skills/frontend-seed/templates/02_/346/246/202/350/246/201/350/250/255/350/250/210//347/224/273/351/235/242/344/270/200/350/246/247.md +25 -0
  36. package/spec-runner/templates/.github/skills/frontend-seed/templates/02_/346/246/202/350/246/201/350/250/255/350/250/210//347/224/273/351/235/242/351/201/267/347/247/273/345/233/263.md +23 -0
  37. package/spec-runner/templates/.github/skills/frontend-seed/templates/03_/350/251/263/347/264/260/350/250/255/350/250/210/01_/347/224/273/351/235/242/{/343/202/253/343/203/206/343/202/264/343/203/252/345/220/215}/{/347/224/273/351/235/242/345/220/215}.md +65 -0
  38. package/spec-runner/templates/.github/skills/frontend-seed/templates/03_/350/251/263/347/264/260/350/250/255/350/250/210/02_/343/202/263/343/203/263/343/203/235/343/203/274/343/203/215/343/203/263/343/203/210/{/343/202/263/343/203/263/343/203/235/343/203/274/343/203/215/343/203/263/343/203/210/345/220/215}.md +41 -0
  39. package/spec-runner/templates/.github/skills/frontend-seed/templates/03_/350/251/263/347/264/260/350/250/255/350/250/210/90_ADR/ADR-{/346/227/245/346/234/254/350/252/236/345/220/215}.md +46 -0
  40. package/spec-runner/templates/.github/skills/simple-seed/SKILL.md +9 -10
  41. package/spec-runner/templates/.spec-runner/references/resources.md +46 -0
  42. package/spec-runner/templates/.claude/skills/design-change/references//345/275/261/351/237/277/347/257/204/345/233/262/343/203/201/343/202/247/343/203/203/343/202/257/343/203/252/343/202/271/343/203/210.md +0 -59
  43. package/spec-runner/templates/.claude/skills/spec-probe/SKILL.md +0 -12
  44. package/spec-runner/templates/.github/skills/design-change/references//345/275/261/351/237/277/347/257/204/345/233/262/343/203/201/343/202/247/343/203/203/343/202/257/343/203/252/343/202/271/343/203/210.md +0 -59
  45. package/spec-runner/templates/.github/skills/spec-probe/SKILL.md +0 -12
@@ -25,15 +25,13 @@ const DEST_GITHUB_DIR = path.join(CWD, ".github");
25
25
 
26
26
  const FORCE = process.env.SPEC_RUNNER_FORCE === "1";
27
27
  const TARGET = (process.env.SPEC_RUNNER_TARGET || "").trim().toLowerCase();
28
- const MODE = (process.env.SPEC_RUNNER_MODE || "").trim().toLowerCase();
29
- const ARCH_STATUS = (process.env.SPEC_RUNNER_ARCH_STATUS || "").trim().toLowerCase();
30
28
 
31
29
  const TEMPLATE_ROOT = path.join(PKG_DIR, "spec-runner", "templates");
32
30
  const CLAUDE_TEMPLATE_DIR = path.join(TEMPLATE_ROOT, ".claude");
33
31
  const COPILOT_TEMPLATE_DIR = path.join(TEMPLATE_ROOT, ".github");
34
32
 
35
33
  function parseArgs(argv) {
36
- const out = { target: "", mode: "", archStatus: "" };
34
+ const out = { target: "" };
37
35
  for (let i = 0; i < argv.length; i += 1) {
38
36
  const a = argv[i];
39
37
  if (a === "--target" && i + 1 < argv.length) {
@@ -45,24 +43,6 @@ function parseArgs(argv) {
45
43
  out.target = a.slice("--target=".length).trim().toLowerCase();
46
44
  continue;
47
45
  }
48
- if (a === "--mode" && i + 1 < argv.length) {
49
- out.mode = String(argv[i + 1] || "").trim().toLowerCase();
50
- i += 1;
51
- continue;
52
- }
53
- if (a.startsWith("--mode=")) {
54
- out.mode = a.slice("--mode=".length).trim().toLowerCase();
55
- continue;
56
- }
57
- if (a === "--arch-status" && i + 1 < argv.length) {
58
- out.archStatus = String(argv[i + 1] || "").trim().toLowerCase();
59
- i += 1;
60
- continue;
61
- }
62
- if (a.startsWith("--arch-status=")) {
63
- out.archStatus = a.slice("--arch-status=".length).trim().toLowerCase();
64
- continue;
65
- }
66
46
  }
67
47
  return out;
68
48
  }
@@ -196,48 +176,6 @@ function promptTargetInteractive() {
196
176
  return "claude";
197
177
  }
198
178
 
199
- function normalizeMode(t) {
200
- if (!t) return "";
201
- const x = String(t).trim().toLowerCase();
202
- if (x === "new" || x === "n") return "new";
203
- if (x === "existing" || x === "exist" || x === "e") return "existing";
204
- return "";
205
- }
206
-
207
- function promptModeInteractive() {
208
- if (!isTTY()) return "new";
209
-
210
- const ans = promptLine(
211
- "\nプロジェクトの状態を選んでください:\n" +
212
- " 1) 新規プロジェクト\n" +
213
- " 2) 既存プロジェクト\n" +
214
- "選択 [1/2] : "
215
- );
216
- if (ans === "2") return "existing";
217
- return "new";
218
- }
219
-
220
- function normalizeArchStatus(t) {
221
- if (!t) return "";
222
- const x = String(t).trim().toLowerCase();
223
- if (x === "undecided" || x === "u") return "undecided";
224
- if (x === "decided" || x === "d") return "decided";
225
- return "";
226
- }
227
-
228
- function promptArchStatusInteractive() {
229
- if (!isTTY()) return "undecided";
230
-
231
- const ans = promptLine(
232
- "\nアーキテクチャの状態を選んでください:\n" +
233
- " 1) 未決定(これから決める)\n" +
234
- " 2) 既に決まっている\n" +
235
- "選択 [1/2] : "
236
- );
237
- if (ans === "2") return "decided";
238
- return "undecided";
239
- }
240
-
241
179
  function archivePathFor(destPath, archiveRoot) {
242
180
  // destPath は CWD の配下を想定
243
181
  const rel = path.relative(CWD, destPath);
@@ -390,21 +328,12 @@ function printBanner() {
390
328
  console.log("");
391
329
  }
392
330
 
393
- function printNextSteps(archStatus) {
331
+ function printNextSteps() {
394
332
  console.log("─────────────────────────────────────────");
395
- if (archStatus === "decided") {
396
- console.log("次のステップ:");
397
- console.log("");
398
- console.log(" 1. .spec-runner/architecture/architecture.yaml を用意してください。");
399
- console.log(" (既に決まっているアーキテクチャを記述)");
400
- console.log("");
401
- console.log(" 2. Claude Code を開いて /architecture-skill-development を実行してください。");
402
- } else {
403
- console.log("次のステップ:");
404
- console.log("");
405
- console.log(" Claude Code を開いて、作りたいものを伝えてください。");
406
- console.log(" セットアップが自動で始まります。");
407
- }
333
+ console.log("次のステップ:");
334
+ console.log("");
335
+ console.log(" Claude Code を開いて、作りたいものを伝えてください。");
336
+ console.log(" セットアップが自動で始まります。");
408
337
  console.log("─────────────────────────────────────────");
409
338
  }
410
339
 
@@ -415,13 +344,6 @@ function main() {
415
344
  let target = normalizeTarget(args.target) || normalizeTarget(TARGET);
416
345
  if (!target) target = promptTargetInteractive();
417
346
 
418
- let mode = normalizeMode(args.mode) || normalizeMode(MODE);
419
- if (!mode) mode = promptModeInteractive();
420
-
421
- let archStatus = normalizeArchStatus(args.archStatus) || normalizeArchStatus(ARCH_STATUS);
422
- if (!archStatus && mode === "new") archStatus = promptArchStatusInteractive();
423
- if (!archStatus) archStatus = "undecided";
424
-
425
347
  const ts = FORCE ? isoTimestampSafe() : null;
426
348
  const archiveRoot = ts ? path.join(CWD, ".spec-runner", "archive", ts) : null;
427
349
 
@@ -466,7 +388,7 @@ function main() {
466
388
  else if (target === "copilot") console.log("完了: .github/ を導入しました。");
467
389
  else console.log("完了: .claude/ と .github/ を導入しました。");
468
390
  console.log("");
469
- printNextSteps(archStatus);
391
+ printNextSteps();
470
392
  }
471
393
 
472
394
  main();
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "spec-runner",
3
- "version": "1.6.0",
3
+ "version": "1.8.0",
4
4
  "description": "docs を正本にした開発運用ハーネスを Claude / Copilot に導入する",
5
5
  "license": "MIT",
6
6
  "bin": {
@@ -14,6 +14,7 @@ description: メインエージェントがサブエージェントへ委任す
14
14
  | コーディング規約チェック | `@review-code` | 実装・修正が完了したとき |
15
15
  | テスト実行+失敗分析 | `@run-tests` | 実装・修正が完了したとき |
16
16
  | 変更の影響範囲調査 | `@analyze-impact` | design-change で影響範囲を洗うとき |
17
+ | エラー・技術的な詰まりの調査 | サブエージェント(WebSearch) | 解決策が不明なとき。`.spec-runner/references/resources.md` に記載された URL を起点に検索する |
17
18
 
18
19
  ## 並行起動
19
20
 
@@ -1,20 +1,10 @@
1
1
  ---
2
- description: 設計書共通ルール(ヘッダー・命名規則・ADR・文書品質)
2
+ description: 設計書共通ルール(ヘッダー・node_id 体系・命名規則・文書品質)
3
3
  paths: ["docs/**"]
4
4
  ---
5
5
 
6
6
  # 設計書共通ルール
7
7
 
8
- ## フェーズ管理
9
-
10
- - ユーザー承認なしにフェーズを進めない
11
- - フェーズは必ず `要件定義 -> 概要設計 -> 詳細設計 -> TDD -> 実装` の順に進める
12
-
13
- ## テンプレート
14
-
15
- - 設計書は必ずテンプレートをコピーして生成する。独自にゼロから作成しない
16
- - 手順: テンプレートを読む → 出力先へコピーする → プレースホルダーを埋める
17
-
18
8
  ## ヘッダー
19
9
 
20
10
  - `docs/**` の全設計書にヘッダーを付ける
@@ -41,6 +31,8 @@ spec_runner:
41
31
 
42
32
  ### node_id 体系
43
33
 
34
+ #### バックエンド
35
+
44
36
  | 対象 | node_id 形式 | 例 |
45
37
  |------|-------------|-----|
46
38
  | 要件定義 | `requirement.{名前}` | `requirement.要件定義` |
@@ -52,26 +44,42 @@ spec_runner:
52
44
  | UC 詳細設計 | `detail.usecase.{UC名}` | `detail.usecase.注文確定` |
53
45
  | DB・外部サービス | `detail.db.{名前}` | `detail.db.スキーマ定義` |
54
46
 
47
+ #### フロントエンド(has_frontend: true のみ)
48
+
49
+ | 対象 | node_id 形式 | 例 |
50
+ |------|-------------|-----|
51
+ | 要件定義 | `frontend.requirement.{名前}` | `frontend.requirement.要件定義` |
52
+ | 画面一覧 | `frontend.overview.画面一覧` | — |
53
+ | 画面遷移図 | `frontend.overview.画面遷移図` | — |
54
+ | コンポーネント一覧 | `frontend.overview.コンポーネント一覧` | — |
55
+ | ADR | `frontend.adr.{slug}` | `frontend.adr.0404-UIフレームワーク選定` |
56
+ | 画面詳細設計 | `frontend.detail.画面.{画面名}` | `frontend.detail.画面.ログイン` |
57
+ | コンポーネント詳細設計 | `frontend.detail.component.{名前}` | `frontend.detail.component.ボタン` |
58
+
55
59
  ## 命名規則
56
60
 
61
+ ### バックエンド
62
+
57
63
  | 対象 | 規則 | 例 |
58
64
  |------|------|-----|
59
- | `docs/01_要件定義` | 日本語 | `要件定義.md`, `ユビキタス言語辞書.md` |
60
- | `docs/02_概要設計` | 日本語 | `ユースケース一覧.md`, `システム全体俯瞰.md` |
61
- | `docs/02_概要設計`(style: ddd のみ) | 日本語 | `ドメインモデル.md` |
62
- | `docs/02_概要設計/90_ADR/{対象}/` | `mmdd-{日本語タイトル}.md` | `0404-注文集約の設計.md` |
65
+ | `docs/バックエンド/01_要件定義` | 日本語 | `要件定義.md`, `ユビキタス言語辞書.md` |
66
+ | `docs/バックエンド/02_概要設計` | 日本語 | `ユースケース一覧.md`, `システム全体俯瞰.md` |
67
+ | `docs/バックエンド/02_概要設計`(style: ddd のみ) | 日本語 | `ドメインモデル.md` |
68
+ | `docs/バックエンド/02_概要設計/90_ADR/{対象}/` | `mmdd-{日本語タイトル}.md` | `0404-注文集約の設計.md` |
63
69
  | `{対象}` の選択肢 | `全体` / `ドメイン` / `UC` / `DB` | — |
64
- | `docs/03_詳細設計/01_ドメイン`(style: ddd のみ) | 日本語 | `注文.md`, `在庫.md` |
65
- | `docs/03_詳細設計/02_ユースケース`(style: ddd) / `01_ユースケース`(style: layered) | `UC-{日本語名}.md` | `UC-注文確定.md` |
66
- | `docs/03_詳細設計/03_DB・外部サービス`(style: ddd) / `02_DB・外部サービス`(style: layered) | 日本語 | `スキーマ定義.dbml`, `外部サービス.md` |
70
+ | `docs/バックエンド/03_詳細設計/01_ドメイン`(style: ddd のみ) | 日本語 | `注文.md`, `在庫.md` |
71
+ | `docs/バックエンド/03_詳細設計/02_ユースケース`(style: ddd) / `01_ユースケース`(style: layered) | `UC-{日本語名}.md` | `UC-注文確定.md` |
72
+ | `docs/バックエンド/03_詳細設計/03_DB・外部サービス`(style: ddd) / `02_DB・外部サービス`(style: layered) | 日本語 | `スキーマ定義.dbml`, `外部サービス.md` |
67
73
 
68
- ## ADR
74
+ ### フロントエンド(has_frontend: true のみ)
69
75
 
70
- - ADR は提案時に必ず 3 案を比較してから採用案を決める。ドキュメントには採用案と採用理由のみ記録する
71
- - ADR は `docs/02_概要設計/90_ADR/{対象}/` で管理する(`全体` / `ドメイン` / `UC` / `DB`)
72
- - ファイル名は `mmdd-{日本語タイトル}.md`。対象はフォルダで表す
73
- - ADR は理由の記録であり、詳細設計の代わりにしない
74
- - 廃止 UC の理由も ADR に記録する(UC ファイル本体は削除)
76
+ | 対象 | 規則 | 例 |
77
+ |------|------|-----|
78
+ | `docs/フロントエンド/01_要件定義` | 日本語 | `要件定義.md` |
79
+ | `docs/フロントエンド/02_概要設計` | 日本語 | `画面一覧.md`, `画面遷移図.md`, `コンポーネント一覧.md` |
80
+ | `docs/フロントエンド/02_概要設計/90_ADR/` | `mmdd-{日本語タイトル}.md` | `0404-UIフレームワーク選定.md` |
81
+ | `docs/フロントエンド/03_詳細設計/01_画面/{カテゴリ名}/` | 日本語 | `ログイン.md`, `ダッシュボード.md` |
82
+ | `docs/フロントエンド/03_詳細設計/02_コンポーネント/` | 日本語 | `ボタン.md`, `モーダル.md` |
75
83
 
76
84
  ## 文書品質
77
85
 
@@ -91,8 +99,8 @@ spec_runner:
91
99
 
92
100
  | 種別 | 内容 | 置き場所 |
93
101
  |------|------|---------|
94
- | ドメインモデル | ビジネスルール・集約・値オブジェクト・不変条件 | `docs/03_詳細設計/01_ドメイン/` |
95
- | データモデル | DBスキーマ・テーブル定義・カラム定義・インデックス | `docs/03_詳細設計/03_DB・外部サービス/` |
102
+ | ドメインモデル | ビジネスルール・集約・値オブジェクト・不変条件 | `docs/バックエンド/03_詳細設計/01_ドメイン/` |
103
+ | データモデル | DBスキーマ・テーブル定義・カラム定義・インデックス | `docs/バックエンド/03_詳細設計/03_DB・外部サービス/` |
96
104
 
97
105
  - `01_ドメイン/` に DB スキーマ・テーブル定義・カラム定義を書かない
98
106
  - `03_DB・外部サービス/` にビジネスルール・ドメインロジックを書かない
@@ -20,10 +20,12 @@ Phase 5: architecture-skill-development へ自動移行
20
20
 
21
21
  テンプレート: `.claude/skills/ddd-seed/templates/01_要件定義/`
22
22
 
23
- 1. 曖昧な前提があれば `spec-probe` スキルで先に整理する
23
+ 1. 背景・提供価値・制約・スコープ外について、曖昧な点があれば一問一答で深掘りする(各質問に推奨回答を添える。コードで確認できることは質問しない)
24
24
  2. ユーザーから背景、提供価値、制約、スコープ外を確認する
25
- 3. テンプレートをコピーして `docs/01_要件定義/要件定義.md` を作る
26
- 4. ドメイン用語が出てきたら `docs/01_要件定義/ユビキタス言語辞書.md` に随時追記する
25
+ 3. テンプレートをコピーして以下を作る
26
+ - `docs/バックエンド/01_要件定義/要件定義.md`
27
+ - `has_frontend: true` の場合は `docs/フロントエンド/01_要件定義/要件定義.md` も作る
28
+ 4. ドメイン用語が出てきたら `docs/バックエンド/01_要件定義/ユビキタス言語辞書.md` に随時追記する
27
29
  5. アーキテクチャスタイルを選択する
28
30
 
29
31
  | スタイル | 選ぶ基準 |
@@ -87,4 +89,10 @@ Phase 4 が承認されたら、ユーザーにコマンドを打たせずに `a
87
89
  1. `architecture-skill-development` に渡す前提(docs・architecture.yaml・確定済みフォルダ構造)を要約する
88
90
  2. project 専用 skill に切り出すべき反復フローを列挙する
89
91
  3. 確認なしに `architecture-skill-development` Phase 1 へ進む
90
- 4. スキル整備完了後、プロジェクト専用スキルを使って概要設計へ進む
92
+ 4. スキル整備完了後、以下のスキルで概要設計へ進む
93
+
94
+ | 条件 | 起動するスキル |
95
+ |------|--------------|
96
+ | `style: ddd` | `ddd-seed`(バックエンド) |
97
+ | `style: layered` | `simple-seed`(バックエンド) |
98
+ | `has_frontend: true` | 上記に加えて `frontend-seed` を並走させる |
@@ -18,7 +18,7 @@ Phase 6: セットアップ専用 skill のアーカイブ提案
18
18
 
19
19
  ## Phase 1: 入力の確認
20
20
 
21
- 1. `docs/01_要件定義/**` を読む
21
+ 1. `docs/バックエンド/01_要件定義/**` を読む。`has_frontend: true` の場合は `docs/フロントエンド/01_要件定義/**` も読む
22
22
  2. `.spec-runner/architecture/architecture.yaml` を読む
23
23
  3. 固定化すべき判断と project 固有判断を切り分ける
24
24
 
@@ -37,18 +37,19 @@ Phase 6: セットアップ専用 skill のアーカイブ提案
37
37
  2. 常時守る約束は rule にする
38
38
  3. 毎回コピーする設計書は template にする
39
39
 
40
- ### seed の選択
40
+ ### プロジェクト専用スキルの作成
41
41
 
42
- `architecture.yaml` の `style` `has_frontend` を読み、使う seed を決める。
42
+ `architecture.yaml` の `style` に応じた seed(`ddd-seed` / `simple-seed`)がインストール済みの場合、どのように専用スキルを作るかをユーザーに確認する。
43
43
 
44
- | style | 使う seed | 説明 |
45
- |-------|----------|------|
46
- | `ddd` | `ddd-seed` | ドメイン層(集約・値オブジェクト)を持つ DDD 向けフロー |
47
- | `layered` | `simple-seed` | ドメイン層を持たない UC・サービス層中心のフロー |
44
+ | 選択肢 | 内容 |
45
+ |--------|------|
46
+ | 新規に作る | `harness-format.md` を基に、このプロジェクトのフローをゼロから記述する |
47
+ | リネームだけ | seed ファイルをプロジェクト専用名に変更する |
48
+ | リネーム+構成変更 | seed をリネームしたうえでフェーズ構成・テンプレートパスをプロジェクトの実態に合わせて書き換える |
48
49
 
49
- `has_frontend: true` の場合、seed から生成するプロジェクト専用スキルに「UC ファイルに画面レイアウトセクションを含める」旨を明記する。
50
+ seed が存在しない場合は「新規に作る」で進める。
50
51
 
51
- 選んだ seed SKILL.md をコピーし、フェーズ構成・テンプレートパス・用語をこのプロジェクトの実態に合わせて書き換えたプロジェクト専用 skill を作る(Phase 1 は完了済みのため削除する。元の seed はアーカイブ候補とする)。
52
+ `has_frontend: true` の場合は、`frontend-seed` バックエンド seed の両方を並走させる旨を専用スキルに明記する。
52
53
 
53
54
  4. ユーザーに確認・承認を得る
54
55
 
@@ -57,12 +58,25 @@ Phase 6: セットアップ専用 skill のアーカイブ提案
57
58
  インストール時に配布された基盤 skill のプレースホルダーを、このプロジェクトの実態に書き換える。
58
59
  以降の書き換えはすべて `architecture.yaml` の `integrations` に従う(`claude` のみなら `.claude/` だけ、`github` のみなら `.github/` だけ、両方なら対で更新する)。
59
60
 
61
+ ### インフラ構成ファイルの整備
62
+
63
+ `architecture.yaml` の `language` / `folder_structure` / `testing_policy` を参照して以下を作成する。
64
+
65
+ 1. **`.gitignore`**: 言語・フレームワーク固有のパターン(依存パッケージ・ビルド成果物・キャッシュ)と、プロジェクト固有の除外パス(`.env`、`docs/` 等)をユーザーと確認して作成する
66
+ 2. **`.dockerignore`**: `.git`・`docs/`・`tests/`・依存パッケージ・ビルド成果物をビルドコンテキストから除外する。ユーザーに追加除外パスを確認する
67
+ 3. **`Dockerfile.test`**: テスト実行専用イメージを作成する
68
+ - ベースイメージをユーザーに確認する(例: `python:3.12-slim`, `node:20-alpine`)
69
+ - テスト依存(テストフレームワーク・カバレッジツール等)をインストールする
70
+ - `has_frontend: true` の場合はフロントエンド用も作成する
71
+
60
72
  ### test-config.md の書き換え
61
73
 
62
74
  `rules/test-config.md`(GitHub Copilot は `instructions/test-config.instructions.md`)はテスト実行コマンドの単一ソースとして `test-driven-development` スキルと `run-tests` エージェントの両方から参照される。`architecture.yaml` の `testing_policy` を参照して書き換える。
63
75
 
64
- 1. **テスト実行コマンド**: `<your-unit-test-command>` / `<your-integration-test-command>` 等を実際のコマンドに書き換える
65
- 2. **テスト構成**: `tests/` のディレクトリ構成が実態と異なる場合は書き換える
76
+ 1. **Docker Compose サービス名の確認**: バックエンド・フロントエンドそれぞれのサービス名をユーザーに確認する(例: `backend`, `frontend`)
77
+ 2. **LocalStack の確認**: AWS サービスを使うか確認する。使う場合は対象サービス(S3, SQS, DynamoDB 等)と LocalStack のサービス名をユーザーに確認する
78
+ 3. **テスト実行コマンド**: `docker compose run --rm <service> <test-command>` の形式で各コマンドを書き換える
79
+ 4. **テスト構成**: `tests/` のディレクトリ構成が実態と異なる場合は書き換える
66
80
 
67
81
  ### test-driven-development の書き換え
68
82
 
@@ -71,13 +85,6 @@ Phase 6: セットアップ専用 skill のアーカイブ提案
71
85
  1. **fixture / テストデータ**: このプロジェクトの実際のクラス名・DB 接続方法・ヘルパ関数パターンを記述する
72
86
  2. **モックのルール**: 使用する外部サービスとモック手段(ライブラリ名など)を具体化する
73
87
 
74
- ### 影響範囲チェックリストの書き換え
75
-
76
- `.claude/skills/design-change/references/影響範囲チェックリスト.md` をプロジェクト固有の変更カテゴリとパスに合わせて書き換える。
77
-
78
- 1. 変更カテゴリをプロジェクトの構成要素(モジュール・サービス・ドメインなど)に合わせて追加・削除する
79
- 2. 詳細設計のパスを `architecture.yaml` の `folder_structure` に合わせて書き換える
80
-
81
88
  ### code-style.md の書き換え
82
89
 
83
90
  `architecture.yaml` の `language` と `folder_structure` を参照して、以下を実際の値に置き換える。
@@ -88,6 +95,19 @@ Phase 6: セットアップ専用 skill のアーカイブ提案
88
95
  3. **言語・型固有ルール**: `<your-language-and-type-rules>` を言語・フレームワークに合わせた具体的なルールに書き換える
89
96
  4. **プロジェクト構造**: `<your-project-structure>` を `folder_structure` の実際のディレクトリ構成に書き換える
90
97
 
98
+ ### リファレンス URL の登録
99
+
100
+ `.spec-runner/references/resources.md` に、このプロジェクトで使う公式ドキュメントの URL を登録する。
101
+
102
+ 1. ユーザーに以下を確認する:
103
+ - 言語・フレームワーク・ツールの公式ドキュメント URL
104
+ - 参考にしているサンプルリポジトリ・リファレンス実装
105
+ - API 仕様(OpenAPI など)
106
+ - 社内 Wiki・Notion などの内部ドキュメント
107
+ - その他ベストプラクティス記事・移行ガイドなど
108
+ 2. 教えてもらった情報を名前・カテゴリとともに `.spec-runner/references/resources.md` の該当テーブルに書き込む
109
+ 3. ユーザーが追加を終えたら次へ進む
110
+
91
111
  ### その他の基盤 skill
92
112
 
93
113
  同様のプレースホルダーや汎用記述が他の skill にあれば、同じ要領で書き換える。
@@ -109,8 +129,8 @@ Phase 6: セットアップ専用 skill のアーカイブ提案
109
129
  |---|---|
110
130
  | `architecture-definition` | 新規プロジェクト初期化専用。アーキテクチャ確定後は不要 |
111
131
  | `existing-project-to-docs` | 既存プロジェクト取り込み専用。docs 生成後は不要 |
112
- | `ddd-seed` | style: ddd で seed 使用後は不要。ただし `architecture-definition` も同時アーカイブする場合のみ `templates/01_要件定義/` を削除可 |
113
- | `simple-seed` | style: layered seed 使用後は不要 |
132
+ | `ddd-seed` / `simple-seed` | プロジェクト専用スキル作成後は不要 |
133
+ | `frontend-seed` | `has_frontend: true` かつプロジェクト専用スキル作成後は不要 |
114
134
  | `architecture-skill-development`(このファイル自身) | project 専用 skill が安定したら不要。アーキテクチャ大変更時は再利用可 |
115
135
 
116
136
  ### 手順
@@ -1,6 +1,6 @@
1
1
  ---
2
2
  name: ddd-seed
3
- description: UC/DDD 駆動の docs 正本開発フローの種。新規プロジェクトの初期テンプレートとして使い、architecture-skill-development でプロジェクト専用スキルに育てる。
3
+ description: UC/DDD 駆動の docs 正本開発フローの種(バックエンド担当)。新規プロジェクトの初期テンプレートとして使い、architecture-skill-development でプロジェクト専用スキルに育てる。
4
4
  ---
5
5
 
6
6
  # ddd-seed
@@ -12,7 +12,7 @@ description: UC/DDD 駆動の docs 正本開発フローの種。新規プロジ
12
12
  | キー | 用途 |
13
13
  |------|------|
14
14
  | `style` | このスキル(`ddd`)が適切かを確認 |
15
- | `has_frontend` | `true` なら UC ファイルに「画面レイアウト」セクションを含める |
15
+ | `has_frontend` | `true` なら `frontend-seed` が並走していることを確認 |
16
16
  | `folder_structure` | `maps_to` パスの基準として参照する |
17
17
 
18
18
  設計フェーズで新たな方針・コンポーネントが確定したら、都度 architecture.yaml を最新状態に保つ。
@@ -30,6 +30,7 @@ Phase 5: TDD → 実装
30
30
  ## 前提ルール
31
31
 
32
32
  - docs は正本とし、各ドキュメントに `spec_runner`ヘッダーを付ける
33
+ - バックエンドの設計はすべて `docs/バックエンド/` 配下に置く
33
34
  - 詳細設計は `01_ドメイン/` `02_ユースケース/` `03_DB・外部サービス/` の 3 層で構成する
34
35
  - ドメインを先に設計し、UC はドメインを参照する形で書く。ドメインの中に UC は入れない
35
36
  - `maps_to` は必ず設定する。パス推定に頼らない
@@ -38,20 +39,20 @@ Phase 5: TDD → 実装
38
39
 
39
40
  ## Phase 1: 要件定義
40
41
 
41
- `architecture-definition` で完了済み。`docs/01_要件定義/` が存在することを確認して次へ進む。
42
+ `architecture-definition` で完了済み。`docs/バックエンド/01_要件定義/` が存在することを確認して次へ進む。
42
43
 
43
44
  ## Phase 2: 概要設計
44
45
 
45
46
  ### 2-1. ユースケース一覧
46
47
 
47
48
  1. 要件定義からユースケースを洗い出す(Query / Command を意識)
48
- 2. `docs/02_概要設計/ユースケース一覧.md` を作る
49
+ 2. `docs/バックエンド/02_概要設計/ユースケース一覧.md` を作る
49
50
  3. ユーザーに確認・承認を得る
50
51
 
51
52
  ### 2-2. ドメインモデル + システム全体俯瞰
52
53
 
53
- 1. UC から集約・境界コンテキストを整理し `docs/02_概要設計/ドメインモデル.md` を作る
54
- 2. コンポーネント全体図・外部 IF を整理し `docs/02_概要設計/システム全体俯瞰.md` を作る
54
+ 1. UC から集約・境界コンテキストを整理し `docs/バックエンド/02_概要設計/ドメインモデル.md` を作る
55
+ 2. コンポーネント全体図・外部 IF を整理し `docs/バックエンド/02_概要設計/システム全体俯瞰.md` を作る
55
56
  3. ユーザーに確認・承認を得る
56
57
 
57
58
  ### 出力
@@ -59,7 +60,7 @@ Phase 5: TDD → 実装
59
60
  テンプレート: `templates/02_概要設計/ユースケース一覧.md` / `templates/02_概要設計/ドメインモデル.md` / `templates/02_概要設計/システム全体俯瞰.md`
60
61
 
61
62
  ```
62
- docs/02_概要設計/
63
+ docs/バックエンド/02_概要設計/
63
64
  ユースケース一覧.md
64
65
  ドメインモデル.md
65
66
  システム全体俯瞰.md
@@ -94,7 +95,7 @@ docs/02_概要設計/
94
95
  テンプレート: `templates/03_詳細設計/01_ドメイン/{ドメイン名}.md`
95
96
 
96
97
  ```
97
- docs/03_詳細設計/01_ドメイン/
98
+ docs/バックエンド/03_詳細設計/01_ドメイン/
98
99
  {ドメイン名}.md
99
100
  ```
100
101
 
@@ -104,17 +105,15 @@ docs/03_詳細設計/01_ドメイン/
104
105
 
105
106
  テンプレート: `templates/03_詳細設計/02_ユースケース/UC-{日本語名}.md`
106
107
 
107
- > `has_frontend: true` の場合は各 UC ファイルに「画面レイアウト」セクションを含める。`false` なら削除する。
108
-
109
108
  ```
110
- docs/03_詳細設計/02_ユースケース/
109
+ docs/バックエンド/03_詳細設計/02_ユースケース/
111
110
  UC-{日本語名}.md
112
111
  ```
113
112
 
114
113
  ### 4-3. DB・外部サービス(必要時のみ)
115
114
 
116
115
  ```
117
- docs/03_詳細設計/03_DB・外部サービス/
116
+ docs/バックエンド/03_詳細設計/03_DB・外部サービス/
118
117
  スキーマ定義.dbml
119
118
  外部サービス.md
120
119
  ```
@@ -5,7 +5,7 @@ spec_runner:
5
5
  depends_on:
6
6
  - requirement.要件定義
7
7
  maps_to:
8
- - docs/03_詳細設計/01_ドメイン/
8
+ - docs/バックエンド/03_詳細設計/01_ドメイン/
9
9
  ---
10
10
 
11
11
  # ユビキタス言語辞書
@@ -4,7 +4,7 @@ spec_runner:
4
4
  kind: requirement
5
5
  depends_on: []
6
6
  maps_to:
7
- - docs/02_概要設計/
7
+ - docs/バックエンド/02_概要設計/
8
8
  ---
9
9
 
10
10
  # 要件定義
@@ -5,7 +5,7 @@ spec_runner:
5
5
  depends_on:
6
6
  - overview.use_case_list
7
7
  maps_to:
8
- - docs/03_詳細設計/01_ドメイン/
8
+ - docs/バックエンド/03_詳細設計/01_ドメイン/
9
9
  ---
10
10
 
11
11
  # ドメインモデル
@@ -5,7 +5,7 @@ spec_runner:
5
5
  depends_on:
6
6
  - requirement.要件定義
7
7
  maps_to:
8
- - docs/03_詳細設計/02_ユースケース/
8
+ - docs/バックエンド/03_詳細設計/02_ユースケース/
9
9
  ---
10
10
 
11
11
  # ユースケース一覧
@@ -48,21 +48,6 @@ sequenceDiagram
48
48
  |------------|---------|------|
49
49
  | {エラーケース} | {発生条件} | {対応} |
50
50
 
51
- ## 画面レイアウト
52
-
53
- > `has_frontend: true` のときのみ記載する。不要なら削除する。
54
-
55
- - 画面名: {画面名}
56
- - 遷移元: {前の画面 or -}
57
- - 遷移先: {次の画面 or -}
58
-
59
- ```
60
- {画面レイアウト概要 — ASCII art / Markdown テーブルで表現}
61
- ```
62
-
63
- - 主要 UI 要素:
64
- - {入力フォーム・ボタン・一覧表示など}
65
-
66
51
  ## テスト観点
67
52
 
68
53
  - {正常系の観点}