spec-runner 1.0.13 → 1.0.15
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/package.json +1 -1
- package/templates/.spec-runner/scripts/branch/uc-next-start.sh +61 -51
- package/templates/.spec-runner/scripts/check.sh +1 -1
- package/templates/.spec-runner/steps//344/273/225/346/247/230/347/255/226/345/256/232.md +10 -4
- package/templates/.spec-runner/templates/UC-N-/343/203/246/343/203/274/343/202/271/343/202/261/343/203/274/343/202/271/345/220/215.md +9 -5
package/package.json
CHANGED
|
@@ -1,12 +1,16 @@
|
|
|
1
1
|
#!/usr/bin/env bash
|
|
2
2
|
# 次の UC を開始する: main に切り替え、feature/UC-N-xxx ブランチを作成する。
|
|
3
3
|
# 使用例:
|
|
4
|
-
# ./uc-next-start.sh
|
|
5
|
-
# ./uc-next-start.sh
|
|
6
|
-
# ./uc-next-start.sh task-
|
|
7
|
-
#
|
|
8
|
-
#
|
|
9
|
-
#
|
|
4
|
+
# ./uc-next-start.sh "task-management" "タスク管理機能追加" "タスク管理"
|
|
5
|
+
# ./uc-next-start.sh UC-2 "order-cancel" "注文キャンセル" "注文"
|
|
6
|
+
# ./uc-next-start.sh --yes "task-management" "タスク管理機能追加" "タスク管理"
|
|
7
|
+
# 引数仕様(位置引数):
|
|
8
|
+
# [UC-ID] [SLUG] [TITLE] [CATEGORY]
|
|
9
|
+
# - UC-ID: 省略可(例: UC-2)
|
|
10
|
+
# - SLUG: 必須。ブランチ用の短名(ASCII, kebab-case 推奨)
|
|
11
|
+
# - TITLE: 必須。UC ファイル題名(日本語推奨)
|
|
12
|
+
# - CATEGORY: 必須。docs/02_ユースケース仕様/ 配下のカテゴリ名(日本語可)
|
|
13
|
+
# 重要: 空欄の引数は禁止。SLUG/TITLE/CATEGORY は必ず指定する
|
|
10
14
|
# 実行後は次のステップに進む旨を案内する。
|
|
11
15
|
|
|
12
16
|
set -e
|
|
@@ -20,8 +24,12 @@ for a in "$@"; do
|
|
|
20
24
|
case "$a" in
|
|
21
25
|
--yes|-y) YES_MODE=true ;;
|
|
22
26
|
*)
|
|
23
|
-
#
|
|
24
|
-
[[ -
|
|
27
|
+
# 空引数は禁止
|
|
28
|
+
if [[ -z "$a" ]]; then
|
|
29
|
+
echo "Error: 空文字の引数は使用できません。UC-ID を省略する場合は引数自体を渡さないでください。" >&2
|
|
30
|
+
exit 1
|
|
31
|
+
fi
|
|
32
|
+
ARGS+=("$a")
|
|
25
33
|
;;
|
|
26
34
|
esac
|
|
27
35
|
done
|
|
@@ -56,60 +64,62 @@ next_uc_id() {
|
|
|
56
64
|
}
|
|
57
65
|
|
|
58
66
|
NEXT_UC="$(next_uc_id)"
|
|
59
|
-
|
|
67
|
+
SLUG=""
|
|
68
|
+
TITLE=""
|
|
60
69
|
CATEGORY=""
|
|
61
|
-
|
|
62
|
-
#
|
|
63
|
-
|
|
64
|
-
|
|
70
|
+
if [[ ${#ARGS[@]} -ge 1 ]] && [[ "${ARGS[0]}" =~ ^${UC_ID_RE}$ ]]; then
|
|
71
|
+
[[ ${#ARGS[@]} -eq 4 ]] || {
|
|
72
|
+
echo "Usage: .spec-runner/scripts/branch/uc-next-start.sh [UC-ID] \"SLUG\" \"TITLE\" \"CATEGORY\" [--yes]" >&2
|
|
73
|
+
echo " - UC-ID を指定した場合は SLUG/TITLE/CATEGORY の3引数が必須です" >&2
|
|
74
|
+
exit 1
|
|
75
|
+
}
|
|
65
76
|
NEXT_UC="${ARGS[0]}"
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
CATEGORY="${ARGS[
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
CATEGORY
|
|
77
|
+
SLUG="${ARGS[1]}"
|
|
78
|
+
TITLE="${ARGS[2]}"
|
|
79
|
+
CATEGORY="${ARGS[3]}"
|
|
80
|
+
else
|
|
81
|
+
[[ ${#ARGS[@]} -eq 3 ]] || {
|
|
82
|
+
echo "Usage: .spec-runner/scripts/branch/uc-next-start.sh [UC-ID] \"SLUG\" \"TITLE\" \"CATEGORY\" [--yes]" >&2
|
|
83
|
+
echo " - UC-ID は任意、SLUG/TITLE/CATEGORY は必須です(空文字禁止)" >&2
|
|
84
|
+
exit 1
|
|
85
|
+
}
|
|
86
|
+
SLUG="${ARGS[0]}"
|
|
87
|
+
TITLE="${ARGS[1]}"
|
|
88
|
+
CATEGORY="${ARGS[2]}"
|
|
73
89
|
fi
|
|
74
90
|
|
|
75
|
-
#
|
|
76
|
-
if [[ -z "$
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
echo "次の UC 用ブランチを作成します。"
|
|
81
|
-
echo " UC: $NEXT_UC"
|
|
82
|
-
echo -n " 説明(英数字・ハイフン推奨。日本語のみの場合は uc-001 等にフォールバック。Enter で \"next-uc\"): "
|
|
83
|
-
read -r DESC
|
|
84
|
-
DESC="${DESC:-next-uc}"
|
|
85
|
-
fi
|
|
91
|
+
# SLUG / TITLE / CATEGORY は必須(UC-ID のみ任意)
|
|
92
|
+
if [[ -z "$SLUG" || -z "$TITLE" || -z "$CATEGORY" ]]; then
|
|
93
|
+
echo "Usage: .spec-runner/scripts/branch/uc-next-start.sh [UC-ID] \"SLUG\" \"TITLE\" \"CATEGORY\" [--yes]" >&2
|
|
94
|
+
echo " - UC-ID は任意、SLUG/TITLE/CATEGORY は必須です(空文字禁止)" >&2
|
|
95
|
+
exit 1
|
|
86
96
|
fi
|
|
87
97
|
|
|
88
|
-
#
|
|
98
|
+
# SLUG は英小文字・ハイフン(Git ブランチ名は ASCII のみ)
|
|
89
99
|
# macOS(BSD sed) でも動くように、連続ハイフンは 's/--*/-/g' で圧縮する
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
# UC 仕様書ファイル名は必ず日本語にする(題名が ASCII のみなら「要確認」にする)
|
|
96
|
-
DOC_TITLE="$RAW_DESC"
|
|
97
|
-
if [[ -z "$DOC_TITLE" ]]; then
|
|
98
|
-
DOC_TITLE="要確認"
|
|
99
|
-
else
|
|
100
|
-
# 非ASCIIが無い(= 英数字/記号のみ)なら、日本語題名が無い扱いにして要確認へ
|
|
101
|
-
if echo "$DOC_TITLE" | LC_ALL=C grep -q '^[ -~]*$'; then
|
|
102
|
-
DOC_TITLE="要確認"
|
|
103
|
-
fi
|
|
100
|
+
SLUG=$(echo "$SLUG" | tr '[:upper:]' '[:lower:]' | sed 's/[^a-z0-9]/-/g' | sed 's/--*/-/g' | sed 's/^-*//' | sed 's/-*$//')
|
|
101
|
+
if [[ -z "$SLUG" ]]; then
|
|
102
|
+
echo "Error: SLUG は英数字・ハイフンへ正規化可能な値を指定してください(例: task-management)。" >&2
|
|
103
|
+
exit 1
|
|
104
104
|
fi
|
|
105
|
+
BRANCH_NAME="${BRANCH_PREFIX}/${NEXT_UC}-${SLUG}"
|
|
106
|
+
|
|
107
|
+
# UC ファイル題名
|
|
108
|
+
DOC_TITLE="$TITLE"
|
|
105
109
|
# ファイル名に危険な文字が入らないように除去(日本語は許可)
|
|
106
110
|
DOC_TITLE=$(echo "$DOC_TITLE" | sed 's/[\\\\\\/\\:\\*\\?\\\"\\<\\>\\|]/ /g' | sed 's/[[:space:]]\\+/ /g' | sed 's/^ *//; s/ *$//')
|
|
107
|
-
[[ -z "$DOC_TITLE" ]]
|
|
111
|
+
if [[ -z "$DOC_TITLE" ]]; then
|
|
112
|
+
echo "Error: TITLE が不正です(危険文字除去後に空になりました)。" >&2
|
|
113
|
+
exit 1
|
|
114
|
+
fi
|
|
108
115
|
|
|
109
|
-
#
|
|
110
|
-
|
|
111
|
-
CATEGORY=$(echo "$CATEGORY" | sed 's/[
|
|
112
|
-
[[ -z "$CATEGORY" ]]
|
|
116
|
+
# カテゴリは必須。日本語カテゴリは許可し、危険文字だけ除去。
|
|
117
|
+
# 文字レンジ指定は sed 実装差で壊れやすいため、危険文字のみを除去する。
|
|
118
|
+
CATEGORY=$(echo "$CATEGORY" | sed 's/[\\\/:\*\?"<>|]//g' | sed 's/[[:cntrl:]]//g' | sed 's/[[:space:]]\+/ /g' | sed 's/^ *//; s/ *$//')
|
|
119
|
+
if [[ -z "$CATEGORY" ]]; then
|
|
120
|
+
echo "Error: CATEGORY は空にできません。" >&2
|
|
121
|
+
exit 1
|
|
122
|
+
fi
|
|
113
123
|
|
|
114
124
|
if git rev-parse --verify "$BRANCH_NAME" >/dev/null 2>&1; then
|
|
115
125
|
echo "Error: ブランチ '$BRANCH_NAME' は既に存在します。" >&2
|
|
@@ -314,7 +314,7 @@ run_health_check() {
|
|
|
314
314
|
for f in "$UC_ROOT"/*/UC-*.md; do
|
|
315
315
|
[[ -f "$f" ]] || continue
|
|
316
316
|
base=$(basename "$f" .md)
|
|
317
|
-
if ! grep -qE '
|
|
317
|
+
if ! grep -qE '受入条件|成功基準|前提:|操作:|期待:|\\|[[:space:]]*前提[[:space:]]*\\|[[:space:]]*操作[[:space:]]*\\|[[:space:]]*期待[[:space:]]*\\|' "$f" 2>/dev/null; then
|
|
318
318
|
drifts+=("UC ${base}: 受入条件または成功基準がありません")
|
|
319
319
|
fi
|
|
320
320
|
count=$(grep -c '\\[要確認:' "$f" 2>/dev/null || echo 0)
|
|
@@ -33,15 +33,20 @@ $ARGUMENTS
|
|
|
33
33
|
### 1. ブランチ用短名(2〜4 語)
|
|
34
34
|
|
|
35
35
|
- 機能説明からキーワード抽出。**ブランチ名は ASCII のみ**、kebab-case(例: order-placement, user-auth)。
|
|
36
|
-
- **UC
|
|
37
|
-
- 技術略語(OAuth2, API, JWT
|
|
36
|
+
- **UC ファイル名は TITLE を使用**(`UC-<N>-<TITLE>.md`)。
|
|
37
|
+
- 技術略語(OAuth2, API, JWT)はそのまま。`SLUG` は ASCII(kebab-case)、`TITLE` は日本語で記述する。
|
|
38
38
|
- 例: 「ユーザー認証」→ user-auth / 「OAuth2 API」→ oauth2-api-integration 等。
|
|
39
39
|
|
|
40
40
|
### 2. ブランチと仕様の作成
|
|
41
41
|
|
|
42
|
-
- `.spec-runner/scripts/branch/uc-next-start.sh [UC-ID] "$
|
|
43
|
-
- UC-ID
|
|
42
|
+
- `.spec-runner/scripts/branch/uc-next-start.sh [UC-ID] "$SLUG" "$TITLE" "$CATEGORY" [--yes]`
|
|
43
|
+
- UC-ID は省略可(省略時は自動採番)。**SLUG / TITLE / CATEGORY は必須**(空文字禁止)。
|
|
44
|
+
- CATEGORY で配置先が決まる(カテゴリ名は日本語可)。**機能ごとに 1 回だけ**。
|
|
44
45
|
- シングルクォートはエスケープ(例: `'I'\''m Groot'`)またはダブルクォート。
|
|
46
|
+
- 引数の実例:
|
|
47
|
+
- `./.spec-runner/scripts/branch/uc-next-start.sh "task-management" "タスク管理機能追加" "タスク管理" --yes`
|
|
48
|
+
- `./.spec-runner/scripts/branch/uc-next-start.sh UC-2 "order-cancel" "注文キャンセル" "注文" --yes`
|
|
49
|
+
- `./.spec-runner/scripts/branch/uc-next-start.sh UC-3 "task-import" "タスク一括登録" "タスク管理" --yes`
|
|
45
50
|
|
|
46
51
|
### 3. テンプレ読込
|
|
47
52
|
|
|
@@ -164,6 +169,7 @@ checklists を使う場合のみ `FEATURE_DIR/checklists/requirements.md` を生
|
|
|
164
169
|
### 成功基準
|
|
165
170
|
|
|
166
171
|
- 測定可能(時間・割合・件数等)、技術非依存、ユーザー/ビジネス結果、実装を知らず検証可能
|
|
172
|
+
- 受入条件は日本語フォーマット(`前提` / `操作` / `期待`)で記述する。複数件は表形式(`| 前提 | 操作 | 期待 |`)を使用する
|
|
167
173
|
|
|
168
174
|
**良い例**: 「3 分以内にチェックアウト」「1 万同時ユーザー」「検索 95% が 1 秒以内」
|
|
169
175
|
|
|
@@ -6,15 +6,19 @@
|
|
|
6
6
|
|
|
7
7
|
## 事前条件
|
|
8
8
|
|
|
9
|
-
##
|
|
9
|
+
## 基本フロー
|
|
10
10
|
|
|
11
|
-
##
|
|
11
|
+
## 代替フロー
|
|
12
|
+
|
|
13
|
+
## 例外
|
|
12
14
|
|
|
13
15
|
## 事後条件
|
|
14
16
|
|
|
15
|
-
##
|
|
17
|
+
## 受入条件
|
|
18
|
+
|
|
19
|
+
| 前提 | 操作 | 期待 |
|
|
20
|
+
|------|------|------|
|
|
21
|
+
| <条件・前提状態> | <ユーザー操作・イベント> | <測定可能な結果> |
|
|
16
22
|
|
|
17
23
|
## 備考
|
|
18
24
|
|
|
19
|
-
---
|
|
20
|
-
# changed: YYYY-MM-DD 理由(修正時のみ記入)
|