spec-runner 1.5.0 → 1.7.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 (22) 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/skills/architecture-definition/SKILL.md +10 -2
  5. package/spec-runner/templates/.claude/skills/architecture-skill-development/SKILL.md +25 -10
  6. package/spec-runner/templates/.claude/skills/ddd-seed/SKILL.md +15 -0
  7. 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 +10 -0
  8. 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 +15 -0
  9. package/spec-runner/templates/.claude/skills/design-change/SKILL.md +12 -0
  10. package/spec-runner/templates/.claude/skills/simple-seed/SKILL.md +15 -0
  11. 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 +10 -0
  12. 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 +15 -0
  13. package/spec-runner/templates/.github/skills/architecture-definition/SKILL.md +10 -2
  14. package/spec-runner/templates/.github/skills/architecture-skill-development/SKILL.md +25 -10
  15. package/spec-runner/templates/.github/skills/ddd-seed/SKILL.md +15 -0
  16. package/spec-runner/templates/.github/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 +10 -0
  17. package/spec-runner/templates/.github/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 +15 -0
  18. package/spec-runner/templates/.github/skills/design-change/SKILL.md +12 -0
  19. package/spec-runner/templates/.github/skills/simple-seed/SKILL.md +15 -0
  20. package/spec-runner/templates/.github/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 +10 -0
  21. package/spec-runner/templates/.github/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 +15 -0
  22. package/spec-runner/templates/.spec-runner/references/resources.md +46 -0
@@ -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.5.0",
3
+ "version": "1.7.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
 
@@ -31,7 +31,14 @@ Phase 5: architecture-skill-development へ自動移行
31
31
  | `ddd` | 複雑なビジネスドメインがある。集約・境界コンテキストで設計する必要がある |
32
32
  | `layered` | CRUD 中心またはビジネスロジックがシンプル。UC・サービス層で設計すれば十分 |
33
33
 
34
- 6. 使用する AI 連携を確認する
34
+ 6. フロントエンドの有無を確認する
35
+
36
+ | 値 | 基準 |
37
+ |----|------|
38
+ | `true` | Web UI・モバイル画面がある |
39
+ | `false` | API・バックエンドのみ |
40
+
41
+ 7. 使用する AI 連携を確認する
35
42
 
36
43
  | 連携 | フォルダ |
37
44
  |------|---------|
@@ -39,7 +46,7 @@ Phase 5: architecture-skill-development へ自動移行
39
46
  | `github` | `.github/`(GitHub Copilot) |
40
47
  | 両方 | `.claude/` と `.github/` |
41
48
 
42
- 7. ユーザーに確認・承認を得る
49
+ 8. ユーザーに確認・承認を得る
43
50
 
44
51
  ## Phase 2: フォルダ構造の決定
45
52
 
@@ -65,6 +72,7 @@ Phase 5: architecture-skill-development へ自動移行
65
72
  2. 最低限、以下を構造化する
66
73
  - **integrations**: Phase 1 で確認した連携(`[claude]` / `[github]` / `[claude, github]`)
67
74
  - **style**: Phase 1 で選択したスタイル(`ddd` / `layered`)
75
+ - **has_frontend**: Phase 1 で確認したフロントエンドの有無(`true` / `false`)
68
76
  - **folder_structure**: Phase 2 で決定した構造(`src/` / `tests/` / `docs/` など)
69
77
  - domain_structure(style: ddd のときのみ)
70
78
  - runtime_units
@@ -37,16 +37,19 @@ Phase 6: セットアップ専用 skill のアーカイブ提案
37
37
  2. 常時守る約束は rule にする
38
38
  3. 毎回コピーする設計書は template にする
39
39
 
40
- ### seed の選択
40
+ ### プロジェクト専用スキルの作成
41
41
 
42
- `architecture.yaml` の `style` を読み、使う 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
- 選んだ seed の SKILL.md をコピーし、フェーズ構成・テンプレートパス・用語をこのプロジェクトの実態に合わせて書き換えたプロジェクト専用 skill を作る(Phase 1 は完了済みのため削除する。元の seed はアーカイブ候補とする)。
50
+ seed が存在しない場合は「新規に作る」で進める。
51
+
52
+ `has_frontend: true` の場合は、UC ファイルに画面レイアウトセクションを含める旨を専用スキルに明記する。
50
53
 
51
54
  4. ユーザーに確認・承認を得る
52
55
 
@@ -86,6 +89,19 @@ Phase 6: セットアップ専用 skill のアーカイブ提案
86
89
  3. **言語・型固有ルール**: `<your-language-and-type-rules>` を言語・フレームワークに合わせた具体的なルールに書き換える
87
90
  4. **プロジェクト構造**: `<your-project-structure>` を `folder_structure` の実際のディレクトリ構成に書き換える
88
91
 
92
+ ### リファレンス URL の登録
93
+
94
+ `.spec-runner/references/resources.md` に、このプロジェクトで使う公式ドキュメントの URL を登録する。
95
+
96
+ 1. ユーザーに以下を確認する:
97
+ - 言語・フレームワーク・ツールの公式ドキュメント URL
98
+ - 参考にしているサンプルリポジトリ・リファレンス実装
99
+ - API 仕様(OpenAPI など)
100
+ - 社内 Wiki・Notion などの内部ドキュメント
101
+ - その他ベストプラクティス記事・移行ガイドなど
102
+ 2. 教えてもらった情報を名前・カテゴリとともに `.spec-runner/references/resources.md` の該当テーブルに書き込む
103
+ 3. ユーザーが追加を終えたら次へ進む
104
+
89
105
  ### その他の基盤 skill
90
106
 
91
107
  同様のプレースホルダーや汎用記述が他の skill にあれば、同じ要領で書き換える。
@@ -107,8 +123,7 @@ Phase 6: セットアップ専用 skill のアーカイブ提案
107
123
  |---|---|
108
124
  | `architecture-definition` | 新規プロジェクト初期化専用。アーキテクチャ確定後は不要 |
109
125
  | `existing-project-to-docs` | 既存プロジェクト取り込み専用。docs 生成後は不要 |
110
- | `ddd-seed` | style: ddd で seed 使用後は不要。ただし `architecture-definition` も同時アーカイブする場合のみ `templates/01_要件定義/` を削除可 |
111
- | `simple-seed` | style: layered で seed 使用後は不要 |
126
+ | `ddd-seed` / `simple-seed` | プロジェクト専用スキル作成後は不要 |
112
127
  | `architecture-skill-development`(このファイル自身) | project 専用 skill が安定したら不要。アーキテクチャ大変更時は再利用可 |
113
128
 
114
129
  ### 手順
@@ -118,7 +133,7 @@ Phase 6: セットアップ専用 skill のアーカイブ提案
118
133
  3. 必要であれば削除前にバックアップ先をユーザーに伝える
119
134
  4. `.spec-runner/` の不要ファイルも整理する
120
135
  - `intake/current-system-inventory.md` — docs に昇格済みなら削除してよい
121
- - `architecture/architecture.yaml` — project 専用 skill が完成し、参照不要になったら削除してよい
136
+ - `architecture/architecture.yaml` — **削除しない**。設計変更のたびに最新状態を保つ。プロジェクトの全体像を把握するための正本として使い続ける
122
137
  - `scripts/scan.js` — **削除しない**。`@analyze-impact` が常時依存しているため
123
138
  5. `CLAUDE.md` を更新する
124
139
  - 「初回自動起動」セクション(spec-runner インストール時に生成されたもの)を削除する
@@ -5,6 +5,18 @@ description: UC/DDD 駆動の docs 正本開発フローの種。新規プロジ
5
5
 
6
6
  # ddd-seed
7
7
 
8
+ ## 前提: architecture.yaml の読み込み
9
+
10
+ 開始前に `.spec-runner/architecture/architecture.yaml` を読み、以下を確認する:
11
+
12
+ | キー | 用途 |
13
+ |------|------|
14
+ | `style` | このスキル(`ddd`)が適切かを確認 |
15
+ | `has_frontend` | `true` なら UC ファイルに「画面レイアウト」セクションを含める |
16
+ | `folder_structure` | `maps_to` パスの基準として参照する |
17
+
18
+ 設計フェーズで新たな方針・コンポーネントが確定したら、都度 architecture.yaml を最新状態に保つ。
19
+
8
20
  ## 全体フロー
9
21
 
10
22
  ```
@@ -21,6 +33,7 @@ Phase 5: TDD → 実装
21
33
  - 詳細設計は `01_ドメイン/` `02_ユースケース/` `03_DB・外部サービス/` の 3 層で構成する
22
34
  - ドメインを先に設計し、UC はドメインを参照する形で書く。ドメインの中に UC は入れない
23
35
  - `maps_to` は必ず設定する。パス推定に頼らない
36
+ - 実装ファイルのパスは UC ドキュメント本文に書かない。`maps_to` ヘッダーで管理する
24
37
  - ユーザー承認なしに次フェーズへ進めない
25
38
 
26
39
  ## Phase 1: 要件定義
@@ -91,6 +104,8 @@ docs/03_詳細設計/01_ドメイン/
91
104
 
92
105
  テンプレート: `templates/03_詳細設計/02_ユースケース/UC-{日本語名}.md`
93
106
 
107
+ > `has_frontend: true` の場合は各 UC ファイルに「画面レイアウト」セクションを含める。`false` なら削除する。
108
+
94
109
  ```
95
110
  docs/03_詳細設計/02_ユースケース/
96
111
  UC-{日本語名}.md
@@ -10,6 +10,16 @@ spec_runner:
10
10
 
11
11
  # ユースケース一覧
12
12
 
13
+ <!-- カテゴリは機能領域や画面単位で分ける。例: 認証、ユーザー管理、商品管理 など -->
14
+
15
+ ## {カテゴリ名}
16
+
17
+ | UC ID | UC名 | 種別 | 概要 |
18
+ |-------|------|------|------|
19
+ | UC-{番号} | {UC名} | Command / Query | {概要} |
20
+
21
+ ## {カテゴリ名}
22
+
13
23
  | UC ID | UC名 | 種別 | 概要 |
14
24
  |-------|------|------|------|
15
25
  | UC-{番号} | {UC名} | Command / Query | {概要} |
@@ -48,6 +48,21 @@ 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
+
51
66
  ## テスト観点
52
67
 
53
68
  - {正常系の観点}
@@ -10,6 +10,18 @@ description: 既存機能の変更を docs 正本で進めるフローガイド
10
10
  影響範囲のチェックリストは `references/影響範囲チェックリスト.md` を参照する。
11
11
  ADR テンプレートは `templates/90_ADR/ADRテンプレート.md` を使用する。
12
12
 
13
+ ## 前提: architecture.yaml の読み込み
14
+
15
+ 開始前に `.spec-runner/architecture/architecture.yaml` を読み、以下を確認する:
16
+
17
+ | キー | 用途 |
18
+ |------|------|
19
+ | `style` | Phase 4/5 のフォルダパス・設計順序を決定 |
20
+ | `has_frontend` | UC 修正時に「画面レイアウト」セクションの要否を判断 |
21
+ | `folder_structure` | 影響ドキュメントのパス確認に使用 |
22
+
23
+ 設計変更によって方針・構成に変化があった場合は、architecture.yaml も合わせて更新する。
24
+
13
25
  ## 全体フロー
14
26
 
15
27
  ```
@@ -5,6 +5,18 @@ description: レイヤードアーキテクチャ / CRUD 中心のプロジェ
5
5
 
6
6
  # simple-seed
7
7
 
8
+ ## 前提: architecture.yaml の読み込み
9
+
10
+ 開始前に `.spec-runner/architecture/architecture.yaml` を読み、以下を確認する:
11
+
12
+ | キー | 用途 |
13
+ |------|------|
14
+ | `style` | このスキル(`layered`)が適切かを確認 |
15
+ | `has_frontend` | `true` なら UC ファイルに「画面レイアウト」セクションを含める |
16
+ | `folder_structure` | `maps_to` パスの基準として参照する |
17
+
18
+ 設計フェーズで新たな方針・コンポーネントが確定したら、都度 architecture.yaml を最新状態に保つ。
19
+
8
20
  ## 全体フロー
9
21
 
10
22
  ```
@@ -20,6 +32,7 @@ Phase 5: TDD → 実装
20
32
  - docs は正本とし、各ドキュメントに `spec_runner`ヘッダーを付ける
21
33
  - 詳細設計は `01_ユースケース/` `02_DB・外部サービス/` の 2 層で構成する
22
34
  - `maps_to` は必ず設定する。パス推定に頼らない
35
+ - 実装ファイルのパスは UC ドキュメント本文に書かない。`maps_to` ヘッダーで管理する
23
36
  - ユーザー承認なしに次フェーズへ進めない
24
37
 
25
38
  ## Phase 1: 要件定義
@@ -69,6 +82,8 @@ UC → DB・外部サービス の順に設計する。
69
82
 
70
83
  テンプレート: `templates/03_詳細設計/01_ユースケース/UC-{日本語名}.md`
71
84
 
85
+ > `has_frontend: true` の場合は各 UC ファイルに「画面レイアウト」セクションを含める。`false` なら削除する。
86
+
72
87
  ```
73
88
  docs/03_詳細設計/01_ユースケース/
74
89
  UC-{日本語名}.md
@@ -10,6 +10,16 @@ spec_runner:
10
10
 
11
11
  # ユースケース一覧
12
12
 
13
+ <!-- カテゴリは機能領域や画面単位で分ける。例: 認証、ユーザー管理、商品管理 など -->
14
+
15
+ ## {カテゴリ名}
16
+
17
+ | UC ID | UC名 | 種別 | 概要 |
18
+ |-------|------|------|------|
19
+ | UC-{番号} | {UC名} | Command / Query | {概要} |
20
+
21
+ ## {カテゴリ名}
22
+
13
23
  | UC ID | UC名 | 種別 | 概要 |
14
24
  |-------|------|------|------|
15
25
  | UC-{番号} | {UC名} | Command / Query | {概要} |
@@ -46,6 +46,21 @@ sequenceDiagram
46
46
  |------------|---------|------|
47
47
  | {エラーケース} | {発生条件} | {対応} |
48
48
 
49
+ ## 画面レイアウト
50
+
51
+ > `has_frontend: true` のときのみ記載する。不要なら削除する。
52
+
53
+ - 画面名: {画面名}
54
+ - 遷移元: {前の画面 or -}
55
+ - 遷移先: {次の画面 or -}
56
+
57
+ ```
58
+ {画面レイアウト概要 — ASCII art / Markdown テーブルで表現}
59
+ ```
60
+
61
+ - 主要 UI 要素:
62
+ - {入力フォーム・ボタン・一覧表示など}
63
+
49
64
  ## テスト観点
50
65
 
51
66
  - {正常系の観点}
@@ -31,7 +31,14 @@ Phase 5: architecture-skill-development へ自動移行
31
31
  | `ddd` | 複雑なビジネスドメインがある。集約・境界コンテキストで設計する必要がある |
32
32
  | `layered` | CRUD 中心またはビジネスロジックがシンプル。UC・サービス層で設計すれば十分 |
33
33
 
34
- 6. 使用する AI 連携を確認する
34
+ 6. フロントエンドの有無を確認する
35
+
36
+ | 値 | 基準 |
37
+ |----|------|
38
+ | `true` | Web UI・モバイル画面がある |
39
+ | `false` | API・バックエンドのみ |
40
+
41
+ 7. 使用する AI 連携を確認する
35
42
 
36
43
  | 連携 | フォルダ |
37
44
  |------|---------|
@@ -39,7 +46,7 @@ Phase 5: architecture-skill-development へ自動移行
39
46
  | `github` | `.github/`(GitHub Copilot) |
40
47
  | 両方 | `.claude/` と `.github/` |
41
48
 
42
- 7. ユーザーに確認・承認を得る
49
+ 8. ユーザーに確認・承認を得る
43
50
 
44
51
  ## Phase 2: フォルダ構造の決定
45
52
 
@@ -65,6 +72,7 @@ Phase 5: architecture-skill-development へ自動移行
65
72
  2. 最低限、以下を構造化する
66
73
  - **integrations**: Phase 1 で確認した連携(`[claude]` / `[github]` / `[claude, github]`)
67
74
  - **style**: Phase 1 で選択したスタイル(`ddd` / `layered`)
75
+ - **has_frontend**: Phase 1 で確認したフロントエンドの有無(`true` / `false`)
68
76
  - **folder_structure**: Phase 2 で決定した構造(`src/` / `tests/` / `docs/` など)
69
77
  - domain_structure(style: ddd のときのみ)
70
78
  - runtime_units
@@ -37,16 +37,19 @@ Phase 6: セットアップ専用 skill のアーカイブ提案
37
37
  2. 常時守る約束は rule にする
38
38
  3. 毎回コピーする設計書は template にする
39
39
 
40
- ### seed の選択
40
+ ### プロジェクト専用スキルの作成
41
41
 
42
- `architecture.yaml` の `style` を読み、使う 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
- 選んだ seed の SKILL.md をコピーし、フェーズ構成・テンプレートパス・用語をこのプロジェクトの実態に合わせて書き換えたプロジェクト専用 skill を作る(Phase 1 は完了済みのため削除する。元の seed はアーカイブ候補とする)。
50
+ seed が存在しない場合は「新規に作る」で進める。
51
+
52
+ `has_frontend: true` の場合は、UC ファイルに画面レイアウトセクションを含める旨を専用スキルに明記する。
50
53
 
51
54
  4. ユーザーに確認・承認を得る
52
55
 
@@ -86,6 +89,19 @@ Phase 6: セットアップ専用 skill のアーカイブ提案
86
89
  3. **言語・型固有ルール**: `<your-language-and-type-rules>` を言語・フレームワークに合わせた具体的なルールに書き換える
87
90
  4. **プロジェクト構造**: `<your-project-structure>` を `folder_structure` の実際のディレクトリ構成に書き換える
88
91
 
92
+ ### リファレンス URL の登録
93
+
94
+ `.spec-runner/references/resources.md` に、このプロジェクトで使う公式ドキュメントの URL を登録する。
95
+
96
+ 1. ユーザーに以下を確認する:
97
+ - 言語・フレームワーク・ツールの公式ドキュメント URL
98
+ - 参考にしているサンプルリポジトリ・リファレンス実装
99
+ - API 仕様(OpenAPI など)
100
+ - 社内 Wiki・Notion などの内部ドキュメント
101
+ - その他ベストプラクティス記事・移行ガイドなど
102
+ 2. 教えてもらった情報を名前・カテゴリとともに `.spec-runner/references/resources.md` の該当テーブルに書き込む
103
+ 3. ユーザーが追加を終えたら次へ進む
104
+
89
105
  ### その他の基盤 skill
90
106
 
91
107
  同様のプレースホルダーや汎用記述が他の skill にあれば、同じ要領で書き換える。
@@ -107,8 +123,7 @@ Phase 6: セットアップ専用 skill のアーカイブ提案
107
123
  |---|---|
108
124
  | `architecture-definition` | 新規プロジェクト初期化専用。アーキテクチャ確定後は不要 |
109
125
  | `existing-project-to-docs` | 既存プロジェクト取り込み専用。docs 生成後は不要 |
110
- | `ddd-seed` | style: ddd で seed 使用後は不要。ただし `architecture-definition` も同時アーカイブする場合のみ `templates/01_要件定義/` を削除可 |
111
- | `simple-seed` | style: layered で seed 使用後は不要 |
126
+ | `ddd-seed` / `simple-seed` | プロジェクト専用スキル作成後は不要 |
112
127
  | `architecture-skill-development`(このファイル自身) | project 専用 skill が安定したら不要。アーキテクチャ大変更時は再利用可 |
113
128
 
114
129
  ### 手順
@@ -118,7 +133,7 @@ Phase 6: セットアップ専用 skill のアーカイブ提案
118
133
  3. 必要であれば削除前にバックアップ先をユーザーに伝える
119
134
  4. `.spec-runner/` の不要ファイルも整理する
120
135
  - `intake/current-system-inventory.md` — docs に昇格済みなら削除してよい
121
- - `architecture/architecture.yaml` — project 専用 skill が完成し、参照不要になったら削除してよい
136
+ - `architecture/architecture.yaml` — **削除しない**。設計変更のたびに最新状態を保つ。プロジェクトの全体像を把握するための正本として使い続ける
122
137
  - `scripts/scan.js` — **削除しない**。`@analyze-impact` が常時依存しているため
123
138
  5. `CLAUDE.md` を更新する
124
139
  - 「初回自動起動」セクション(spec-runner インストール時に生成されたもの)を削除する
@@ -5,6 +5,18 @@ description: UC/DDD 駆動の docs 正本開発フローの種。新規プロジ
5
5
 
6
6
  # ddd-seed
7
7
 
8
+ ## 前提: architecture.yaml の読み込み
9
+
10
+ 開始前に `.spec-runner/architecture/architecture.yaml` を読み、以下を確認する:
11
+
12
+ | キー | 用途 |
13
+ |------|------|
14
+ | `style` | このスキル(`ddd`)が適切かを確認 |
15
+ | `has_frontend` | `true` なら UC ファイルに「画面レイアウト」セクションを含める |
16
+ | `folder_structure` | `maps_to` パスの基準として参照する |
17
+
18
+ 設計フェーズで新たな方針・コンポーネントが確定したら、都度 architecture.yaml を最新状態に保つ。
19
+
8
20
  ## 全体フロー
9
21
 
10
22
  ```
@@ -21,6 +33,7 @@ Phase 5: TDD → 実装
21
33
  - 詳細設計は `01_ドメイン/` `02_ユースケース/` `03_DB・外部サービス/` の 3 層で構成する
22
34
  - ドメインを先に設計し、UC はドメインを参照する形で書く。ドメインの中に UC は入れない
23
35
  - `maps_to` は必ず設定する。パス推定に頼らない
36
+ - 実装ファイルのパスは UC ドキュメント本文に書かない。`maps_to` ヘッダーで管理する
24
37
  - ユーザー承認なしに次フェーズへ進めない
25
38
 
26
39
  ## Phase 1: 要件定義
@@ -91,6 +104,8 @@ docs/03_詳細設計/01_ドメイン/
91
104
 
92
105
  テンプレート: `templates/03_詳細設計/02_ユースケース/UC-{日本語名}.md`
93
106
 
107
+ > `has_frontend: true` の場合は各 UC ファイルに「画面レイアウト」セクションを含める。`false` なら削除する。
108
+
94
109
  ```
95
110
  docs/03_詳細設計/02_ユースケース/
96
111
  UC-{日本語名}.md
@@ -10,6 +10,16 @@ spec_runner:
10
10
 
11
11
  # ユースケース一覧
12
12
 
13
+ <!-- カテゴリは機能領域や画面単位で分ける。例: 認証、ユーザー管理、商品管理 など -->
14
+
15
+ ## {カテゴリ名}
16
+
17
+ | UC ID | UC名 | 種別 | 概要 |
18
+ |-------|------|------|------|
19
+ | UC-{番号} | {UC名} | Command / Query | {概要} |
20
+
21
+ ## {カテゴリ名}
22
+
13
23
  | UC ID | UC名 | 種別 | 概要 |
14
24
  |-------|------|------|------|
15
25
  | UC-{番号} | {UC名} | Command / Query | {概要} |
@@ -48,6 +48,21 @@ 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
+
51
66
  ## テスト観点
52
67
 
53
68
  - {正常系の観点}
@@ -10,6 +10,18 @@ description: 既存機能の変更を docs 正本で進めるフローガイド
10
10
  影響範囲のチェックリストは `references/影響範囲チェックリスト.md` を参照する。
11
11
  ADR テンプレートは `templates/90_ADR/ADRテンプレート.md` を使用する。
12
12
 
13
+ ## 前提: architecture.yaml の読み込み
14
+
15
+ 開始前に `.spec-runner/architecture/architecture.yaml` を読み、以下を確認する:
16
+
17
+ | キー | 用途 |
18
+ |------|------|
19
+ | `style` | Phase 4/5 のフォルダパス・設計順序を決定 |
20
+ | `has_frontend` | UC 修正時に「画面レイアウト」セクションの要否を判断 |
21
+ | `folder_structure` | 影響ドキュメントのパス確認に使用 |
22
+
23
+ 設計変更によって方針・構成に変化があった場合は、architecture.yaml も合わせて更新する。
24
+
13
25
  ## 全体フロー
14
26
 
15
27
  ```
@@ -5,6 +5,18 @@ description: レイヤードアーキテクチャ / CRUD 中心のプロジェ
5
5
 
6
6
  # simple-seed
7
7
 
8
+ ## 前提: architecture.yaml の読み込み
9
+
10
+ 開始前に `.spec-runner/architecture/architecture.yaml` を読み、以下を確認する:
11
+
12
+ | キー | 用途 |
13
+ |------|------|
14
+ | `style` | このスキル(`layered`)が適切かを確認 |
15
+ | `has_frontend` | `true` なら UC ファイルに「画面レイアウト」セクションを含める |
16
+ | `folder_structure` | `maps_to` パスの基準として参照する |
17
+
18
+ 設計フェーズで新たな方針・コンポーネントが確定したら、都度 architecture.yaml を最新状態に保つ。
19
+
8
20
  ## 全体フロー
9
21
 
10
22
  ```
@@ -20,6 +32,7 @@ Phase 5: TDD → 実装
20
32
  - docs は正本とし、各ドキュメントに `spec_runner`ヘッダーを付ける
21
33
  - 詳細設計は `01_ユースケース/` `02_DB・外部サービス/` の 2 層で構成する
22
34
  - `maps_to` は必ず設定する。パス推定に頼らない
35
+ - 実装ファイルのパスは UC ドキュメント本文に書かない。`maps_to` ヘッダーで管理する
23
36
  - ユーザー承認なしに次フェーズへ進めない
24
37
 
25
38
  ## Phase 1: 要件定義
@@ -69,6 +82,8 @@ UC → DB・外部サービス の順に設計する。
69
82
 
70
83
  テンプレート: `templates/03_詳細設計/01_ユースケース/UC-{日本語名}.md`
71
84
 
85
+ > `has_frontend: true` の場合は各 UC ファイルに「画面レイアウト」セクションを含める。`false` なら削除する。
86
+
72
87
  ```
73
88
  docs/03_詳細設計/01_ユースケース/
74
89
  UC-{日本語名}.md
@@ -10,6 +10,16 @@ spec_runner:
10
10
 
11
11
  # ユースケース一覧
12
12
 
13
+ <!-- カテゴリは機能領域や画面単位で分ける。例: 認証、ユーザー管理、商品管理 など -->
14
+
15
+ ## {カテゴリ名}
16
+
17
+ | UC ID | UC名 | 種別 | 概要 |
18
+ |-------|------|------|------|
19
+ | UC-{番号} | {UC名} | Command / Query | {概要} |
20
+
21
+ ## {カテゴリ名}
22
+
13
23
  | UC ID | UC名 | 種別 | 概要 |
14
24
  |-------|------|------|------|
15
25
  | UC-{番号} | {UC名} | Command / Query | {概要} |
@@ -46,6 +46,21 @@ sequenceDiagram
46
46
  |------------|---------|------|
47
47
  | {エラーケース} | {発生条件} | {対応} |
48
48
 
49
+ ## 画面レイアウト
50
+
51
+ > `has_frontend: true` のときのみ記載する。不要なら削除する。
52
+
53
+ - 画面名: {画面名}
54
+ - 遷移元: {前の画面 or -}
55
+ - 遷移先: {次の画面 or -}
56
+
57
+ ```
58
+ {画面レイアウト概要 — ASCII art / Markdown テーブルで表現}
59
+ ```
60
+
61
+ - 主要 UI 要素:
62
+ - {入力フォーム・ボタン・一覧表示など}
63
+
49
64
  ## テスト観点
50
65
 
51
66
  - {正常系の観点}
@@ -0,0 +1,46 @@
1
+ # Resources
2
+
3
+ エラーや調査が必要なときにサブエージェントが参照する外部リソース一覧。
4
+ `architecture-skill-development` 実行時に登録する。
5
+
6
+ ## 言語・ランタイム
7
+
8
+ | 名前 | URL |
9
+ |------|-----|
10
+ | {言語名} | {公式ドキュメントURL} |
11
+
12
+ ## フレームワーク・ライブラリ
13
+
14
+ | 名前 | URL |
15
+ |------|-----|
16
+ | {フレームワーク名} | {公式ドキュメントURL} |
17
+
18
+ ## インフラ・ツール
19
+
20
+ | 名前 | URL |
21
+ |------|-----|
22
+ | {ツール名} | {公式ドキュメントURL} |
23
+
24
+ ## サンプル・リファレンス実装
25
+
26
+ | 名前 | URL |
27
+ |------|-----|
28
+ | {リポジトリ名} | {URL} |
29
+
30
+ ## API 仕様
31
+
32
+ | 名前 | URL |
33
+ |------|-----|
34
+ | {API名} | {URL} |
35
+
36
+ ## 社内ドキュメント・Wiki
37
+
38
+ | 名前 | URL |
39
+ |------|-----|
40
+ | {ドキュメント名} | {URL} |
41
+
42
+ ## その他(移行ガイド・ベストプラクティス記事など)
43
+
44
+ | 名前 | URL |
45
+ |------|-----|
46
+ | {タイトル} | {URL} |