@einja/dev-cli 0.1.38 → 0.1.39
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 +1 -0
- package/dist/lib/file-system.d.ts +1 -5
- package/dist/lib/file-system.d.ts.map +1 -1
- package/dist/lib/file-system.js +2 -8
- package/dist/lib/file-system.js.map +1 -1
- package/dist/lib/mcp-config.js +3 -3
- package/dist/lib/mcp-config.js.map +1 -1
- package/dist/lib/mcp-config.test.js +2 -2
- package/dist/lib/mcp-config.test.js.map +1 -1
- package/dist/lib/merger.d.ts.map +1 -1
- package/dist/lib/merger.js +5 -5
- package/dist/lib/merger.js.map +1 -1
- package/dist/lib/preset-update/file-copier.d.ts.map +1 -1
- package/dist/lib/preset-update/file-copier.js +5 -0
- package/dist/lib/preset-update/file-copier.js.map +1 -1
- package/dist/lib/preset-update/file-copier.test.js +26 -0
- package/dist/lib/preset-update/file-copier.test.js.map +1 -1
- package/dist/lib/sync/category-validator.d.ts +5 -1
- package/dist/lib/sync/category-validator.d.ts.map +1 -1
- package/dist/lib/sync/category-validator.js +16 -2
- package/dist/lib/sync/category-validator.js.map +1 -1
- package/dist/lib/sync/category-validator.test.js +14 -4
- package/dist/lib/sync/category-validator.test.js.map +1 -1
- package/dist/lib/sync/file-filter.d.ts.map +1 -1
- package/dist/lib/sync/file-filter.js +24 -0
- package/dist/lib/sync/file-filter.js.map +1 -1
- package/dist/lib/sync/file-filter.test.js +37 -0
- package/dist/lib/sync/file-filter.test.js.map +1 -1
- package/package.json +1 -1
- package/presets/default/.claude/agents/einja/specs/spec-qa-generator.md +40 -43
- package/presets/default/.claude/agents/einja/specs/spec-tasks-generator.md +16 -6
- package/presets/default/.claude/agents/einja/task/task-executer.md +13 -11
- package/presets/default/.claude/commands/einja/einja-sync.md +238 -0
- package/presets/default/.claude/commands/einja/spec-create.md +7 -3
- package/presets/default/.claude/commands/einja/task-exec.md +6 -6
- package/presets/default/.claude/settings.json +1 -0
- package/presets/default/.claude/skills/einja-coding-standards/SKILL.md +4 -3
- package/presets/default/.claude/skills/einja-coding-standards/references/import-conventions.md +69 -0
- package/presets/default/.claude/skills/einja-component-design/SKILL.md +3 -3
- package/presets/default/.claude/skills/einja-project-overview/SKILL.md +35 -0
- package/presets/default/.claude/skills/einja-skill-creator/SKILL.md +421 -0
- package/presets/default/.claude/skills/einja-skill-creator/scripts/init_skill.py +333 -0
- package/presets/default/.claude/skills/einja-skill-creator/scripts/package_skill.py +110 -0
- package/presets/default/.claude/skills/einja-skill-creator/scripts/quick_validate.py +117 -0
- package/presets/default/.claude/skills/einja-spec-context-loader/SKILL.md +6 -6
- package/presets/default/.claude/skills/einja-task-qa/SKILL.md +24 -22
- package/presets/default/.claude/skills/einja-task-qa/{reference → references}/troubleshooting.md +1 -1
- package/presets/default/.claude/skills/einja-task-qa/{reference → references}/usage-patterns.md +2 -2
- package/presets/default/.claude/skills/einja-task-qa/templates/qa-test-template.md +13 -13
- package/{scaffolds → presets/default}/.mcp.json +27 -6
- package/presets/default/.vscode/settings.json +18 -0
- package/presets/default/CLAUDE.md.template +192 -0
- package/{scaffolds → presets/default/docs/einja}/example/README.md +1 -1
- package/{scaffolds → presets/default/docs/einja}/example/specs/issues/issue999-example-task/qa-tests/README.md +20 -23
- package/presets/default/docs/einja/example/specs/issues/issue999-example-task/qa-tests/evidence/story3/.gitkeep +0 -0
- package/{scaffolds → presets/default/docs/einja}/example/specs/issues/issue999-example-task/qa-tests/scenarios.md +12 -16
- package/presets/default/docs/einja/example/specs/issues/issue999-example-task/qa-tests/story1.md +101 -0
- package/presets/default/docs/einja/example/specs/issues/issue999-example-task/qa-tests/story2.md +70 -0
- package/presets/default/docs/einja/example/specs/issues/issue999-example-task/qa-tests/story3.md +69 -0
- package/{scaffolds → presets/default/docs/einja}/instructions/deployment-setup.md +93 -9
- package/{scaffolds → presets/default/docs/einja}/instructions/environment-setup.md +152 -4
- package/{scaffolds → presets/default/docs/einja}/instructions/local-server-environment-and-worktree.md +99 -0
- package/presets/default/docs/einja/instructions/neon-cli-reference.md +605 -0
- package/{scaffolds → presets/default/docs/einja}/instructions/vercel-cli-reference.md +80 -0
- package/{scaffolds → presets/default/docs/einja}/steering/acceptance-criteria-and-qa-guide.md +3 -4
- package/{scaffolds → presets/default/docs/einja}/steering/infrastructure/environment-variables.md +4 -4
- package/{scaffolds → presets/default/docs/einja}/templates/README.md +1 -1
- package/{scaffolds → presets/default/docs/einja}/templates/qa-test.md.template +29 -26
- package/presets/default/symlinks.json +0 -45
- package/scaffolds/cli/preset.yaml +0 -137
- package/scaffolds/example/specs/issues/issue999-example-task/qa-tests/phase1/1-1.md +0 -268
- package/scaffolds/example/specs/issues/issue999-example-task/qa-tests/phase1/1-2.md +0 -179
- package/scaffolds/example/specs/issues/issue999-example-task/qa-tests/phase1/1-3.md +0 -392
- package/scaffolds/example/specs/issues/issue999-example-task/qa-tests/phase2/2-1.md +0 -459
- /package/presets/default/.claude/skills/einja-coding-standards/{reference → references}/naming-conventions.md +0 -0
- /package/presets/default/.claude/skills/einja-coding-standards/{reference → references}/prohibited-patterns.md +0 -0
- /package/presets/default/.claude/skills/einja-coding-standards/{reference → references}/typescript-rules.md +0 -0
- /package/presets/default/.claude/skills/einja-component-design/{reference → references}/directory-structure.md +0 -0
- /package/presets/default/.claude/skills/einja-component-design/{reference → references}/props-patterns.md +0 -0
- /package/presets/default/.claude/skills/einja-component-design/{reference → references}/styling-guide.md +0 -0
- /package/presets/default/.claude/skills/einja-task-qa/{reference → references}/failure-patterns.md +0 -0
- /package/{scaffolds → presets/default/docs/einja}/example/specs/issues/issue999-example-task/design.md +0 -0
- /package/{scaffolds/example/specs/issues/issue999-example-task/qa-tests/phase1/evidence → presets/default/docs/einja/example/specs/issues/issue999-example-task/qa-tests/evidence/story1}/.gitkeep +0 -0
- /package/{scaffolds/example/specs/issues/issue999-example-task/qa-tests/phase2/evidence → presets/default/docs/einja/example/specs/issues/issue999-example-task/qa-tests/evidence/story2}/.gitkeep +0 -0
- /package/{scaffolds → presets/default/docs/einja}/example/specs/issues/issue999-example-task/requirements.md +0 -0
- /package/{scaffolds → presets/default/docs/einja}/example/specs/issues/issue999-example-task/tasks.md +0 -0
- /package/{scaffolds → presets/default/docs/einja}/instructions/task-execute.md +0 -0
- /package/{scaffolds → presets/default/docs/einja}/instructions/task-vibe-kanban-loop.md +0 -0
- /package/{scaffolds → presets/default/docs/einja}/steering/README.md +0 -0
- /package/{scaffolds → presets/default/docs/einja}/steering/architecture.md +0 -0
- /package/{scaffolds → presets/default/docs/einja}/steering/branch-strategy.md +0 -0
- /package/{scaffolds → presets/default/docs/einja}/steering/commit-rules.md +0 -0
- /package/{scaffolds → presets/default/docs/einja}/steering/db-schema-design.md +0 -0
- /package/{scaffolds → presets/default/docs/einja}/steering/development/api-development.md +0 -0
- /package/{scaffolds → presets/default/docs/einja}/steering/development/backend-architecture.md +0 -0
- /package/{scaffolds → presets/default/docs/einja}/steering/development/database-guidelines.md +0 -0
- /package/{scaffolds → presets/default/docs/einja}/steering/development/frontend-development.md +0 -0
- /package/{scaffolds → presets/default/docs/einja}/steering/development/review-guidelines.md +0 -0
- /package/{scaffolds → presets/default/docs/einja}/steering/development/testing-strategy.md +0 -0
- /package/{scaffolds → presets/default/docs/einja}/steering/development-workflow.md +0 -0
- /package/{scaffolds → presets/default/docs/einja}/steering/infrastructure/deployment.md +0 -0
- /package/{scaffolds → presets/default/docs/einja}/steering/product.md +0 -0
- /package/{scaffolds → presets/default/docs/einja}/steering/task-management.md +0 -0
- /package/{scaffolds → presets/default/docs/einja}/templates/design-simple.md.template +0 -0
- /package/{scaffolds → presets/default/docs/einja}/templates/design.md.template +0 -0
- /package/{scaffolds → presets/default/docs/einja}/templates/requirements.md.template +0 -0
|
@@ -0,0 +1,238 @@
|
|
|
1
|
+
---
|
|
2
|
+
description: "テンプレート同期を実行。dev-cli/create-einja-appのsyncをカテゴリ選択式で実行し、コンフリクトも自動解消します"
|
|
3
|
+
allowed-tools: Bash, AskUserQuestion, Read, Grep, Glob
|
|
4
|
+
---
|
|
5
|
+
|
|
6
|
+
# テンプレート同期コマンド
|
|
7
|
+
|
|
8
|
+
## コマンドの目的
|
|
9
|
+
|
|
10
|
+
`@einja/dev-cli sync` と `create-einja-app sync` をカテゴリ選択式で実行し、テンプレート更新をリポジトリに取り込む。コンフリクト発生時は対話的に解消する。
|
|
11
|
+
|
|
12
|
+
## 処理フロー
|
|
13
|
+
|
|
14
|
+
### Step 1: CLI検出
|
|
15
|
+
|
|
16
|
+
以下のコマンドで利用可能なCLIを検出する。
|
|
17
|
+
|
|
18
|
+
```bash
|
|
19
|
+
npx @einja/dev-cli --version 2>/dev/null
|
|
20
|
+
npx create-einja-app --version 2>/dev/null
|
|
21
|
+
```
|
|
22
|
+
|
|
23
|
+
| 検出結果 | 動作 |
|
|
24
|
+
|---------|------|
|
|
25
|
+
| 両方なし | エラーメッセージを表示して終了: `「@einja/dev-cli または create-einja-app が必要です。npm install @einja/dev-cli でインストールしてください。」` |
|
|
26
|
+
| dev-cli のみ | dev-cli カテゴリのみ表示 |
|
|
27
|
+
| create-einja-app のみ | create-app カテゴリのみ表示 |
|
|
28
|
+
| 両方あり | Step 2 の質問1で選択 |
|
|
29
|
+
|
|
30
|
+
### Step 2: カテゴリ選択(AskUserQuestion)
|
|
31
|
+
|
|
32
|
+
2段階で同期対象を選択する。
|
|
33
|
+
|
|
34
|
+
#### 質問1: 同期ソースの選択(両方利用可能な場合のみ)
|
|
35
|
+
|
|
36
|
+
```yaml
|
|
37
|
+
AskUserQuestion:
|
|
38
|
+
question: "どのCLIで同期しますか?"
|
|
39
|
+
header: "同期ソース選択"
|
|
40
|
+
options:
|
|
41
|
+
- label: "dev-cli のみ(Claude Code関連ファイル)"
|
|
42
|
+
description: ".claude/ 配下のcommands, agents, skills, hooks、docs/einja/、.envrc、.vscode/settings.json"
|
|
43
|
+
- label: "create-einja-app のみ(プロジェクトテンプレート)"
|
|
44
|
+
description: "biome.json, .gitignore, .github/, Dockerfile, turbo.json, package.json 等のプロジェクト基盤ファイル"
|
|
45
|
+
- label: "両方"
|
|
46
|
+
description: "dev-cli → create-einja-app の順で両方実行(推奨)"
|
|
47
|
+
```
|
|
48
|
+
|
|
49
|
+
片方のみ利用可能な場合はこの質問をスキップする。
|
|
50
|
+
|
|
51
|
+
#### 質問2: カテゴリ選択
|
|
52
|
+
|
|
53
|
+
選択されたCLIに応じて、対象カテゴリを選択する。AskUserQuestion の options は最大4つまでのため、以下の形式で提示する。
|
|
54
|
+
|
|
55
|
+
```yaml
|
|
56
|
+
AskUserQuestion:
|
|
57
|
+
question: "同期するカテゴリを選択してください"
|
|
58
|
+
header: "カテゴリ選択"
|
|
59
|
+
options:
|
|
60
|
+
- label: "全カテゴリ(デフォルト推奨)"
|
|
61
|
+
description: "apps, packages を除く全カテゴリを同期します。最も安全で推奨される選択です"
|
|
62
|
+
- label: "カスタム選択(除外カテゴリを指定)"
|
|
63
|
+
description: "特定のカテゴリを除外したい場合。次の入力で除外カテゴリをコンマ区切りで指定します"
|
|
64
|
+
```
|
|
65
|
+
|
|
66
|
+
**「カスタム選択」の場合**: 以下のカテゴリ一覧を表示し、除外したいカテゴリをコンマ区切りで入力してもらう。
|
|
67
|
+
|
|
68
|
+
**dev-cli カテゴリ一覧:**
|
|
69
|
+
|
|
70
|
+
| カテゴリ名 | 対象ファイル | デフォルト |
|
|
71
|
+
|-----------|-------------|-----------|
|
|
72
|
+
| `commands` | `.claude/commands/` | ON |
|
|
73
|
+
| `agents` | `.claude/agents/` | ON |
|
|
74
|
+
| `skills` | `.claude/skills/` | ON |
|
|
75
|
+
| `hooks` | `.claude/hooks/` | ON |
|
|
76
|
+
| `docs` | `docs/einja/` | ON |
|
|
77
|
+
| `env` | `.envrc` | ON |
|
|
78
|
+
| `tools` | `.vscode/settings.json` | ON |
|
|
79
|
+
|
|
80
|
+
**create-einja-app カテゴリ一覧:**
|
|
81
|
+
|
|
82
|
+
| カテゴリ名 | 対象ファイル | デフォルト |
|
|
83
|
+
|-----------|-------------|-----------|
|
|
84
|
+
| `env` | `.env*`, `.node-version` | ON |
|
|
85
|
+
| `tools` | `biome.json`, `.prettierrc`, `.editorconfig`(※ `.vscode/` はdev-cli管理のため除外) | ON |
|
|
86
|
+
| `git` | `.gitignore`, `.gitattributes` | ON |
|
|
87
|
+
| `git-hooks` | `.husky/` | ON |
|
|
88
|
+
| `github` | `.github/workflows/`, `.github/actions/` | ON |
|
|
89
|
+
| `docker` | `Dockerfile*`, `docker-compose*.yml` | ON |
|
|
90
|
+
| `monorepo` | `turbo.json`, `pnpm-workspace.yaml` | ON |
|
|
91
|
+
| `root-config` | `package.json`, `tsconfig.json` | ON |
|
|
92
|
+
| `scripts` | `scripts/` | ON |
|
|
93
|
+
| `docs` | `README.md`, `docs/` | ON |
|
|
94
|
+
| `apps` | `apps/**` | **OFF** |
|
|
95
|
+
| `packages` | `packages/**` | **OFF** |
|
|
96
|
+
|
|
97
|
+
> **重複に関する注意**: dev-cli の `tools` は `.vscode/settings.json` のみを管理し、create-einja-app の `tools` は `biome.json` 等を管理する。`.vscode/` 配下は dev-cli 側が管轄するため、create-einja-app の `tools` カテゴリでは `.vscode/` は対象外。
|
|
98
|
+
|
|
99
|
+
> **デフォルトOFFのカテゴリ**: `apps` と `packages` はデフォルトOFF。これらを同期に含めたい場合は、カスタム選択で明示的に追加する旨をユーザーに伝える(例: 「`+apps,+packages` のように `+` 付きで追加カテゴリを指定できます」)。
|
|
100
|
+
|
|
101
|
+
### Step 3: dry-run で差分プレビュー
|
|
102
|
+
|
|
103
|
+
選択されたカテゴリで dry-run を実行し、変更予定の差分をユーザーに表示する。
|
|
104
|
+
|
|
105
|
+
```bash
|
|
106
|
+
# dev-cli の場合
|
|
107
|
+
npx @einja/dev-cli sync --only <categories> --dry-run --yes
|
|
108
|
+
|
|
109
|
+
# create-einja-app の場合
|
|
110
|
+
npx create-einja-app sync --categories <categories> --dry-run
|
|
111
|
+
```
|
|
112
|
+
|
|
113
|
+
> **注**: 両CLIでカテゴリ指定のオプション名が異なる(dev-cli: `--only` / create-einja-app: `--categories`)
|
|
114
|
+
|
|
115
|
+
- `<categories>` はStep 2で選択されたカテゴリをコンマ区切りで渡す
|
|
116
|
+
- 差分がない場合は「変更はありません」と表示して該当CLIの処理をスキップ
|
|
117
|
+
- 差分がある場合はファイル一覧と変更内容をユーザーに提示
|
|
118
|
+
|
|
119
|
+
### Step 4: 実行確認 → sync実行
|
|
120
|
+
|
|
121
|
+
差分プレビューを見せた上で、ユーザーに実行可否を確認する。
|
|
122
|
+
|
|
123
|
+
```yaml
|
|
124
|
+
AskUserQuestion:
|
|
125
|
+
question: "上記の変更を適用しますか?"
|
|
126
|
+
header: "同期実行の確認"
|
|
127
|
+
options:
|
|
128
|
+
- label: "はい、実行する"
|
|
129
|
+
description: "表示された差分の通りにファイルを更新します"
|
|
130
|
+
- label: "いいえ、キャンセル"
|
|
131
|
+
description: "変更を適用せずに終了します"
|
|
132
|
+
```
|
|
133
|
+
|
|
134
|
+
**実行順序**: dev-cli を先に実行し、次に create-einja-app を実行する(dev-cli が Claude Code 設定を先に更新するため)。
|
|
135
|
+
|
|
136
|
+
```bash
|
|
137
|
+
# dev-cli
|
|
138
|
+
npx @einja/dev-cli sync --only <categories> --yes --json
|
|
139
|
+
|
|
140
|
+
# create-einja-app
|
|
141
|
+
npx create-einja-app sync --categories <categories>
|
|
142
|
+
```
|
|
143
|
+
|
|
144
|
+
- dev-cli は `--json` オプションで構造化出力を取得しパースする
|
|
145
|
+
- create-einja-app sync には `--yes` フラグがないが、`--categories` 指定時は対話プロンプトをスキップする
|
|
146
|
+
|
|
147
|
+
### Step 5: コンフリクト検出 → 手動解消サポート
|
|
148
|
+
|
|
149
|
+
sync 固有のコンフリクトを検出し、対話的に解消する(git コンフリクトとは異なる)。
|
|
150
|
+
|
|
151
|
+
#### コンフリクトの検出方法
|
|
152
|
+
|
|
153
|
+
| CLI | 検出方法 |
|
|
154
|
+
|-----|---------|
|
|
155
|
+
| dev-cli | JSON出力の `status: "partial_success"` かつ `conflicts > 0` |
|
|
156
|
+
| create-einja-app | 標準出力に「コンフリクト」文字列が含まれる |
|
|
157
|
+
|
|
158
|
+
#### コンフリクト解消フロー
|
|
159
|
+
|
|
160
|
+
1. **コンフリクトファイルの一覧を取得・表示**
|
|
161
|
+
- dev-cli: JSON出力の `conflicts` 配列からファイルパスを抽出
|
|
162
|
+
- create-einja-app: 標準出力から「コンフリクト」を含む行を抽出し、ファイルパスをパース
|
|
163
|
+
- 取得したファイルパスを表形式で一覧表示
|
|
164
|
+
|
|
165
|
+
2. **各ファイルの差分内容を確認**
|
|
166
|
+
- `Read` ツールでコンフリクトファイルの内容を読み込み、差分をユーザーに提示
|
|
167
|
+
|
|
168
|
+
3. **ユーザーに解決方針を確認**
|
|
169
|
+
|
|
170
|
+
```yaml
|
|
171
|
+
AskUserQuestion:
|
|
172
|
+
question: "コンフリクトの解決方針を選択してください"
|
|
173
|
+
header: "コンフリクト解決"
|
|
174
|
+
options:
|
|
175
|
+
- label: "テンプレート優先(リモートの最新版で上書き)"
|
|
176
|
+
description: "テンプレートの内容を採用し、ローカルのカスタマイズを破棄します"
|
|
177
|
+
- label: "ローカル優先(現在の内容を維持)"
|
|
178
|
+
description: "現在のローカルファイルを維持し、テンプレートの変更を破棄します"
|
|
179
|
+
- label: "手動マージ(1ファイルずつ確認)"
|
|
180
|
+
description: "各ファイルの差分を確認しながら、手動でマージ内容を決定します"
|
|
181
|
+
```
|
|
182
|
+
|
|
183
|
+
4. **方針に従って解消**
|
|
184
|
+
- テンプレート優先: dry-run出力やCLIのコンフリクト情報からテンプレート側の内容を特定し、`Edit` ツールで上書き
|
|
185
|
+
- ローカル優先: 現在の内容を維持(変更なし)
|
|
186
|
+
- 手動マージ: テンプレート内容とローカル内容を両方表示し、ユーザーと対話しながら `Edit` で編集
|
|
187
|
+
|
|
188
|
+
### Step 6: 結果サマリー表示
|
|
189
|
+
|
|
190
|
+
テーブル形式で同期結果の概要を表示する。
|
|
191
|
+
|
|
192
|
+
```markdown
|
|
193
|
+
## 同期結果サマリー
|
|
194
|
+
|
|
195
|
+
| CLI | 成功 | スキップ | コンフリクト |
|
|
196
|
+
|-----|------|---------|------------|
|
|
197
|
+
| dev-cli | 5 | 2 | 1 (解消済み) |
|
|
198
|
+
| create-einja-app | 8 | 3 | 0 |
|
|
199
|
+
| **合計** | **13** | **5** | **1** |
|
|
200
|
+
```
|
|
201
|
+
|
|
202
|
+
### Step 7: 結果詳細表示
|
|
203
|
+
|
|
204
|
+
各ファイルの詳細結果を以下の形式で表示する。
|
|
205
|
+
|
|
206
|
+
```markdown
|
|
207
|
+
### dev-cli sync 詳細
|
|
208
|
+
✓ .claude/commands/einja/task-exec.md (更新)
|
|
209
|
+
✓ .claude/skills/einja-coding-standards/SKILL.md (更新)
|
|
210
|
+
⏭ .claude/agents/einja/task-executer.md (変更なし)
|
|
211
|
+
⚠ .claude/hooks/einja/pre-commit.sh (コンフリクト → 解消済み)
|
|
212
|
+
|
|
213
|
+
### create-einja-app sync 詳細
|
|
214
|
+
✨ .github/workflows/ci.yml (新規)
|
|
215
|
+
✓ biome.json (更新)
|
|
216
|
+
⏭ .gitignore (変更なし)
|
|
217
|
+
```
|
|
218
|
+
|
|
219
|
+
**アイコンの意味:**
|
|
220
|
+
|
|
221
|
+
| アイコン | 意味 |
|
|
222
|
+
|---------|------|
|
|
223
|
+
| ✓ | 更新成功 |
|
|
224
|
+
| ✨ | 新規ファイル追加 |
|
|
225
|
+
| ⏭ | 変更なし(スキップ) |
|
|
226
|
+
| ⚠ | コンフリクト発生(解消済み) |
|
|
227
|
+
|
|
228
|
+
**パース方法:**
|
|
229
|
+
- dev-cli: `--json` 出力の `files` 配列をパースして各ファイルのステータスを表示。JSON形式が不正な場合は標準出力をそのまま表示
|
|
230
|
+
- create-einja-app: 標準出力から `✓` / `⚠️` / `スキップ` 行を抽出して表示。抽出できない場合は標準出力をそのまま表示
|
|
231
|
+
|
|
232
|
+
## 注意事項
|
|
233
|
+
|
|
234
|
+
- `npx` 経由で実行するため、利用者側に事前インストールは不要
|
|
235
|
+
- dev-cli は `.vscode/settings.json` を管理し、create-einja-app の `tools` カテゴリでは `.vscode/` 配下は対象外
|
|
236
|
+
- `apps` と `packages` カテゴリはデフォルト OFF。既存の実装コードを上書きするリスクがあるため、明示的な指定が必要
|
|
237
|
+
- コンフリクト解消は sync 固有のもので、git コンフリクトとは異なる。`einja-conflict-resolver` Skill は使用しない
|
|
238
|
+
- 両方のCLIを実行する場合、dev-cli を先に実行すること(Claude Code 設定が先に更新される必要があるため)
|
|
@@ -169,7 +169,7 @@ AskUserQuestion:
|
|
|
169
169
|
1. spec-qa-generatorエージェントで作成
|
|
170
170
|
- requirements.mdとdesign.mdの内容を参照
|
|
171
171
|
- **シナリオテスト(scenarios.md)**: 複数タスクをまたぐ継続操作フローのテスト仕様
|
|
172
|
-
-
|
|
172
|
+
- **Story別テスト仕様**: 各ユーザーストーリー(AC単位)のテスト仕様
|
|
173
173
|
- 受け入れ基準(AC)との対応付け
|
|
174
174
|
2. **ユーザーに内容確認を依頼**
|
|
175
175
|
- 作成したqa-tests/ディレクトリの構成と概要を提示
|
|
@@ -283,7 +283,9 @@ AskUserQuestion:
|
|
|
283
283
|
├── design.md # 設計書(技術詳細)
|
|
284
284
|
└── qa-tests/ # QAテスト仕様
|
|
285
285
|
├── scenarios.md # シナリオテスト(複数タスクをまたぐフロー)
|
|
286
|
-
|
|
286
|
+
├── story{N}.md # 各ストーリーのテスト仕様(AC単位)
|
|
287
|
+
└── evidence/ # エビデンス(スクリーンショット等)
|
|
288
|
+
└── story{N}/ # ストーリー別
|
|
287
289
|
|
|
288
290
|
(注: タスク一覧はGitHub Issueに記述)
|
|
289
291
|
```
|
|
@@ -305,7 +307,9 @@ AskUserQuestion:
|
|
|
305
307
|
│ └── quality.md # 品質と運用
|
|
306
308
|
└── qa-tests/ # QAテスト仕様
|
|
307
309
|
├── scenarios.md # シナリオテスト(複数タスクをまたぐフロー)
|
|
308
|
-
|
|
310
|
+
├── story{N}.md # 各ストーリーのテスト仕様(AC単位)
|
|
311
|
+
└── evidence/ # エビデンス(スクリーンショット等)
|
|
312
|
+
└── story{N}/ # ストーリー別
|
|
309
313
|
|
|
310
314
|
(注: タスク一覧はGitHub Issueに記述)
|
|
311
315
|
```
|
|
@@ -212,7 +212,7 @@ Issue #123 のPhase 99 タスク(タスクグループ 99.1)を実行して
|
|
|
212
212
|
- 各 AC に対して、Given/When/Then に基づくテストシナリオを作成
|
|
213
213
|
- Integration: API + DB + ミドルウェアの連携テスト
|
|
214
214
|
- Browser: Playwright MCP を使用したユーザーシナリオテスト
|
|
215
|
-
- QA 仕様書(`qa-tests/
|
|
215
|
+
- QA 仕様書(`qa-tests/story{N}.md`)に記録
|
|
216
216
|
|
|
217
217
|
3. **SUCCESS 判定基準**
|
|
218
218
|
- **検証レベルが「Integration」「Browser」の全ての AC が満たされた場合のみ**、SUCCESS 判定
|
|
@@ -272,11 +272,11 @@ task-qa は以下の基準で失敗原因を分類し、適切な戻し先を決
|
|
|
272
272
|
|
|
273
273
|
## QA仕様書の作成・更新フロー
|
|
274
274
|
|
|
275
|
-
### 初回実行時(qa-tests/
|
|
275
|
+
### 初回実行時(qa-tests/story{N}.md が存在しない場合)
|
|
276
276
|
|
|
277
277
|
1. **ファイルの新規作成**
|
|
278
|
-
-
|
|
279
|
-
- 例:
|
|
278
|
+
- タスクメタデータの「実装AC」からストーリー番号を特定し、`qa-tests/story{N}.md` を新規作成
|
|
279
|
+
- 例: 実装AC が AC1.1, AC1.2 → `qa-tests/story1.md`
|
|
280
280
|
|
|
281
281
|
2. **受け入れ基準の抽出**
|
|
282
282
|
- `requirements.md` の各ユーザーストーリー配下の「受け入れ基準」セクションから各ACを抽出
|
|
@@ -303,10 +303,10 @@ task-qa は以下の基準で失敗原因を分類し、適切な戻し先を決
|
|
|
303
303
|
**ステータス: [✅ SUCCESS / ❌ FAILURE / ⚠️ PARTIAL]**
|
|
304
304
|
```
|
|
305
305
|
|
|
306
|
-
### 2回目以降の実行時(qa-tests/
|
|
306
|
+
### 2回目以降の実行時(qa-tests/story{N}.md が既に存在する場合)
|
|
307
307
|
|
|
308
308
|
1. **既存ファイルの読み込み**
|
|
309
|
-
- `qa-tests/
|
|
309
|
+
- `qa-tests/story{N}.md` を読み込む
|
|
310
310
|
|
|
311
311
|
2. **更新対象の特定**
|
|
312
312
|
- 「実施結果」セクションのみを更新対象とする
|
|
@@ -30,9 +30,10 @@ description: "TypeScript/React/Next.jsのコーディング規約とベストプ
|
|
|
30
30
|
|
|
31
31
|
各カテゴリの詳細な規約は以下を参照してください:
|
|
32
32
|
|
|
33
|
-
- [TypeScript規約](./
|
|
34
|
-
- [命名規則](./
|
|
35
|
-
- [禁止事項](./
|
|
33
|
+
- [TypeScript規約](./references/typescript-rules.md) - 型安全性、型定義、禁止事項
|
|
34
|
+
- [命名規則](./references/naming-conventions.md) - 変数・関数・型の命名規則
|
|
35
|
+
- [禁止事項](./references/prohibited-patterns.md) - 絶対に使用禁止のパターン
|
|
36
|
+
- [インポートパス規約](./references/import-conventions.md) - パッケージ間・アプリ内のインポートルール
|
|
36
37
|
|
|
37
38
|
## クイックリファレンス
|
|
38
39
|
|
package/presets/default/.claude/skills/einja-coding-standards/references/import-conventions.md
ADDED
|
@@ -0,0 +1,69 @@
|
|
|
1
|
+
# インポートパスの規約
|
|
2
|
+
|
|
3
|
+
## パッケージ間のインポート
|
|
4
|
+
|
|
5
|
+
```typescript
|
|
6
|
+
// 認証機能(共通設定)
|
|
7
|
+
import { baseAuthOptions, mergeAuthOptions } from "@repo/front-core/auth";
|
|
8
|
+
|
|
9
|
+
// 認証機能(アプリローカル)
|
|
10
|
+
import { auth, signIn, signOut } from "@/lib/auth";
|
|
11
|
+
import { requireAuth, withAuth } from "@/lib/auth/guard";
|
|
12
|
+
|
|
13
|
+
// データベース
|
|
14
|
+
import { prisma } from "@repo/server-core";
|
|
15
|
+
|
|
16
|
+
// UIコンポーネント
|
|
17
|
+
import { Button } from "@repo/ui/button";
|
|
18
|
+
import { Card } from "@repo/ui/card";
|
|
19
|
+
import { cn } from "@repo/ui/utils";
|
|
20
|
+
|
|
21
|
+
// 型定義
|
|
22
|
+
import type { Session } from "next-auth"; // 型拡張はfront-coreで定義済み
|
|
23
|
+
```
|
|
24
|
+
|
|
25
|
+
## アプリ内のインポート
|
|
26
|
+
|
|
27
|
+
```typescript
|
|
28
|
+
// apps/web内では従来通り@/を使用
|
|
29
|
+
import { Component } from "@/components/...";
|
|
30
|
+
import { helper } from "@/lib/...";
|
|
31
|
+
```
|
|
32
|
+
|
|
33
|
+
## 認証設定のパターン
|
|
34
|
+
|
|
35
|
+
アプリ固有の認証設定は `@/lib/auth/index.ts` で `baseAuthOptions` を拡張します:
|
|
36
|
+
|
|
37
|
+
```typescript
|
|
38
|
+
import { baseAuthOptions, mergeAuthOptions } from "@repo/front-core/auth";
|
|
39
|
+
import NextAuth from "next-auth";
|
|
40
|
+
|
|
41
|
+
const authOptions = mergeAuthOptions(baseAuthOptions, {
|
|
42
|
+
pages: { signIn: "/signin" }, // アプリ固有
|
|
43
|
+
callbacks: {
|
|
44
|
+
async redirect({ url, baseUrl }) {
|
|
45
|
+
// アプリ固有のリダイレクトロジック
|
|
46
|
+
},
|
|
47
|
+
},
|
|
48
|
+
});
|
|
49
|
+
|
|
50
|
+
export const { handlers, signIn, signOut, auth } = NextAuth(authOptions);
|
|
51
|
+
```
|
|
52
|
+
|
|
53
|
+
## インポート順序
|
|
54
|
+
|
|
55
|
+
インポート文は以下の順序で記述してください:
|
|
56
|
+
|
|
57
|
+
1. **Node.js標準ライブラリ**
|
|
58
|
+
2. **外部ライブラリ**
|
|
59
|
+
3. **内部パッケージ** (`@repo/*`)
|
|
60
|
+
4. **アプリ内インポート** (`@/`, `@web/`, `@admin/` 等)
|
|
61
|
+
5. **相対インポート**
|
|
62
|
+
|
|
63
|
+
各グループ間には空行を入れてください。
|
|
64
|
+
|
|
65
|
+
## 禁止事項
|
|
66
|
+
|
|
67
|
+
- **相対パスの使用禁止**: import文で `../` や `./` を使用しない(CSS importやindex.tsからの同階層re-exportを除く)
|
|
68
|
+
- 必ずアプリ固有エイリアス(`@web/*`, `@admin/*` 等)またはパッケージ名(`@repo/server-core` 等)を使用すること
|
|
69
|
+
- **index.ts不使用**: パッケージエクスポートにindex.tsは使わず、直接ファイルパスを指定する(`@repo/server-core/infrastructure/database/client` 等)
|
|
@@ -32,9 +32,9 @@ description: "Reactコンポーネントの設計原則と実装ガイドライ
|
|
|
32
32
|
|
|
33
33
|
各カテゴリの詳細な規約は以下を参照してください:
|
|
34
34
|
|
|
35
|
-
- [ディレクトリ構造](./
|
|
36
|
-
- [Props設計パターン](./
|
|
37
|
-
- [スタイリングガイド](./
|
|
35
|
+
- [ディレクトリ構造](./references/directory-structure.md) - ファイル配置とディレクトリ設計
|
|
36
|
+
- [Props設計パターン](./references/props-patterns.md) - Props設計とイベントハンドリング
|
|
37
|
+
- [スタイリングガイド](./references/styling-guide.md) - Tailwind CSSを使用したスタイリング規約
|
|
38
38
|
|
|
39
39
|
## クイックリファレンス
|
|
40
40
|
|
|
@@ -0,0 +1,35 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: project-overview
|
|
3
|
+
description: "プロジェクトの全体構成・技術スタックの参照ハブ"
|
|
4
|
+
---
|
|
5
|
+
|
|
6
|
+
# プロジェクト概要 Skill
|
|
7
|
+
|
|
8
|
+
## 概要
|
|
9
|
+
|
|
10
|
+
このSkillは、プロジェクトの全体構成・技術スタックを把握したいときに参照するエントリポイントです。
|
|
11
|
+
|
|
12
|
+
## プロジェクト概要
|
|
13
|
+
|
|
14
|
+
- **構成**: Turborepoモノレポ(pnpm workspaces)
|
|
15
|
+
- **アプリ**: `apps/web`(メイン管理画面)
|
|
16
|
+
- **共通パッケージ**: `@repo/config`, `@repo/front-core`, `@repo/server-core`, `@repo/ui`
|
|
17
|
+
|
|
18
|
+
## 詳細ドキュメント
|
|
19
|
+
|
|
20
|
+
@docs/einja/steering/architecture.md
|
|
21
|
+
|
|
22
|
+
## 関連Skill
|
|
23
|
+
|
|
24
|
+
- [coding-standards](../einja-coding-standards/SKILL.md) - コーディング規約(インポートパス規約含む)
|
|
25
|
+
- [infra-maintenance](../einja-infra-maintenance/SKILL.md) - 開発環境セットアップ・サーバー管理
|
|
26
|
+
- [component-design](../einja-component-design/SKILL.md) - コンポーネント設計ガイドライン
|
|
27
|
+
|
|
28
|
+
## 頻出コマンド
|
|
29
|
+
|
|
30
|
+
- `pnpm dev:bg` / `pnpm dev:stop` - 開発サーバー起動/停止
|
|
31
|
+
- `pnpm build` - プロダクションビルド
|
|
32
|
+
- `pnpm lint:fix && pnpm format:fix` - コード自動修正
|
|
33
|
+
- `pnpm typecheck` - 型チェック
|
|
34
|
+
- `pnpm test` - テスト実行
|
|
35
|
+
- `pnpm prepush` - プッシュ前チェック(lint + typecheck + test)
|