spec-runner 1.0.0-alpha.1

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 (53) hide show
  1. package/LICENSE +34 -0
  2. package/README.md +193 -0
  3. package/bin/spec-runner.js +715 -0
  4. package/install.sh +80 -0
  5. package/package.json +45 -0
  6. package/templates/base/.github/PULL_REQUEST_TEMPLATE.md +43 -0
  7. package/templates/base/.github/workflows/phase-gate-check.yml +216 -0
  8. package/templates/base/docs/adr/TEMPLATE.md +46 -0
  9. package/templates/base/docs/glossary.md +51 -0
  10. package/templates/base/docs/review/debt.md +8 -0
  11. package/templates/base/scripts/spec-runner.sh +1079 -0
  12. package/templates/base/templates/requirement/template.md +40 -0
  13. package/templates/claude/.claude/commands/sr-complete.md +9 -0
  14. package/templates/claude/.claude/commands/sr-configure.md +11 -0
  15. package/templates/claude/.claude/commands/sr-design-detail.md +9 -0
  16. package/templates/claude/.claude/commands/sr-design-high.md +9 -0
  17. package/templates/claude/.claude/commands/sr-fix.md +9 -0
  18. package/templates/claude/.claude/commands/sr-hotfix.md +9 -0
  19. package/templates/claude/.claude/commands/sr-implement.md +9 -0
  20. package/templates/claude/.claude/commands/sr-init.md +10 -0
  21. package/templates/claude/.claude/commands/sr-review.md +9 -0
  22. package/templates/claude/.claude/commands/sr-set-gate.md +9 -0
  23. package/templates/claude/.claude/commands/sr-status.md +9 -0
  24. package/templates/claude/.claude/commands/sr-test-design.md +9 -0
  25. package/templates/claude/.claude/hooks/pre-tool-use.sh +79 -0
  26. package/templates/claude/.claude/settings.json +29 -0
  27. package/templates/claude/CLAUDE.md +141 -0
  28. package/templates/copilot/.github/copilot-instructions.md +25 -0
  29. package/templates/copilot/.github/prompts/sr-complete.prompt.md +13 -0
  30. package/templates/copilot/.github/prompts/sr-configure.prompt.md +13 -0
  31. package/templates/copilot/.github/prompts/sr-design-detail.prompt.md +14 -0
  32. package/templates/copilot/.github/prompts/sr-design-high.prompt.md +13 -0
  33. package/templates/copilot/.github/prompts/sr-fix.prompt.md +14 -0
  34. package/templates/copilot/.github/prompts/sr-hotfix.prompt.md +14 -0
  35. package/templates/copilot/.github/prompts/sr-implement.prompt.md +13 -0
  36. package/templates/copilot/.github/prompts/sr-init.prompt.md +15 -0
  37. package/templates/copilot/.github/prompts/sr-review.prompt.md +14 -0
  38. package/templates/copilot/.github/prompts/sr-set-gate.prompt.md +14 -0
  39. package/templates/copilot/.github/prompts/sr-status.prompt.md +13 -0
  40. package/templates/copilot/.github/prompts/sr-test-design.prompt.md +13 -0
  41. package/templates/cursor/.cursor/commands/sr-complete.md +9 -0
  42. package/templates/cursor/.cursor/commands/sr-configure.md +11 -0
  43. package/templates/cursor/.cursor/commands/sr-design-detail.md +9 -0
  44. package/templates/cursor/.cursor/commands/sr-design-high.md +9 -0
  45. package/templates/cursor/.cursor/commands/sr-fix.md +9 -0
  46. package/templates/cursor/.cursor/commands/sr-hotfix.md +9 -0
  47. package/templates/cursor/.cursor/commands/sr-implement.md +9 -0
  48. package/templates/cursor/.cursor/commands/sr-init.md +10 -0
  49. package/templates/cursor/.cursor/commands/sr-review.md +9 -0
  50. package/templates/cursor/.cursor/commands/sr-set-gate.md +9 -0
  51. package/templates/cursor/.cursor/commands/sr-status.md +9 -0
  52. package/templates/cursor/.cursor/commands/sr-test-design.md +9 -0
  53. package/templates/cursor/.cursorrules +25 -0
package/install.sh ADDED
@@ -0,0 +1,80 @@
1
+ #!/usr/bin/env bash
2
+ # =============================================================================
3
+ # spec-runner インストーラー (curl 方式)
4
+ #
5
+ # 使い方:
6
+ # curl -sSL https://raw.githubusercontent.com/spec-runner/spec-runner/main/install.sh | bash
7
+ #
8
+ # または wget:
9
+ # wget -qO- https://raw.githubusercontent.com/spec-runner/spec-runner/main/install.sh | bash
10
+ # =============================================================================
11
+
12
+ set -e
13
+
14
+ BOLD='\033[1m'
15
+ GREEN='\033[0;32m'
16
+ YELLOW='\033[1;33m'
17
+ RED='\033[0;31m'
18
+ CYAN='\033[0;36m'
19
+ NC='\033[0m'
20
+
21
+ ok() { echo -e "${GREEN}✓${NC} $*"; }
22
+ warn() { echo -e "${YELLOW}⚠${NC} $*"; }
23
+ info() { echo -e "${CYAN}ℹ${NC} $*"; }
24
+ die() { echo -e "${RED}ERROR:${NC} $*" >&2; exit 1; }
25
+
26
+ echo ""
27
+ echo -e "${BOLD}╔════════════════════════════════════════╗${NC}"
28
+ echo -e "${BOLD}║ spec-runner インストーラー ║${NC}"
29
+ echo -e "${BOLD}║ AI-driven DDD Phase Gate System ║${NC}"
30
+ echo -e "${BOLD}╚════════════════════════════════════════╝${NC}"
31
+ echo ""
32
+
33
+ # ── Node.js チェック ──────────────────────────────────────────────────────────
34
+ if command -v node &>/dev/null; then
35
+ NODE_VERSION=$(node --version | sed 's/v//')
36
+ NODE_MAJOR=$(echo "$NODE_VERSION" | cut -d. -f1)
37
+ if [[ "$NODE_MAJOR" -lt 16 ]]; then
38
+ die "Node.js 16以上が必要です(現在: v${NODE_VERSION})\n https://nodejs.org からインストールしてください"
39
+ fi
40
+ ok "Node.js v${NODE_VERSION}"
41
+ else
42
+ die "Node.js がインストールされていません。\n https://nodejs.org からインストールしてください"
43
+ fi
44
+
45
+ # ── jq チェック ───────────────────────────────────────────────────────────────
46
+ if command -v jq &>/dev/null; then
47
+ ok "jq $(jq --version)"
48
+ else
49
+ warn "jq が見つかりません。インストールします..."
50
+ if command -v brew &>/dev/null; then
51
+ brew install jq
52
+ elif command -v apt-get &>/dev/null; then
53
+ sudo apt-get install -y jq
54
+ elif command -v yum &>/dev/null; then
55
+ sudo yum install -y jq
56
+ else
57
+ die "jq を手動でインストールしてください: https://stedolan.github.io/jq/download/"
58
+ fi
59
+ ok "jq インストール完了"
60
+ fi
61
+
62
+ # ── git チェック ──────────────────────────────────────────────────────────────
63
+ if command -v git &>/dev/null; then
64
+ ok "git $(git --version | awk '{print $3}')"
65
+ else
66
+ die "git がインストールされていません"
67
+ fi
68
+
69
+ echo ""
70
+ info "npx spec-runner を実行します..."
71
+ echo ""
72
+
73
+ # ── npm/npx で実行 ────────────────────────────────────────────────────────────
74
+ if command -v npx &>/dev/null; then
75
+ npx spec-runner@latest
76
+ elif command -v npm &>/dev/null; then
77
+ npm exec spec-runner@latest
78
+ else
79
+ die "npm/npx が見つかりません。Node.js を再インストールしてください"
80
+ fi
package/package.json ADDED
@@ -0,0 +1,45 @@
1
+ {
2
+ "name": "spec-runner",
3
+ "version": "1.0.0-alpha.1",
4
+ "description": "AI-driven DDD phase gate system — design-first enforcement for Claude Code, Cursor, and Copilot",
5
+ "license": "MIT",
6
+ "bin": {
7
+ "spec-runner": "bin/spec-runner.js"
8
+ },
9
+ "engines": {
10
+ "node": ">=16.0.0"
11
+ },
12
+ "keywords": [
13
+ "ddd",
14
+ "phase-gate",
15
+ "ai-development",
16
+ "design-first",
17
+ "claude-code",
18
+ "spec-runner",
19
+ "laravel",
20
+ "rails",
21
+ "django",
22
+ "nextjs",
23
+ "spec-kit"
24
+ ],
25
+ "files": [
26
+ "bin/",
27
+ "templates/",
28
+ "install.sh",
29
+ "README.md",
30
+ "LICENSE"
31
+ ],
32
+ "dependencies": {
33
+ "chalk": "^4.1.2",
34
+ "enquirer": "^2.3.6",
35
+ "ora": "^5.4.1"
36
+ },
37
+ "repository": {
38
+ "type": "git",
39
+ "url": "git+https://github.com/TEEE88/spec-runner.git"
40
+ },
41
+ "homepage": "https://github.com/TEEE88/spec-runner",
42
+ "bugs": {
43
+ "url": "https://github.com/TEEE88/spec-runner/issues"
44
+ }
45
+ }
@@ -0,0 +1,43 @@
1
+ ## 対象ユースケース
2
+
3
+ <!-- ./scripts/spec-runner.sh status の出力を貼り付ける -->
4
+
5
+ ## 変更の種別
6
+
7
+ - [ ] 新規機能(feature/uc-)
8
+ - [ ] 通常修正(fix/)
9
+ - [ ] 緊急修正(hotfix/)
10
+
11
+ ---
12
+
13
+ ## ドキュメント更新チェック
14
+
15
+ <!-- 変更内容に応じてチェックしてください。不要な項目は N/A と書く -->
16
+
17
+ | ドキュメント | 更新済み | パス |
18
+ |------------|---------|------|
19
+ | ドメインモデル設計 | [ ] | docs/detailed/*/domain.md |
20
+ | ユースケース設計 | [ ] | docs/detailed/*/usecase.md |
21
+ | テーブル設計 | [ ] | docs/detailed/*/table.md |
22
+ | インフラ設計 | [ ] | docs/detailed/*/infra.md |
23
+ | テスト設計 | [ ] | docs/test-design/*.md |
24
+ | glossary.md | [ ] | docs/glossary.md |
25
+ | ADR | [ ] / N/A | docs/adr/XXX-*.md |
26
+
27
+ ---
28
+
29
+ ## レビュアー向け読み順
30
+
31
+ 1. **設計ドキュメント** `docs/detailed/<UC名>/` — 何を作るか
32
+ 2. **ADR** `docs/adr/` — なぜその設計か(該当する場合)
33
+ 3. **テスト設計** `docs/test-design/<UC名>.md` — 何を検証するか
34
+ 4. **テストコード** — 振る舞いの確認
35
+ 5. **実装コード** — 設計との整合性確認
36
+
37
+ ---
38
+
39
+ ## hotfix の場合(追加記入)
40
+
41
+ - 影響ユースケース:
42
+ - 修正内容の要約:
43
+ - debt.md への記録: [ ] 完了
@@ -0,0 +1,216 @@
1
+ name: フェーズゲートチェック
2
+
3
+ on:
4
+ pull_request:
5
+ branches: [main, 'aggregate/**']
6
+
7
+ jobs:
8
+ gate-check:
9
+ runs-on: ubuntu-latest
10
+ steps:
11
+ - uses: actions/checkout@v4
12
+ with:
13
+ fetch-depth: 0
14
+
15
+ - name: jq インストール確認
16
+ run: jq --version
17
+
18
+ # ─── spec-runner 設定の読み込み(.spec-runner/config.sh)────────────────
19
+ - name: spec-runner 設定の読み込み
20
+ run: |
21
+ if [[ -f .spec-runner/config.sh ]]; then
22
+ set -a
23
+ # shellcheck source=.spec-runner/config.sh
24
+ source .spec-runner/config.sh
25
+ set +a
26
+ echo "DOMAIN_PATH=$DOMAIN_PATH" >> $GITHUB_ENV
27
+ echo "USECASE_PATH=$USECASE_PATH" >> $GITHUB_ENV
28
+ echo "INFRA_PATH=$INFRA_PATH" >> $GITHUB_ENV
29
+ echo "MIGRATION_DIR=$MIGRATION_DIR" >> $GITHUB_ENV
30
+ echo "SOURCE_EXTENSIONS=$SOURCE_EXTENSIONS" >> $GITHUB_ENV
31
+ echo "DOMAIN_FORBIDDEN_GREP_PATTERN=$DOMAIN_FORBIDDEN_GREP_PATTERN" >> $GITHUB_ENV
32
+ else
33
+ echo "DOMAIN_PATH=src/domain" >> $GITHUB_ENV
34
+ echo "USECASE_PATH=src/useCase" >> $GITHUB_ENV
35
+ echo "INFRA_PATH=src/infrastructure" >> $GITHUB_ENV
36
+ echo "MIGRATION_DIR=" >> $GITHUB_ENV
37
+ echo "SOURCE_EXTENSIONS=ts tsx js jsx" >> $GITHUB_ENV
38
+ echo "DOMAIN_FORBIDDEN_GREP_PATTERN=" >> $GITHUB_ENV
39
+ fi
40
+
41
+ # ─── 1. ブランチ命名規則チェック ───────────────────────────────────
42
+ - name: ブランチ命名規則チェック
43
+ run: |
44
+ BRANCH="${{ github.head_ref }}"
45
+ echo "対象ブランチ: $BRANCH"
46
+
47
+ # 許可されるブランチパターン
48
+ if [[ "$BRANCH" =~ ^(feature/uc-|fix/|hotfix/|aggregate/) ]]; then
49
+ echo "✓ ブランチ命名: OK ($BRANCH)"
50
+ else
51
+ echo "✗ ブランチ命名が規約に違反しています: $BRANCH"
52
+ echo ""
53
+ echo "許可されるパターン:"
54
+ echo " feature/uc-<ユースケース名> ← 新機能"
55
+ echo " fix/<ユースケース名>-<内容> ← 通常修正"
56
+ echo " hotfix/<内容> ← 緊急修正"
57
+ echo " aggregate/<集約名> ← 集約ブランチ"
58
+ exit 1
59
+ fi
60
+
61
+ # ─── 2. ドメイン変更 → 設計ドキュメント更新チェック(config.sh のパスを使用)──
62
+ - name: ドメインモデル変更時の設計ドキュメント更新チェック
63
+ env:
64
+ DOMAIN_PATH: ${{ env.DOMAIN_PATH }}
65
+ USECASE_PATH: ${{ env.USECASE_PATH }}
66
+ MIGRATION_DIR: ${{ env.MIGRATION_DIR }}
67
+ run: |
68
+ ERRORS=0
69
+
70
+ CHANGED=$(git diff --name-only origin/${{ github.base_ref }}...HEAD)
71
+ echo "変更ファイル:"
72
+ echo "$CHANGED"
73
+ echo ""
74
+
75
+ # DOMAIN_PATH が変更されたら docs/detailed/*/domain.md も更新が必要
76
+ if [[ -n "$DOMAIN_PATH" ]]; then
77
+ DOMAIN_CHANGED=$(echo "$CHANGED" | grep -E "^${DOMAIN_PATH}/" || true)
78
+ if [[ -n "$DOMAIN_CHANGED" ]]; then
79
+ DETAIL_DOC_CHANGED=$(echo "$CHANGED" | grep -E 'docs/detailed/.*/domain\.md' || true)
80
+ if [[ -z "$DETAIL_DOC_CHANGED" ]]; then
81
+ echo "✗ $DOMAIN_PATH/ が変更されましたが docs/detailed/*/domain.md が更新されていません"
82
+ echo "$DOMAIN_CHANGED" | sed 's/^/ /'
83
+ ERRORS=$((ERRORS + 1))
84
+ else
85
+ echo "✓ $DOMAIN_PATH/ 変更 → domain.md 更新確認"
86
+ fi
87
+ fi
88
+ fi
89
+
90
+ # USECASE_PATH が変更されたら docs/detailed/*/usecase.md も更新が必要
91
+ if [[ -n "$USECASE_PATH" ]]; then
92
+ USECASE_CHANGED=$(echo "$CHANGED" | grep -E "^${USECASE_PATH}/" || true)
93
+ if [[ -n "$USECASE_CHANGED" ]]; then
94
+ USECASE_DOC_CHANGED=$(echo "$CHANGED" | grep -E 'docs/detailed/.*/usecase\.md' || true)
95
+ if [[ -z "$USECASE_DOC_CHANGED" ]]; then
96
+ echo "✗ $USECASE_PATH/ が変更されましたが docs/detailed/*/usecase.md が更新されていません"
97
+ ERRORS=$((ERRORS + 1))
98
+ else
99
+ echo "✓ $USECASE_PATH/ 変更 → usecase.md 更新確認"
100
+ fi
101
+ fi
102
+ fi
103
+
104
+ # MIGRATION_DIR が変更されたら docs/detailed/*/table.md も更新が必要
105
+ if [[ -n "$MIGRATION_DIR" ]]; then
106
+ MIGRATION_CHANGED=$(echo "$CHANGED" | grep -E "^${MIGRATION_DIR}/" || true)
107
+ if [[ -n "$MIGRATION_CHANGED" ]]; then
108
+ TABLE_DOC_CHANGED=$(echo "$CHANGED" | grep -E 'docs/detailed/.*/table\.md' || true)
109
+ if [[ -z "$TABLE_DOC_CHANGED" ]]; then
110
+ echo "✗ $MIGRATION_DIR/ が変更されましたが docs/detailed/*/table.md が更新されていません"
111
+ ERRORS=$((ERRORS + 1))
112
+ else
113
+ echo "✓ $MIGRATION_DIR/ 変更 → table.md 更新確認"
114
+ fi
115
+ fi
116
+ fi
117
+
118
+ if [[ $ERRORS -gt 0 ]]; then
119
+ echo ""
120
+ echo "ドキュメントの更新が必要です。コードと設計ドキュメントを同一PRに含めてください。"
121
+ exit 1
122
+ fi
123
+
124
+ echo ""
125
+ echo "✓ ドキュメント鮮度チェック: OK"
126
+
127
+ # ─── 3. hotfix の負債チェック ──────────────────────────────────────
128
+ - name: hotfix PRの負債記録チェック
129
+ run: |
130
+ BRANCH="${{ github.head_ref }}"
131
+ if [[ "$BRANCH" =~ ^hotfix/ ]]; then
132
+ if git diff --name-only origin/${{ github.base_ref }}...HEAD | grep -q 'docs/review/debt.md'; then
133
+ echo "✓ hotfix: debt.md への記録確認"
134
+ else
135
+ echo "✗ hotfix PR では docs/review/debt.md への負債記録が必要です"
136
+ echo " ./scripts/spec-runner.sh hotfix を使用してください"
137
+ exit 1
138
+ fi
139
+ fi
140
+
141
+ # ─── 4. DDD 依存方向チェック(config.sh の DOMAIN_PATH / DOMAIN_FORBIDDEN_GREP_PATTERN)──
142
+ - name: DDD レイヤー依存方向チェック
143
+ env:
144
+ DOMAIN_PATH: ${{ env.DOMAIN_PATH }}
145
+ SOURCE_EXTENSIONS: ${{ env.SOURCE_EXTENSIONS }}
146
+ DOMAIN_FORBIDDEN_GREP_PATTERN: ${{ env.DOMAIN_FORBIDDEN_GREP_PATTERN }}
147
+ run: |
148
+ ERRORS=0
149
+
150
+ if [[ -z "$DOMAIN_PATH" || ! -d "$DOMAIN_PATH" ]]; then
151
+ echo "✓ DDD依存方向: スキップ(DOMAIN_PATH 未設定またはディレクトリなし)"
152
+ exit 0
153
+ fi
154
+
155
+ if [[ -z "$DOMAIN_FORBIDDEN_GREP_PATTERN" ]]; then
156
+ echo "✓ DDD依存方向: スキップ(DOMAIN_FORBIDDEN_GREP_PATTERN 未設定。.spec-runner/config.sh で設定可能)"
157
+ exit 0
158
+ fi
159
+
160
+ # ソース拡張子で find して、禁止パターンに一致するファイルを検出
161
+ EXT_REGEX=".*\\.($(echo "$SOURCE_EXTENSIONS" | tr ' ' '|'))$"
162
+ VIOLATIONS=$(find "$DOMAIN_PATH" -type f -regextype posix-extended -regex "$EXT_REGEX" 2>/dev/null | xargs grep -l "$DOMAIN_FORBIDDEN_GREP_PATTERN" 2>/dev/null || true)
163
+ if [[ -n "$VIOLATIONS" ]]; then
164
+ echo "✗ Domain層が上位層に依存しています(DDD違反)"
165
+ echo "$VIOLATIONS" | sed 's/^/ /'
166
+ ERRORS=$((ERRORS + 1))
167
+ else
168
+ echo "✓ DDD依存方向: OK"
169
+ fi
170
+
171
+ [[ $ERRORS -eq 0 ]] || exit 1
172
+
173
+ # ─── 5. ADR の対応コードリンクチェック ────────────────────────────
174
+ - name: ADR 対応コードリンクチェック
175
+ run: |
176
+ WARNINGS=0
177
+ if [[ -d "docs/adr" ]]; then
178
+ for adr in docs/adr/[0-9]*.md; do
179
+ [[ -f "$adr" ]] || continue
180
+ # 「## 対応コード」セクションからファイルパスを抽出
181
+ code_refs=$(awk '/^## 対応コード/{found=1; next} /^## /{found=0} found && /`.*\.(php|ts|tsx)`/{print}' "$adr" | grep -oP '`[^`]+`' | tr -d '`' || true)
182
+ while IFS= read -r ref; do
183
+ [[ -z "$ref" ]] && continue
184
+ if [[ ! -f "$ref" ]]; then
185
+ echo "⚠ ADR $(basename $adr): 参照ファイルが存在しません → $ref"
186
+ WARNINGS=$((WARNINGS + 1))
187
+ fi
188
+ done <<< "$code_refs"
189
+ done
190
+ fi
191
+
192
+ if [[ $WARNINGS -gt 0 ]]; then
193
+ echo ""
194
+ echo "ADRの対応コードリンクを更新してください(警告: ブロックしません)"
195
+ else
196
+ echo "✓ ADR対応コードリンク: OK"
197
+ fi
198
+
199
+ # ─── 6. glossary.md の新エンティティチェック(config.sh の DOMAIN_PATH / SOURCE_EXTENSIONS)──
200
+ - name: 新規Domain classのglossary.md登録チェック
201
+ env:
202
+ DOMAIN_PATH: ${{ env.DOMAIN_PATH }}
203
+ SOURCE_EXTENSIONS: ${{ env.SOURCE_EXTENSIONS }}
204
+ run: |
205
+ CHANGED=$(git diff --name-only origin/${{ github.base_ref }}...HEAD)
206
+ EXT_PATTERN=$(echo "$SOURCE_EXTENSIONS" | tr ' ' '|')
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
+
209
+ if [[ -n "$NEW_DOMAIN" && -n "$DOMAIN_PATH" ]]; then
210
+ if echo "$CHANGED" | grep -q 'docs/glossary.md'; then
211
+ echo "✓ 新規Domainクラス追加 → glossary.md 更新確認"
212
+ else
213
+ echo "⚠ 新規Domainクラスが追加されましたが glossary.md が更新されていません"
214
+ echo " 新しいエンティティ/値オブジェクトにはユビキタス言語の追加が必要です"
215
+ fi
216
+ fi
@@ -0,0 +1,46 @@
1
+ ---
2
+ title: ADR-XXX <タイトル>
3
+ status: 提案 | 承認済み | 置き換え済み(by ADR-YYY)
4
+ date: YYYY-MM-DD
5
+ usecase: <関連ユースケース名>
6
+ ---
7
+
8
+ # ADR-XXX: <タイトル>
9
+
10
+ ## ステータス: 提案
11
+
12
+ ## コンテキスト
13
+
14
+ <!-- この判断が必要になった背景 -->
15
+
16
+ ## 検討した選択肢
17
+
18
+ ### A: <名前>
19
+ メリット:
20
+ デメリット:
21
+
22
+ ### B: <名前>
23
+ メリット:
24
+ デメリット:
25
+
26
+ ## 決定
27
+
28
+ <!-- どれを選んだか -->
29
+
30
+ ## 根拠
31
+
32
+ <!-- なぜその選択肢を選んだか。トレードオフ -->
33
+
34
+ ## 対応コード
35
+
36
+ <!--
37
+ CIがこのセクションを読んでファイル存在チェックする。
38
+ バッククォートで囲んだファイルパスを列挙すること。
39
+ -->
40
+
41
+ - `packages/backend/src/Domain/...`
42
+ - `packages/backend/src/Infrastructure/...`
43
+
44
+ ## 影響
45
+
46
+ <!-- 他の設計・ADRへの影響 -->
@@ -0,0 +1,51 @@
1
+ # ユビキタス言語辞書
2
+
3
+ > このファイルはプロジェクト内の用語の**唯一の真実源**。
4
+ > 新しい概念が登場したら、**まずここに追加してから**設計・実装に入ること。
5
+ > `./scripts/spec-runner.sh set-gate glossary_checked` で確認済みフラグを立てること。
6
+
7
+ ---
8
+
9
+ ## 使い方
10
+
11
+ - 設計ドキュメント(`docs/`) → **日本語** 列を使う
12
+ - コード(クラス名・メソッド名・変数名)→ **英語** 列を使う
13
+ - PHPDoc / JSDoc → 日本語を `@description` に併記する
14
+
15
+ ---
16
+
17
+ ## 顧客管理コンテキスト
18
+
19
+ | 日本語 | 英語 | コンテキスト | 説明 | 初出 |
20
+ |-------|------|------------|------|------|
21
+ | 顧客 | Customer | 顧客管理 | 当社のサービスを利用する法人または個人 | - |
22
+ | 顧客ステータス | CustomerStatus | 顧客管理 | アクティブ/休止/解約 | - |
23
+ | 連絡先 | Contact | 顧客管理 | 顧客に紐づく連絡先情報 | - |
24
+ | 担当者 | AccountManager | 顧客管理 | 顧客を担当する社内メンバー | - |
25
+ | 対応履歴 | InteractionHistory | 顧客管理 | 顧客とのやりとりの記録 | - |
26
+
27
+ ## 認証コンテキスト
28
+
29
+ | 日本語 | 英語 | コンテキスト | 説明 | 初出 |
30
+ |-------|------|------------|------|------|
31
+ | ユーザー | User | 認証 | システムにログインするアカウント | - |
32
+ | ロール | Role | 認可 | 権限グループ(管理者/一般) | - |
33
+
34
+ ## 共通
35
+
36
+ | 日本語 | 英語 | コンテキスト | 説明 | 初出 |
37
+ |-------|------|------------|------|------|
38
+ | 識別子 | Id | 共通 | エンティティを一意に特定する値(ULID) | - |
39
+ | 値オブジェクト | ValueObject | 共通 | 属性値で等価判定されるオブジェクト | - |
40
+ | エンティティ | Entity | 共通 | 同一性(ID)を持つドメインオブジェクト | - |
41
+ | ドメインイベント | DomainEvent | 共通 | ドメインで発生した事実を表すイベント | - |
42
+ | リポジトリ | Repository | 共通 | 永続化・取得を抽象化するインターフェース | - |
43
+
44
+ ---
45
+
46
+ ## 追加ルール
47
+
48
+ 1. 新しい概念 → 実装前にここへ追加
49
+ 2. 日本語名変更 → 設計ドキュメントの全使用箇所も更新
50
+ 3. 英語名変更 → コードの全使用箇所もリネーム
51
+ 4. 「初出」列 → 最初に定義したドキュメントのパスを記載
@@ -0,0 +1,8 @@
1
+ # ドキュメント負債
2
+
3
+ > hotfix 等で緊急対応した際に積み上がる負債を記録する。
4
+ > `./scripts/spec-runner.sh init` 実行時に未消化タスクがあると警告が出る。
5
+
6
+ ---
7
+
8
+ <!-- hotfix時に自動追記される -->