spec-runner 1.0.1 → 1.0.3
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/README.md +64 -24
- package/bin/spec-runner.js +27 -6
- package/package.json +1 -1
- package/templates/base/.github/PULL_REQUEST_TEMPLATE.md +11 -11
- package/templates/base/.github/workflows/phase-gate-check.yml +22 -22
- package/templates/base/scripts/spec-runner.sh +117 -66
- package/templates/base/templates/03_/350/251/263/347/264/260/350/250/255/350/250/210//343/202/244/343/203/263/343/203/225/343/203/251.md +14 -0
- package/templates/base/templates/03_/350/251/263/347/264/260/350/250/255/350/250/210//343/203/206/343/203/274/343/203/226/343/203/253.md +17 -0
- package/templates/base/templates/03_/350/251/263/347/264/260/350/250/255/350/250/210//343/203/211/343/203/241/343/202/244/343/203/263.md +18 -0
- package/templates/base/templates/03_/350/251/263/347/264/260/350/250/255/350/250/210//343/203/246/343/203/274/343/202/271/343/202/261/343/203/274/343/202/271.md +12 -0
- package/templates/base/{docs/adr/TEMPLATE.md → templates/99_/350/250/255/350/250/210/345/210/244/346/226/255/350/250/230/351/214/262//343/201/262/343/201/252/345/275/242.md} +1 -1
- package/templates/base/templates/README.md +32 -0
- package/templates/base/templates//345/210/235/346/234/237/343/203/211/343/202/255/343/203/245/343/203/241/343/203/263/343/203/210/01_/346/206/262/347/253/240.md +48 -0
- package/templates/base/templates//345/210/235/346/234/237/343/203/211/343/202/255/343/203/245/343/203/241/343/203/263/343/203/210/02_/344/273/225/346/247/230.md +39 -0
- package/templates/base/{docs/glossary.md → templates//345/210/235/346/234/237/343/203/211/343/202/255/343/203/245/343/203/241/343/203/263/343/203/210/03_/347/224/250/350/252/236/351/233/206.md} +1 -1
- package/templates/base/templates//345/210/235/346/234/237/343/203/211/343/202/255/343/203/245/343/203/241/343/203/263/343/203/210/99_/350/250/255/350/250/210/345/210/244/346/226/255/350/250/230/351/214/262/.gitkeep +0 -0
- package/templates/base/templates//345/210/235/346/234/237/343/203/211/343/202/255/343/203/245/343/203/241/343/203/263/343/203/210//343/203/206/343/203/263/343/203/227/343/203/254/343/203/274/343/203/210/344/270/200/350/246/247.md +14 -0
- package/templates/claude/.claude/commands/{sr-set-gate.md → sr-/343/202/262/343/203/274/343/203/210/350/250/255/345/256/232.md} +2 -2
- package/templates/{cursor/.cursor/commands/sr-test-design.md → claude/.claude/commands/sr-/343/203/206/343/202/271/343/203/210/350/250/255/350/250/210.md} +1 -1
- package/templates/claude/.claude/commands/{sr-review.md → sr-/343/203/254/343/203/223/343/203/245/343/203/274.md} +3 -3
- package/templates/claude/.claude/commands/sr-/344/273/225/346/247/230.md +9 -0
- package/templates/claude/.claude/commands/{sr-fix.md → sr-/344/277/256/346/255/243.md} +2 -2
- package/templates/claude/.claude/commands/{sr-init.md → sr-/345/210/235/346/234/237/345/214/226.md} +3 -3
- package/templates/claude/.claude/commands/{sr-complete.md → sr-/345/256/214/344/272/206.md} +1 -1
- package/templates/{cursor/.cursor/commands/sr-implement.md → claude/.claude/commands/sr-/345/256/237/350/243/205.md} +1 -1
- package/templates/claude/.claude/commands/sr-/346/206/262/347/253/240.md +9 -0
- package/templates/claude/.claude/commands/{sr-design-high.md → sr-/346/246/202/350/246/201/350/250/255/350/250/210.md} +1 -1
- package/templates/{cursor/.cursor/commands/sr-status.md → claude/.claude/commands/sr-/347/212/266/346/205/213.md} +1 -1
- package/templates/claude/.claude/commands/{sr-hotfix.md → sr-/347/267/212/346/200/245/344/277/256/346/255/243.md} +2 -2
- package/templates/{cursor/.cursor/commands/sr-configure.md → claude/.claude/commands/sr-/350/250/255/345/256/232.md} +2 -2
- package/templates/claude/.claude/commands/{sr-design-detail.md → sr-/350/251/263/347/264/260/350/250/255/350/250/210.md} +2 -2
- package/templates/claude/.claude/hooks/pre-tool-use.sh +1 -1
- package/templates/claude/CLAUDE.md +22 -22
- package/templates/copilot/.github/copilot-instructions.md +1 -1
- package/templates/copilot/.github/prompts/{sr-set-gate.prompt.md → sr-/343/202/262/343/203/274/343/203/210/350/250/255/345/256/232.prompt.md} +1 -1
- package/templates/copilot/.github/prompts/{sr-test-design.prompt.md → sr-/343/203/206/343/202/271/343/203/210/350/250/255/350/250/210.prompt.md} +1 -1
- package/templates/copilot/.github/prompts/{sr-review.prompt.md → sr-/343/203/254/343/203/223/343/203/245/343/203/274.prompt.md} +2 -2
- package/templates/copilot/.github/prompts/sr-/344/273/225/346/247/230.prompt.md +13 -0
- package/templates/copilot/.github/prompts/{sr-fix.prompt.md → sr-/344/277/256/346/255/243.prompt.md} +1 -1
- package/templates/copilot/.github/prompts/{sr-init.prompt.md → sr-/345/210/235/346/234/237/345/214/226.prompt.md} +3 -3
- package/templates/copilot/.github/prompts/{sr-complete.prompt.md → sr-/345/256/214/344/272/206.prompt.md} +1 -1
- package/templates/copilot/.github/prompts/{sr-implement.prompt.md → sr-/345/256/237/350/243/205.prompt.md} +1 -1
- package/templates/copilot/.github/prompts/sr-/346/206/262/347/253/240.prompt.md +13 -0
- package/templates/copilot/.github/prompts/{sr-design-high.prompt.md → sr-/346/246/202/350/246/201/350/250/255/350/250/210.prompt.md} +1 -1
- package/templates/copilot/.github/prompts/{sr-status.prompt.md → sr-/347/212/266/346/205/213.prompt.md} +1 -1
- package/templates/copilot/.github/prompts/{sr-hotfix.prompt.md → sr-/347/267/212/346/200/245/344/277/256/346/255/243.prompt.md} +1 -1
- package/templates/copilot/.github/prompts/{sr-configure.prompt.md → sr-/350/250/255/345/256/232.prompt.md} +1 -1
- package/templates/copilot/.github/prompts/{sr-design-detail.prompt.md → sr-/350/251/263/347/264/260/350/250/255/350/250/210.prompt.md} +1 -1
- package/templates/cursor/.cursor/commands/sr-/343/202/262/343/203/274/343/203/210/350/250/255/345/256/232.md +9 -0
- package/templates/{claude/.claude/commands/sr-test-design.md → cursor/.cursor/commands/sr-/343/203/206/343/202/271/343/203/210/350/250/255/350/250/210.md} +1 -1
- package/templates/cursor/.cursor/commands/sr-/343/203/254/343/203/223/343/203/245/343/203/274.md +9 -0
- package/templates/cursor/.cursor/commands/sr-/344/273/225/346/247/230.md +9 -0
- package/templates/cursor/.cursor/commands/{sr-fix.md → sr-/344/277/256/346/255/243.md} +2 -2
- package/templates/cursor/.cursor/commands/{sr-init.md → sr-/345/210/235/346/234/237/345/214/226.md} +3 -3
- package/templates/cursor/.cursor/commands/{sr-complete.md → sr-/345/256/214/344/272/206.md} +1 -1
- package/templates/{claude/.claude/commands/sr-implement.md → cursor/.cursor/commands/sr-/345/256/237/350/243/205.md} +1 -1
- package/templates/cursor/.cursor/commands/sr-/346/206/262/347/253/240.md +9 -0
- package/templates/cursor/.cursor/commands/{sr-design-high.md → sr-/346/246/202/350/246/201/350/250/255/350/250/210.md} +1 -1
- package/templates/{claude/.claude/commands/sr-status.md → cursor/.cursor/commands/sr-/347/212/266/346/205/213.md} +1 -1
- package/templates/cursor/.cursor/commands/{sr-hotfix.md → sr-/347/267/212/346/200/245/344/277/256/346/255/243.md} +2 -2
- package/templates/{claude/.claude/commands/sr-configure.md → cursor/.cursor/commands/sr-/350/250/255/345/256/232.md} +2 -2
- package/templates/cursor/.cursor/commands/{sr-design-detail.md → sr-/350/251/263/347/264/260/350/250/255/350/250/210.md} +2 -2
- package/templates/cursor/.cursor/commands/sr-review.md +0 -9
- package/templates/cursor/.cursor/commands/sr-set-gate.md +0 -9
- /package/templates/base/templates/{requirement/template.md → 01_/350/246/201/344/273/266/345/256/232/347/276/251//343/201/262/343/201/252/345/275/242.md"} +0 -0
- /package/templates/base/{docs/review/debt.md → templates//345/210/235/346/234/237/343/203/211/343/202/255/343/203/245/343/203/241/343/203/263/343/203/210//346/214/257/343/202/212/350/277/224/343/202/212//350/262/240/345/202/265.md"} +0 -0
package/README.md
CHANGED
|
@@ -32,6 +32,14 @@ npx spec-runner
|
|
|
32
32
|
対話では**どの開発環境か**だけ聞かれる(AI ツール・CI・ドキュメント言語)。
|
|
33
33
|
ここまでで、`.spec-runner/config.sh`(既定値)と `scripts/`・`docs/`・`.github/` などができる。
|
|
34
34
|
|
|
35
|
+
### 3.5 プロジェクトの土台を書く(推奨・init の前)
|
|
36
|
+
|
|
37
|
+
- **`docs/01_憲章.md`** … プロジェクト憲章(不変原則・品質ルール・フォルダ構成の考え方)。技術に依存しない。
|
|
38
|
+
- **`docs/02_仕様.md`** … 何を作るか・なぜか・スコープ・想定ユーザー。
|
|
39
|
+
|
|
40
|
+
チャットで `/sr-憲章` または `/sr-仕様` と入力すると編集を案内できる。
|
|
41
|
+
([Spec Kit](https://github.com/tessl-labs/spec-kit) の constitution / specify に相当。)
|
|
42
|
+
|
|
35
43
|
### 4. init で詳細設定と最初のユースケースを開始する
|
|
36
44
|
|
|
37
45
|
```bash
|
|
@@ -46,7 +54,7 @@ npx spec-runner
|
|
|
46
54
|
- Domain が import してはいけないパターン(正規表現)
|
|
47
55
|
- DDD を使うか / TDD を必須にするか / CI / ドキュメントの言語
|
|
48
56
|
|
|
49
|
-
設定後、`docs/
|
|
57
|
+
設定後、`docs/01_要件/会員登録.md` ができ、ブランチ `feature/uc-会員登録` が作られる。
|
|
50
58
|
|
|
51
59
|
- 引数なしで `./scripts/spec-runner.sh init` だけ実行すると、**設定対話のみ**(ユースケースは作らない)。
|
|
52
60
|
- すでに設定済みの場合は対話をスキップし、そのままユースケース作成に進む。
|
|
@@ -55,28 +63,28 @@ npx spec-runner
|
|
|
55
63
|
|
|
56
64
|
```
|
|
57
65
|
① 要件定義
|
|
58
|
-
docs/
|
|
66
|
+
docs/01_要件/会員登録.md を書く
|
|
59
67
|
|
|
60
68
|
② 要件レビュー通過
|
|
61
|
-
./scripts/spec-runner.sh review-pass docs/
|
|
69
|
+
./scripts/spec-runner.sh review-pass docs/01_要件/会員登録.md
|
|
62
70
|
./scripts/spec-runner.sh set-gate glossary_checked
|
|
63
71
|
|
|
64
72
|
③ 概要設計
|
|
65
73
|
./scripts/spec-runner.sh design-high
|
|
66
|
-
docs/
|
|
74
|
+
docs/02_概要設計/会員登録.md を書く → review-pass
|
|
67
75
|
|
|
68
76
|
④ 詳細設計(この順)
|
|
69
|
-
./scripts/spec-runner.sh design-detail domain →
|
|
70
|
-
./scripts/spec-runner.sh design-detail usecase →
|
|
71
|
-
./scripts/spec-runner.sh design-detail table →
|
|
72
|
-
./scripts/spec-runner.sh design-detail infra →
|
|
77
|
+
./scripts/spec-runner.sh design-detail domain → ドメイン.md を書く → review-pass
|
|
78
|
+
./scripts/spec-runner.sh design-detail usecase → ユースケース.md を書く → review-pass
|
|
79
|
+
./scripts/spec-runner.sh design-detail table → テーブル.md を書く → review-pass
|
|
80
|
+
./scripts/spec-runner.sh design-detail infra → インフラ.md を書く → review-pass
|
|
73
81
|
|
|
74
82
|
⑤ テスト設計
|
|
75
83
|
./scripts/spec-runner.sh test-design
|
|
76
|
-
docs/
|
|
84
|
+
docs/04_テスト設計/会員登録.md を書く
|
|
77
85
|
テストコードを先に書く(Red)→ コミット
|
|
78
86
|
./scripts/spec-runner.sh set-gate test_code_committed
|
|
79
|
-
./scripts/spec-runner.sh review-pass docs/
|
|
87
|
+
./scripts/spec-runner.sh review-pass docs/04_テスト設計/会員登録.md
|
|
80
88
|
|
|
81
89
|
⑥ 実装
|
|
82
90
|
./scripts/spec-runner.sh implement
|
|
@@ -120,6 +128,22 @@ curl -sSL https://raw.githubusercontent.com/spec-runner/spec-runner/main/install
|
|
|
120
128
|
|
|
121
129
|
---
|
|
122
130
|
|
|
131
|
+
## Spec Kit との対応
|
|
132
|
+
|
|
133
|
+
[Spec Kit](https://github.com/tessl-labs/spec-kit) 風の「憲章 → 仕様 → 計画 → 実装」を取り入れている。
|
|
134
|
+
|
|
135
|
+
| Spec Kit | spec-runner での対応 |
|
|
136
|
+
|----------|----------------------|
|
|
137
|
+
| ① constitution(憲章) | `docs/01_憲章.md`。不変原則・品質ルール。`/sr-憲章` |
|
|
138
|
+
| ② specify(仕様) | `docs/02_仕様.md`(プロジェクト全体)+ `docs/01_要件/<UC>.md`(機能単位)。`/sr-仕様` |
|
|
139
|
+
| ③ clarify(曖昧さ解消) | 各フェーズのレビュー・`docs/03_用語集.md` での用語統一 |
|
|
140
|
+
| ④ plan(技術計画) | `design-high` → `design-detail`(domain / usecase / table / infra) |
|
|
141
|
+
| ⑤ analyze(整合性) | `review-pass` と CI の phase-gate-check |
|
|
142
|
+
| ⑥ tasks(タスク分割) | テスト設計・実装フェーズでのタスク単位の進め方 |
|
|
143
|
+
| ⑦ implement | `implement` → `complete` |
|
|
144
|
+
|
|
145
|
+
---
|
|
146
|
+
|
|
123
147
|
## 設定
|
|
124
148
|
|
|
125
149
|
`.spec-runner/config.sh` でパスやコマンドを変えられる。CI とゲートはこの設定を参照する。
|
|
@@ -140,9 +164,23 @@ curl -sSL https://raw.githubusercontent.com/spec-runner/spec-runner/main/install
|
|
|
140
164
|
├── .github/
|
|
141
165
|
│ ├── workflows/phase-gate-check.yml
|
|
142
166
|
│ └── PULL_REQUEST_TEMPLATE.md
|
|
143
|
-
├── docs/ #
|
|
167
|
+
├── docs/ # 付番済み(01_〜04_、99_)要件・概要・詳細設計・テスト設計・設計判断記録
|
|
144
168
|
├── scripts/spec-runner.sh
|
|
145
|
-
└── templates/
|
|
169
|
+
└── templates/ # すべてのテンプレート(DDD用語・付番は日本語)
|
|
170
|
+
├── 01_要件定義/ひな形.md # init で docs/01_要件/<UC>.md を生成
|
|
171
|
+
├── 03_詳細設計/ # design-detail で docs/03_詳細設計/<UC>/*.md を生成
|
|
172
|
+
│ ├── ドメイン.md
|
|
173
|
+
│ ├── ユースケース.md
|
|
174
|
+
│ ├── テーブル.md
|
|
175
|
+
│ └── インフラ.md
|
|
176
|
+
├── 99_設計判断記録/ひな形.md # ADR ひな形(docs/99_設計判断記録/ にもコピー)
|
|
177
|
+
└── 初期ドキュメント/ # deploy 時に docs/ に展開
|
|
178
|
+
├── 01_憲章.md
|
|
179
|
+
├── 02_仕様.md
|
|
180
|
+
├── 03_用語集.md
|
|
181
|
+
├── テンプレート一覧.md
|
|
182
|
+
├── 振り返り/負債.md
|
|
183
|
+
└── 99_設計判断記録/.gitkeep
|
|
146
184
|
```
|
|
147
185
|
|
|
148
186
|
選択した AI ツールに応じて `.claude/` や `.cursorrules` や `.github/copilot-instructions.md` などが追加される。
|
|
@@ -161,21 +199,23 @@ npx spec-runner --update
|
|
|
161
199
|
|
|
162
200
|
## スラッシュコマンド
|
|
163
201
|
|
|
164
|
-
**`/sr
|
|
202
|
+
**`/sr-状態` を実行すると、現在のフェーズと「次にやるべきこと」(次に打つコマンド)が動的に表示される。** フェーズ移行(概要設計〜実装完了)はこの案内に従えばよい。
|
|
165
203
|
|
|
166
204
|
| コマンド | 説明 |
|
|
167
205
|
|----------|------|
|
|
168
|
-
| `/sr
|
|
169
|
-
| `/sr
|
|
170
|
-
| `/sr
|
|
171
|
-
| `/sr
|
|
172
|
-
| `/sr
|
|
173
|
-
| `/sr
|
|
174
|
-
| `/sr
|
|
175
|
-
|
|
176
|
-
|
|
177
|
-
|
|
178
|
-
|
|
206
|
+
| `/sr-設定` | 詳細設定の対話のみ |
|
|
207
|
+
| `/sr-憲章` | プロジェクト憲章(`docs/01_憲章.md`)を編集(init 前推奨) |
|
|
208
|
+
| `/sr-仕様` | プロジェクト仕様(`docs/02_仕様.md`)を編集(init 前推奨) |
|
|
209
|
+
| `/sr-初期化` [ユースケース名] [集約名] | ユースケース開始(未設定時は対話から) |
|
|
210
|
+
| `/sr-状態` | フェーズ・ゲート+**次にやるべきこと**を表示 |
|
|
211
|
+
| `/sr-レビュー` ファイル | レビュー通過 |
|
|
212
|
+
| `/sr-ゲート設定` ゲート名 | ゲート手動通過 |
|
|
213
|
+
| `/sr-修正` 内容 | 修正 |
|
|
214
|
+
| `/sr-緊急修正` 内容 | 緊急修正 |
|
|
215
|
+
|
|
216
|
+
概要設計・詳細設計・テスト設計・実装・完了は、`/sr-状態` の案内に表示されるので個別に指定不要。
|
|
217
|
+
|
|
218
|
+
定義: Claude `.claude/commands/` / Cursor `.cursor/commands/` / Copilot `.github/prompts/*.prompt.md`(いずれもファイル名・コマンド名は日本語)
|
|
179
219
|
|
|
180
220
|
---
|
|
181
221
|
|
package/bin/spec-runner.js
CHANGED
|
@@ -31,6 +31,8 @@ try {
|
|
|
31
31
|
|
|
32
32
|
// ── 定数 ──────────────────────────────────────────────────────────────────────
|
|
33
33
|
const PKG_DIR = path.resolve(__dirname, '..');
|
|
34
|
+
const PKG_JSON = (() => { try { return require(path.join(PKG_DIR, 'package.json')); } catch { return {}; } })();
|
|
35
|
+
const VERSION = PKG_JSON.version || '?.?.?';
|
|
34
36
|
const CWD = process.cwd();
|
|
35
37
|
const CONFIG_DIR = path.join(CWD, '.spec-runner');
|
|
36
38
|
const CONFIG_SH = path.join(CONFIG_DIR, 'config.sh');
|
|
@@ -152,7 +154,8 @@ const DEFAULT_STRUCTURE = {
|
|
|
152
154
|
async function main() {
|
|
153
155
|
log('');
|
|
154
156
|
log(chalk.bold('╔════════════════════════════════════════╗'));
|
|
155
|
-
|
|
157
|
+
const verPad = Math.max(0, 17 - String(VERSION).length);
|
|
158
|
+
log(chalk.bold(`║ spec-runner v${VERSION}${' '.repeat(verPad)}║`));
|
|
156
159
|
log(chalk.bold('║ AI-driven DDD Phase Gate System ║'));
|
|
157
160
|
log(chalk.bold('╚════════════════════════════════════════╝'));
|
|
158
161
|
log('');
|
|
@@ -276,8 +279,14 @@ async function main() {
|
|
|
276
279
|
log(chalk.bold.green('✅ spec-runner のセットアップが完了しました!'));
|
|
277
280
|
log('');
|
|
278
281
|
log(chalk.bold('次のステップ:'));
|
|
282
|
+
log(' • まずプロジェクトの土台を書く(init の前に行う):');
|
|
283
|
+
log(chalk.cyan(' docs/01_憲章.md … 不変原則・品質ルール(プロジェクト憲章)'));
|
|
284
|
+
log(chalk.cyan(' docs/02_仕様.md … 何を作るか・なぜか・スコープ(仕様)'));
|
|
285
|
+
log(' チャットで /sr-憲章 または /sr-仕様 と入力すると編集を案内できます。');
|
|
286
|
+
log('');
|
|
279
287
|
log(' • パス・TDD 等の設定と最初のユースケース開始:');
|
|
280
288
|
log(chalk.cyan(' ./scripts/spec-runner.sh init "ユースケース名" "集約名"'));
|
|
289
|
+
log(' またはチャットで: ' + chalk.cyan('/sr-初期化 ユースケース名 集約名'));
|
|
281
290
|
log('');
|
|
282
291
|
log(' init を実行すると対話で Domain/UseCase のパスやテスト設定を聞かれます。');
|
|
283
292
|
log(' 引数なしで init だけ実行すると設定対話のみ行えます。');
|
|
@@ -361,10 +370,22 @@ async function deployFiles(answers) {
|
|
|
361
370
|
log('');
|
|
362
371
|
log(chalk.bold('展開するファイル:'));
|
|
363
372
|
|
|
364
|
-
// 1. 共通(base): scripts,
|
|
373
|
+
// 1. 共通(base): scripts, templates(生成用+初期ドキュメント), .github
|
|
365
374
|
copyPathFrom(baseDir, 'scripts');
|
|
366
|
-
copyPathFrom(baseDir, 'docs');
|
|
367
375
|
copyPathFrom(baseDir, 'templates');
|
|
376
|
+
// templates/初期ドキュメント/ の中身を docs/ に展開(憲章・仕様・用語集等)
|
|
377
|
+
const docsInitialSrc = path.join(CWD, 'templates', '初期ドキュメント');
|
|
378
|
+
const docsDest = path.join(CWD, 'docs');
|
|
379
|
+
if (fs.existsSync(docsInitialSrc)) {
|
|
380
|
+
copyDir(docsInitialSrc, docsDest, vars);
|
|
381
|
+
}
|
|
382
|
+
// 生成用テンプレートのうち設計判断記録ひな形は docs/99_設計判断記録/ にも置く(新規 ADR 作成時のコピー元)
|
|
383
|
+
const adrTemplateSrc = path.join(CWD, 'templates', '99_設計判断記録', 'ひな形.md');
|
|
384
|
+
const adrTemplateDest = path.join(CWD, 'docs', '99_設計判断記録', 'ひな形.md');
|
|
385
|
+
if (fs.existsSync(adrTemplateSrc)) {
|
|
386
|
+
fs.mkdirSync(path.dirname(adrTemplateDest), { recursive: true });
|
|
387
|
+
if (!isDryRun) fs.copyFileSync(adrTemplateSrc, adrTemplateDest);
|
|
388
|
+
}
|
|
368
389
|
copyPathFrom(baseDir, '.github/workflows');
|
|
369
390
|
copyPathFrom(baseDir, '.github/PULL_REQUEST_TEMPLATE.md');
|
|
370
391
|
|
|
@@ -685,10 +706,10 @@ async function runUpdate() {
|
|
|
685
706
|
DATE: new Date().toISOString().slice(0, 10),
|
|
686
707
|
};
|
|
687
708
|
|
|
688
|
-
//
|
|
689
|
-
const requirementTemplateDest = path.join(CWD, 'templates', '
|
|
709
|
+
// 要件定義テンプレートが無ければ追加(init で必須のため)
|
|
710
|
+
const requirementTemplateDest = path.join(CWD, 'templates', '01_要件定義', 'ひな形.md');
|
|
690
711
|
if (!fs.existsSync(requirementTemplateDest)) {
|
|
691
|
-
const requirementTemplateSrc = path.join(templatesDir, 'base', 'templates', '
|
|
712
|
+
const requirementTemplateSrc = path.join(templatesDir, 'base', 'templates', '01_要件定義', 'ひな形.md');
|
|
692
713
|
if (fs.existsSync(requirementTemplateSrc)) {
|
|
693
714
|
copyFile(requirementTemplateSrc, requirementTemplateDest, vars);
|
|
694
715
|
}
|
package/package.json
CHANGED
|
@@ -16,21 +16,21 @@
|
|
|
16
16
|
|
|
17
17
|
| ドキュメント | 更新済み | パス |
|
|
18
18
|
|------------|---------|------|
|
|
19
|
-
| ドメインモデル設計 | [ ] | docs/
|
|
20
|
-
| ユースケース設計 | [ ] | docs/
|
|
21
|
-
| テーブル設計 | [ ] | docs/
|
|
22
|
-
| インフラ設計 | [ ] | docs/
|
|
23
|
-
| テスト設計 | [ ] | docs/
|
|
24
|
-
|
|
|
25
|
-
| ADR | [ ] / N/A | docs/
|
|
19
|
+
| ドメインモデル設計 | [ ] | docs/03_詳細設計/*/ドメイン.md |
|
|
20
|
+
| ユースケース設計 | [ ] | docs/03_詳細設計/*/ユースケース.md |
|
|
21
|
+
| テーブル設計 | [ ] | docs/03_詳細設計/*/テーブル.md |
|
|
22
|
+
| インフラ設計 | [ ] | docs/03_詳細設計/*/インフラ.md |
|
|
23
|
+
| テスト設計 | [ ] | docs/04_テスト設計/*.md |
|
|
24
|
+
| 用語集 | [ ] | docs/03_用語集.md |
|
|
25
|
+
| ADR | [ ] / N/A | docs/99_設計判断記録/XXX-*.md |
|
|
26
26
|
|
|
27
27
|
---
|
|
28
28
|
|
|
29
29
|
## レビュアー向け読み順
|
|
30
30
|
|
|
31
|
-
1. **設計ドキュメント** `docs/
|
|
32
|
-
2. **ADR** `docs/
|
|
33
|
-
3. **テスト設計** `docs/
|
|
31
|
+
1. **設計ドキュメント** `docs/03_詳細設計/<UC名>/` — 何を作るか
|
|
32
|
+
2. **ADR** `docs/99_設計判断記録/` — なぜその設計か(該当する場合)
|
|
33
|
+
3. **テスト設計** `docs/04_テスト設計/<UC名>.md` — 何を検証するか
|
|
34
34
|
4. **テストコード** — 振る舞いの確認
|
|
35
35
|
5. **実装コード** — 設計との整合性確認
|
|
36
36
|
|
|
@@ -40,4 +40,4 @@
|
|
|
40
40
|
|
|
41
41
|
- 影響ユースケース:
|
|
42
42
|
- 修正内容の要約:
|
|
43
|
-
-
|
|
43
|
+
- 負債.md への記録: [ ] 完了(docs/振り返り/負債.md)
|
|
@@ -72,45 +72,45 @@ jobs:
|
|
|
72
72
|
echo "$CHANGED"
|
|
73
73
|
echo ""
|
|
74
74
|
|
|
75
|
-
# DOMAIN_PATH が変更されたら docs/
|
|
75
|
+
# DOMAIN_PATH が変更されたら docs/03_詳細設計/*/ドメイン.md も更新が必要
|
|
76
76
|
if [[ -n "$DOMAIN_PATH" ]]; then
|
|
77
77
|
DOMAIN_CHANGED=$(echo "$CHANGED" | grep -E "^${DOMAIN_PATH}/" || true)
|
|
78
78
|
if [[ -n "$DOMAIN_CHANGED" ]]; then
|
|
79
|
-
DETAIL_DOC_CHANGED=$(echo "$CHANGED" | grep -E 'docs/
|
|
79
|
+
DETAIL_DOC_CHANGED=$(echo "$CHANGED" | grep -E 'docs/03_詳細設計/.*/ドメイン\.md' || true)
|
|
80
80
|
if [[ -z "$DETAIL_DOC_CHANGED" ]]; then
|
|
81
|
-
echo "✗ $DOMAIN_PATH/ が変更されましたが docs/
|
|
81
|
+
echo "✗ $DOMAIN_PATH/ が変更されましたが docs/03_詳細設計/*/ドメイン.md が更新されていません"
|
|
82
82
|
echo "$DOMAIN_CHANGED" | sed 's/^/ /'
|
|
83
83
|
ERRORS=$((ERRORS + 1))
|
|
84
84
|
else
|
|
85
|
-
echo "✓ $DOMAIN_PATH/ 変更 →
|
|
85
|
+
echo "✓ $DOMAIN_PATH/ 変更 → ドメイン.md 更新確認"
|
|
86
86
|
fi
|
|
87
87
|
fi
|
|
88
88
|
fi
|
|
89
89
|
|
|
90
|
-
# USECASE_PATH が変更されたら docs/
|
|
90
|
+
# USECASE_PATH が変更されたら docs/03_詳細設計/*/ユースケース.md も更新が必要
|
|
91
91
|
if [[ -n "$USECASE_PATH" ]]; then
|
|
92
92
|
USECASE_CHANGED=$(echo "$CHANGED" | grep -E "^${USECASE_PATH}/" || true)
|
|
93
93
|
if [[ -n "$USECASE_CHANGED" ]]; then
|
|
94
|
-
USECASE_DOC_CHANGED=$(echo "$CHANGED" | grep -E 'docs/
|
|
94
|
+
USECASE_DOC_CHANGED=$(echo "$CHANGED" | grep -E 'docs/03_詳細設計/.*/ユースケース\.md' || true)
|
|
95
95
|
if [[ -z "$USECASE_DOC_CHANGED" ]]; then
|
|
96
|
-
echo "✗ $USECASE_PATH/ が変更されましたが docs/
|
|
96
|
+
echo "✗ $USECASE_PATH/ が変更されましたが docs/03_詳細設計/*/ユースケース.md が更新されていません"
|
|
97
97
|
ERRORS=$((ERRORS + 1))
|
|
98
98
|
else
|
|
99
|
-
echo "✓ $USECASE_PATH/ 変更 →
|
|
99
|
+
echo "✓ $USECASE_PATH/ 変更 → ユースケース.md 更新確認"
|
|
100
100
|
fi
|
|
101
101
|
fi
|
|
102
102
|
fi
|
|
103
103
|
|
|
104
|
-
# MIGRATION_DIR が変更されたら docs/
|
|
104
|
+
# MIGRATION_DIR が変更されたら docs/03_詳細設計/*/テーブル.md も更新が必要
|
|
105
105
|
if [[ -n "$MIGRATION_DIR" ]]; then
|
|
106
106
|
MIGRATION_CHANGED=$(echo "$CHANGED" | grep -E "^${MIGRATION_DIR}/" || true)
|
|
107
107
|
if [[ -n "$MIGRATION_CHANGED" ]]; then
|
|
108
|
-
TABLE_DOC_CHANGED=$(echo "$CHANGED" | grep -E 'docs/
|
|
108
|
+
TABLE_DOC_CHANGED=$(echo "$CHANGED" | grep -E 'docs/03_詳細設計/.*/テーブル\.md' || true)
|
|
109
109
|
if [[ -z "$TABLE_DOC_CHANGED" ]]; then
|
|
110
|
-
echo "✗ $MIGRATION_DIR/ が変更されましたが docs/
|
|
110
|
+
echo "✗ $MIGRATION_DIR/ が変更されましたが docs/03_詳細設計/*/テーブル.md が更新されていません"
|
|
111
111
|
ERRORS=$((ERRORS + 1))
|
|
112
112
|
else
|
|
113
|
-
echo "✓ $MIGRATION_DIR/ 変更 →
|
|
113
|
+
echo "✓ $MIGRATION_DIR/ 変更 → テーブル.md 更新確認"
|
|
114
114
|
fi
|
|
115
115
|
fi
|
|
116
116
|
fi
|
|
@@ -129,10 +129,10 @@ jobs:
|
|
|
129
129
|
run: |
|
|
130
130
|
BRANCH="${{ github.head_ref }}"
|
|
131
131
|
if [[ "$BRANCH" =~ ^hotfix/ ]]; then
|
|
132
|
-
if git diff --name-only origin/${{ github.base_ref }}...HEAD | grep -q 'docs
|
|
133
|
-
echo "✓ hotfix:
|
|
132
|
+
if git diff --name-only origin/${{ github.base_ref }}...HEAD | grep -q 'docs/振り返り/負債.md'; then
|
|
133
|
+
echo "✓ hotfix: 負債.md への記録確認"
|
|
134
134
|
else
|
|
135
|
-
echo "✗ hotfix PR では docs
|
|
135
|
+
echo "✗ hotfix PR では docs/振り返り/負債.md への負債記録が必要です"
|
|
136
136
|
echo " ./scripts/spec-runner.sh hotfix を使用してください"
|
|
137
137
|
exit 1
|
|
138
138
|
fi
|
|
@@ -174,8 +174,8 @@ jobs:
|
|
|
174
174
|
- name: ADR 対応コードリンクチェック
|
|
175
175
|
run: |
|
|
176
176
|
WARNINGS=0
|
|
177
|
-
if [[ -d "docs/
|
|
178
|
-
for adr in docs/
|
|
177
|
+
if [[ -d "docs/99_設計判断記録" ]]; then
|
|
178
|
+
for adr in docs/99_設計判断記録/[0-9]*.md; do
|
|
179
179
|
[[ -f "$adr" ]] || continue
|
|
180
180
|
# 「## 対応コード」セクションからファイルパスを抽出
|
|
181
181
|
code_refs=$(awk '/^## 対応コード/{found=1; next} /^## /{found=0} found && /`.*\.(php|ts|tsx)`/{print}' "$adr" | grep -oP '`[^`]+`' | tr -d '`' || true)
|
|
@@ -196,8 +196,8 @@ jobs:
|
|
|
196
196
|
echo "✓ ADR対応コードリンク: OK"
|
|
197
197
|
fi
|
|
198
198
|
|
|
199
|
-
# ─── 6.
|
|
200
|
-
- name: 新規Domain class
|
|
199
|
+
# ─── 6. 用語集.md の新エンティティチェック(config.sh の DOMAIN_PATH / SOURCE_EXTENSIONS)──
|
|
200
|
+
- name: 新規Domain classの用語集登録チェック
|
|
201
201
|
env:
|
|
202
202
|
DOMAIN_PATH: ${{ env.DOMAIN_PATH }}
|
|
203
203
|
SOURCE_EXTENSIONS: ${{ env.SOURCE_EXTENSIONS }}
|
|
@@ -207,10 +207,10 @@ jobs:
|
|
|
207
207
|
NEW_DOMAIN=$(echo "$CHANGED" | grep -E "^${DOMAIN_PATH}/.*\.(${EXT_PATTERN})$" | xargs git diff --diff-filter=A --name-only origin/${{ github.base_ref }}...HEAD 2>/dev/null || true)
|
|
208
208
|
|
|
209
209
|
if [[ -n "$NEW_DOMAIN" && -n "$DOMAIN_PATH" ]]; then
|
|
210
|
-
if echo "$CHANGED" | grep -q 'docs/
|
|
211
|
-
echo "✓ 新規Domainクラス追加 →
|
|
210
|
+
if echo "$CHANGED" | grep -q 'docs/03_用語集.md'; then
|
|
211
|
+
echo "✓ 新規Domainクラス追加 → 用語集.md 更新確認"
|
|
212
212
|
else
|
|
213
|
-
echo "⚠ 新規Domainクラスが追加されましたが
|
|
213
|
+
echo "⚠ 新規Domainクラスが追加されましたが 用語集.md が更新されていません"
|
|
214
214
|
echo " 新しいエンティティ/値オブジェクトにはユビキタス言語の追加が必要です"
|
|
215
215
|
fi
|
|
216
216
|
fi
|