@einja/dev-cli 0.1.9 → 0.1.11
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 +30 -2
- package/dist/cli.js +3 -6
- package/dist/cli.js.map +1 -1
- package/dist/commands/init.d.ts.map +1 -1
- package/dist/commands/init.js +11 -6
- package/dist/commands/init.js.map +1 -1
- package/dist/commands/list.js +1 -1
- package/dist/commands/list.js.map +1 -1
- package/dist/commands/sync.d.ts.map +1 -1
- package/dist/commands/sync.js +69 -7
- package/dist/commands/sync.js.map +1 -1
- package/dist/commands/sync.test.js +11 -25
- package/dist/commands/sync.test.js.map +1 -1
- package/dist/commands/task-loop/index.d.ts.map +1 -1
- package/dist/commands/task-loop/index.js +5 -2
- package/dist/commands/task-loop/index.js.map +1 -1
- package/dist/commands/task-loop/lib/__mocks__/child-process.mock.d.ts +227 -0
- package/dist/commands/task-loop/lib/__mocks__/child-process.mock.d.ts.map +1 -0
- package/dist/commands/task-loop/lib/__mocks__/child-process.mock.js +351 -0
- package/dist/commands/task-loop/lib/__mocks__/child-process.mock.js.map +1 -0
- package/dist/commands/task-loop/lib/__mocks__/sample-issues.d.ts +46 -0
- package/dist/commands/task-loop/lib/__mocks__/sample-issues.d.ts.map +1 -0
- package/dist/commands/task-loop/lib/__mocks__/sample-issues.js +224 -0
- package/dist/commands/task-loop/lib/__mocks__/sample-issues.js.map +1 -0
- package/dist/commands/task-loop/lib/branch-manager.d.ts.map +1 -1
- package/dist/commands/task-loop/lib/branch-manager.js +14 -8
- package/dist/commands/task-loop/lib/branch-manager.js.map +1 -1
- package/dist/commands/task-loop/lib/branch-manager.test.d.ts +2 -0
- package/dist/commands/task-loop/lib/branch-manager.test.d.ts.map +1 -0
- package/dist/commands/task-loop/lib/branch-manager.test.js +539 -0
- package/dist/commands/task-loop/lib/branch-manager.test.js.map +1 -0
- package/dist/commands/task-loop/lib/conflict-handler.js +1 -1
- package/dist/commands/task-loop/lib/conflict-handler.js.map +1 -1
- package/dist/commands/task-loop/lib/dependency-resolver.test.d.ts +2 -0
- package/dist/commands/task-loop/lib/dependency-resolver.test.d.ts.map +1 -0
- package/dist/commands/task-loop/lib/dependency-resolver.test.js +1129 -0
- package/dist/commands/task-loop/lib/dependency-resolver.test.js.map +1 -0
- package/dist/commands/task-loop/lib/gh-setup.d.ts.map +1 -1
- package/dist/commands/task-loop/lib/gh-setup.js.map +1 -1
- package/dist/commands/task-loop/lib/github-client.d.ts.map +1 -1
- package/dist/commands/task-loop/lib/github-client.js +3 -3
- package/dist/commands/task-loop/lib/github-client.js.map +1 -1
- package/dist/commands/task-loop/lib/github-client.test.d.ts +2 -0
- package/dist/commands/task-loop/lib/github-client.test.d.ts.map +1 -0
- package/dist/commands/task-loop/lib/github-client.test.js +377 -0
- package/dist/commands/task-loop/lib/github-client.test.js.map +1 -0
- package/dist/commands/task-loop/lib/issue-parser.js +4 -4
- package/dist/commands/task-loop/lib/issue-parser.js.map +1 -1
- package/dist/commands/task-loop/lib/issue-parser.test.d.ts +2 -0
- package/dist/commands/task-loop/lib/issue-parser.test.d.ts.map +1 -0
- package/dist/commands/task-loop/lib/issue-parser.test.js +854 -0
- package/dist/commands/task-loop/lib/issue-parser.test.js.map +1 -0
- package/dist/commands/task-loop/lib/pull-request-manager.d.ts +35 -0
- package/dist/commands/task-loop/lib/pull-request-manager.d.ts.map +1 -0
- package/dist/commands/task-loop/lib/pull-request-manager.js +150 -0
- package/dist/commands/task-loop/lib/pull-request-manager.js.map +1 -0
- package/dist/commands/task-loop/lib/task-number-utils.d.ts +10 -4
- package/dist/commands/task-loop/lib/task-number-utils.d.ts.map +1 -1
- package/dist/commands/task-loop/lib/task-number-utils.js +19 -10
- package/dist/commands/task-loop/lib/task-number-utils.js.map +1 -1
- package/dist/commands/task-loop/lib/task-number-utils.test.d.ts +2 -0
- package/dist/commands/task-loop/lib/task-number-utils.test.d.ts.map +1 -0
- package/dist/commands/task-loop/lib/task-number-utils.test.js +379 -0
- package/dist/commands/task-loop/lib/task-number-utils.test.js.map +1 -0
- package/dist/commands/task-loop/lib/task-state-manager.d.ts.map +1 -1
- package/dist/commands/task-loop/lib/task-state-manager.js +1 -1
- package/dist/commands/task-loop/lib/task-state-manager.js.map +1 -1
- package/dist/commands/task-loop/lib/task-state-manager.test.d.ts +2 -0
- package/dist/commands/task-loop/lib/task-state-manager.test.d.ts.map +1 -0
- package/dist/commands/task-loop/lib/task-state-manager.test.js +541 -0
- package/dist/commands/task-loop/lib/task-state-manager.test.js.map +1 -0
- package/dist/lib/file-system.js +1 -1
- package/dist/lib/file-system.js.map +1 -1
- package/dist/lib/mcp-config.d.ts.map +1 -1
- package/dist/lib/mcp-config.js +8 -4
- 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.map +1 -1
- package/dist/lib/preset-update/cli-repo-detector.test.js.map +1 -1
- package/dist/lib/preset-update/file-copier.d.ts +2 -0
- package/dist/lib/preset-update/file-copier.d.ts.map +1 -1
- package/dist/lib/preset-update/file-copier.js +12 -8
- package/dist/lib/preset-update/file-copier.js.map +1 -1
- package/dist/lib/preset-update/file-copier.test.js +36 -5
- package/dist/lib/preset-update/file-copier.test.js.map +1 -1
- package/dist/lib/preset-update/preset-finder.d.ts +1 -1
- package/dist/lib/preset-update/preset-finder.d.ts.map +1 -1
- package/dist/lib/preset-update/preset-finder.js +1 -1
- package/dist/lib/preset-update/preset-finder.js.map +1 -1
- package/dist/lib/preset-update/preset-finder.test.js +11 -11
- package/dist/lib/preset-update/preset-finder.test.js.map +1 -1
- package/dist/lib/preset.js +3 -3
- package/dist/lib/preset.js.map +1 -1
- package/dist/lib/sync/backup-manager.d.ts.map +1 -1
- package/dist/lib/sync/backup-manager.js +1 -1
- package/dist/lib/sync/backup-manager.js.map +1 -1
- package/dist/lib/sync/backup-manager.test.js +2 -2
- package/dist/lib/sync/backup-manager.test.js.map +1 -1
- package/dist/lib/sync/batch-processor.d.ts.map +1 -1
- package/dist/lib/sync/batch-processor.js.map +1 -1
- package/dist/lib/sync/batch-processor.test.js.map +1 -1
- package/dist/lib/sync/category-validator.d.ts.map +1 -1
- package/dist/lib/sync/category-validator.js.map +1 -1
- package/dist/lib/sync/category-validator.test.js +2 -11
- package/dist/lib/sync/category-validator.test.js.map +1 -1
- package/dist/lib/sync/conflict-reporter.d.ts.map +1 -1
- package/dist/lib/sync/conflict-reporter.js +1 -2
- package/dist/lib/sync/conflict-reporter.js.map +1 -1
- package/dist/lib/sync/conflict-reporter.test.js +2 -7
- package/dist/lib/sync/conflict-reporter.test.js.map +1 -1
- package/dist/lib/sync/diff-engine.d.ts.map +1 -1
- package/dist/lib/sync/diff-engine.js +2 -4
- package/dist/lib/sync/diff-engine.js.map +1 -1
- package/dist/lib/sync/diff-engine.test.js.map +1 -1
- package/dist/lib/sync/file-filter.d.ts.map +1 -1
- package/dist/lib/sync/file-filter.js +26 -3
- package/dist/lib/sync/file-filter.js.map +1 -1
- package/dist/lib/sync/file-filter.test.js +26 -2
- package/dist/lib/sync/file-filter.test.js.map +1 -1
- package/dist/lib/sync/hash-cache.d.ts.map +1 -1
- package/dist/lib/sync/hash-cache.js.map +1 -1
- package/dist/lib/sync/hash-cache.test.js +2 -2
- package/dist/lib/sync/hash-cache.test.js.map +1 -1
- package/dist/lib/sync/integration.test.js +289 -2
- package/dist/lib/sync/integration.test.js.map +1 -1
- package/dist/lib/sync/marker-processor.d.ts +34 -10
- package/dist/lib/sync/marker-processor.d.ts.map +1 -1
- package/dist/lib/sync/marker-processor.js +142 -41
- package/dist/lib/sync/marker-processor.js.map +1 -1
- package/dist/lib/sync/marker-processor.test.js +134 -1
- package/dist/lib/sync/marker-processor.test.js.map +1 -1
- package/dist/lib/sync/metadata-manager.d.ts.map +1 -1
- package/dist/lib/sync/metadata-manager.js.map +1 -1
- package/dist/lib/sync/metadata-manager.test.js +4 -6
- package/dist/lib/sync/metadata-manager.test.js.map +1 -1
- package/dist/lib/sync/performance.test.js +2 -2
- package/dist/lib/sync/performance.test.js.map +1 -1
- package/dist/lib/sync/seed-synchronizer.d.ts +27 -0
- package/dist/lib/sync/seed-synchronizer.d.ts.map +1 -0
- package/dist/lib/sync/seed-synchronizer.js +72 -0
- package/dist/lib/sync/seed-synchronizer.js.map +1 -0
- package/dist/lib/sync/seed-synchronizer.test.d.ts +2 -0
- package/dist/lib/sync/seed-synchronizer.test.d.ts.map +1 -0
- package/dist/lib/sync/seed-synchronizer.test.js +147 -0
- package/dist/lib/sync/seed-synchronizer.test.js.map +1 -0
- package/dist/types/index.d.ts.map +1 -1
- package/dist/types/preset-update.d.ts +1 -1
- package/dist/types/sync.d.ts +4 -2
- package/dist/types/sync.d.ts.map +1 -1
- package/dist/types/sync.js.map +1 -1
- package/package.json +1 -2
- package/presets/default/.claude/agents/einja/backend-architect.md +1131 -0
- package/presets/{minimal/.claude/agents/einja/frontend → default/.claude/agents/einja}/design-engineer.md +1 -1
- package/presets/{minimal/.claude/agents/einja/frontend → default/.claude/agents/einja}/frontend-architect.md +1 -1
- package/presets/{minimal/.claude/agents/einja/frontend → default/.claude/agents/einja}/frontend-coder.md +1 -37
- package/presets/{minimal → default}/.claude/agents/einja/task/task-committer.md +12 -6
- package/presets/{minimal → default}/.claude/agents/einja/task/task-executer.md +9 -9
- package/presets/{minimal → default}/.claude/commands/einja/frontend-implement.md +1 -1
- package/presets/{minimal → default}/.claude/commands/einja/update-docs-by-task-specs.md +6 -6
- package/presets/{minimal/.claude/skills/einja/api-development → default/.claude/skills/einja-api-development}/SKILL.md +5 -5
- package/presets/{minimal/.claude/skills/einja/backend-architecture → default/.claude/skills/einja-backend-architecture}/SKILL.md +5 -5
- package/presets/{minimal/.claude/skills/einja/coding-standards → default/.claude/skills/einja-coding-standards}/SKILL.md +6 -6
- package/presets/{minimal/.claude/skills/einja/component-design → default/.claude/skills/einja-component-design}/SKILL.md +6 -6
- package/presets/{minimal/.claude/skills/einja/frontend-development → default/.claude/skills/einja-frontend-development}/SKILL.md +5 -5
- package/presets/{minimal/.claude/skills/einja/output-format → default/.claude/skills/einja-output-format}/SKILL.md +54 -5
- package/presets/{minimal → default}/preset.yaml +1 -1
- package/presets/{minimal → default}/symlinks.json +10 -10
- package/scaffolds/cli/preset.yaml +110 -0
- package/scaffolds/example/README.md +35 -0
- package/scaffolds/example/specs/issues/issue999-example-task/design.md +879 -0
- package/scaffolds/example/specs/issues/issue999-example-task/qa-tests/README.md +150 -0
- package/scaffolds/example/specs/issues/issue999-example-task/qa-tests/phase1/1-1.md +268 -0
- package/scaffolds/example/specs/issues/issue999-example-task/qa-tests/phase1/1-2.md +179 -0
- package/scaffolds/example/specs/issues/issue999-example-task/qa-tests/phase1/1-3.md +392 -0
- package/scaffolds/example/specs/issues/issue999-example-task/qa-tests/phase1/evidence/.gitkeep +0 -0
- package/scaffolds/example/specs/issues/issue999-example-task/qa-tests/phase2/2-1.md +459 -0
- package/scaffolds/example/specs/issues/issue999-example-task/qa-tests/phase2/evidence/.gitkeep +0 -0
- package/scaffolds/example/specs/issues/issue999-example-task/qa-tests/scenarios.md +125 -0
- package/scaffolds/example/specs/issues/issue999-example-task/requirements.md +494 -0
- package/scaffolds/example/specs/issues/issue999-example-task/tasks.md +212 -0
- package/scaffolds/instructions/deployment-setup.md +458 -0
- package/scaffolds/instructions/environment-setup.md +509 -0
- package/scaffolds/instructions/local-server-environment-and-worktree.md +539 -0
- package/scaffolds/instructions/task-execute.md +649 -0
- package/scaffolds/instructions/task-vibe-kanban-loop.md +495 -0
- package/scaffolds/memory/archive/.gitkeep +0 -0
- package/scaffolds/memory/decisions.md +35 -0
- package/scaffolds/memory/patterns.md +37 -0
- package/scaffolds/steering/README.md +42 -0
- package/scaffolds/steering/acceptance-criteria-and-qa-guide.md +11 -0
- package/scaffolds/steering/architecture.md +11 -0
- package/scaffolds/steering/branch-strategy.md +11 -0
- package/scaffolds/steering/commit-rules.md +12 -1
- package/scaffolds/steering/db-schema-design.md +11 -0
- package/scaffolds/steering/development/api-development.md +15 -4
- package/scaffolds/steering/development/backend-architecture.md +11 -0
- package/scaffolds/steering/development/frontend-development.md +11 -0
- package/scaffolds/steering/development/review-guidelines.md +11 -0
- package/scaffolds/steering/development/testing-strategy.md +85 -0
- package/scaffolds/steering/development-workflow.md +11 -0
- package/scaffolds/steering/infrastructure/deployment.md +11 -0
- package/scaffolds/steering/infrastructure/environment-variables.md +11 -0
- package/scaffolds/steering/product.md +11 -0
- package/scaffolds/steering/task-management.md +11 -0
- package/scaffolds/CLAUDE.md.template +0 -386
- /package/presets/{minimal → default}/.claude/agents/einja/docs/docs-updater.md +0 -0
- /package/presets/{minimal → default}/.claude/agents/einja/git/conflict-resolver.md +0 -0
- /package/presets/{minimal → default}/.claude/agents/einja/specs/spec-design-generator.md +0 -0
- /package/presets/{minimal → default}/.claude/agents/einja/specs/spec-qa-generator.md +0 -0
- /package/presets/{minimal → default}/.claude/agents/einja/specs/spec-requirements-generator.md +0 -0
- /package/presets/{minimal → default}/.claude/agents/einja/specs/spec-tasks-generator.md +0 -0
- /package/presets/{minimal → default}/.claude/agents/einja/task/task-modification-analyzer.md +0 -0
- /package/presets/{minimal → default}/.claude/agents/einja/task/task-qa.md +0 -0
- /package/presets/{minimal → default}/.claude/agents/einja/task/task-reviewer.md +0 -0
- /package/presets/{minimal → default}/.claude/commands/einja/spec-create.md +0 -0
- /package/presets/{minimal → default}/.claude/commands/einja/start-dev.md +0 -0
- /package/presets/{minimal → default}/.claude/commands/einja/sync-cursor-commands.md +0 -0
- /package/presets/{minimal → default}/.claude/commands/einja/task-exec.md +0 -0
- /package/presets/{minimal → default}/.claude/hooks/einja/biome-format.sh +0 -0
- /package/presets/{minimal → default}/.claude/hooks/einja/design-doc-check.sh +0 -0
- /package/presets/{minimal → default}/.claude/hooks/einja/detect-secrets.sh +0 -0
- /package/presets/{minimal → default}/.claude/hooks/einja/large-file-warning.sh +0 -0
- /package/presets/{minimal → default}/.claude/hooks/einja/playwright-resize.sh +0 -0
- /package/presets/{minimal → default}/.claude/hooks/einja/typecheck.sh +0 -0
- /package/presets/{minimal → default}/.claude/hooks/einja/unset-volta-recursion.sh +0 -0
- /package/presets/{minimal → default}/.claude/hooks/einja/validate-git-commit.sh +0 -0
- /package/presets/{minimal → default}/.claude/hooks/einja/warn-index-ts.sh +0 -0
- /package/presets/{minimal → default}/.claude/hooks/einja/warn-relative-import.sh +0 -0
- /package/presets/{minimal → default}/.claude/settings.json +0 -0
- /package/presets/{minimal/.claude/skills/einja/coding-standards → default/.claude/skills/einja-coding-standards}/reference/naming-conventions.md +0 -0
- /package/presets/{minimal/.claude/skills/einja/coding-standards → default/.claude/skills/einja-coding-standards}/reference/prohibited-patterns.md +0 -0
- /package/presets/{minimal/.claude/skills/einja/coding-standards → default/.claude/skills/einja-coding-standards}/reference/typescript-rules.md +0 -0
- /package/presets/{minimal/.claude/skills/einja/component-design → default/.claude/skills/einja-component-design}/reference/directory-structure.md +0 -0
- /package/presets/{minimal/.claude/skills/einja/component-design → default/.claude/skills/einja-component-design}/reference/props-patterns.md +0 -0
- /package/presets/{minimal/.claude/skills/einja/component-design → default/.claude/skills/einja-component-design}/reference/styling-guide.md +0 -0
- /package/presets/{minimal/.claude/skills/einja/conflict-resolver → default/.claude/skills/einja-conflict-resolver}/SKILL.md +0 -0
- /package/presets/{minimal/.claude/skills/einja/general-context-loader → default/.claude/skills/einja-general-context-loader}/SKILL.md +0 -0
- /package/presets/{minimal/.claude/skills/einja/spec-context-loader → default/.claude/skills/einja-spec-context-loader}/SKILL.md +0 -0
- /package/presets/{minimal/.claude/skills/einja/task-commit → default/.claude/skills/einja-task-commit}/SKILL.md +0 -0
- /package/presets/{minimal/.claude/skills/einja/task-qa → default/.claude/skills/einja-task-qa}/SKILL.md +0 -0
- /package/presets/{minimal/.claude/skills/einja/task-qa → default/.claude/skills/einja-task-qa}/reference/failure-patterns.md +0 -0
- /package/presets/{minimal/.claude/skills/einja/task-qa → default/.claude/skills/einja-task-qa}/reference/troubleshooting.md +0 -0
- /package/presets/{minimal/.claude/skills/einja/task-qa → default/.claude/skills/einja-task-qa}/reference/usage-patterns.md +0 -0
- /package/presets/{minimal/.claude/skills/einja/task-qa → default/.claude/skills/einja-task-qa}/templates/qa-test-template.md +0 -0
- /package/{templates → scaffolds/templates}/README.md +0 -0
- /package/{templates → scaffolds/templates}/design-simple.md.template +0 -0
- /package/{templates → scaffolds/templates}/design.md.template +0 -0
- /package/{templates → scaffolds/templates}/qa-test.md.template +0 -0
- /package/{templates → scaffolds/templates}/requirements.md.template +0 -0
|
@@ -0,0 +1,649 @@
|
|
|
1
|
+
<!-- @einja:managed:start -->
|
|
2
|
+
# 開発ワークフロー
|
|
3
|
+
|
|
4
|
+
このドキュメントでは、`/spec-create`と`/task-exec`コマンドを使用したATDD(受け入れテスト駆動開発)に基づく開発ワークフローについて説明します。
|
|
5
|
+
|
|
6
|
+
## 概要
|
|
7
|
+
|
|
8
|
+
開発プロセスは2つの主要なコマンドで構成されています:
|
|
9
|
+
|
|
10
|
+
1. **`/spec-create`**: 仕様書の作成(要件定義 → 設計 → GitHub Issueへのタスク記述)
|
|
11
|
+
2. **`/task-exec`**: タスクの実行(選定 → 実装 → レビュー → QA → 完了)
|
|
12
|
+
|
|
13
|
+
## 全体フロー図
|
|
14
|
+
|
|
15
|
+
### フェーズ1: 仕様書作成 (`/spec-create`)
|
|
16
|
+
|
|
17
|
+
```mermaid
|
|
18
|
+
graph TD
|
|
19
|
+
A[入力: Asanaタスク / 機能説明 / Figma URL] --> B[外部リソース確認]
|
|
20
|
+
B --> C{AsanaタスクURL?}
|
|
21
|
+
C -->|Yes| D[AsanaMCP: タスク情報取得]
|
|
22
|
+
C -->|No| E[機能説明を解析]
|
|
23
|
+
B --> F{FigmaURL?}
|
|
24
|
+
F -->|Yes| G[FigmaDevModeMCP: デザイン分析]
|
|
25
|
+
F -->|No| H[出力ディレクトリ決定]
|
|
26
|
+
D --> H
|
|
27
|
+
E --> H
|
|
28
|
+
G --> H
|
|
29
|
+
|
|
30
|
+
H --> I["requirements.md 作成 (spec-requirements-generator)"]
|
|
31
|
+
I --> J["ユーザーストーリー / 受け入れ基準ATDD形式 / 既存コード分析"]
|
|
32
|
+
J --> K{ユーザー承認}
|
|
33
|
+
K -->|承認| L["design.md 作成 (spec-design-generator)"]
|
|
34
|
+
K -->|修正依頼| I
|
|
35
|
+
|
|
36
|
+
L --> M["技術アーキテクチャ / データモデル設計 / API仕様"]
|
|
37
|
+
M --> N{ユーザー承認}
|
|
38
|
+
N -->|承認| O["GitHub Issueにタスク記述 (spec-tasks-generator)"]
|
|
39
|
+
N -->|修正依頼| L
|
|
40
|
+
|
|
41
|
+
O --> P["実装タスク分解 / 依存関係管理 / 優先順位設定"]
|
|
42
|
+
P --> Q["出力: /docs/specs/issues/{domain}/issue{番号}-{feature}/"]
|
|
43
|
+
|
|
44
|
+
style I fill:#e1f5ff
|
|
45
|
+
style L fill:#e1f5ff
|
|
46
|
+
style O fill:#e1f5ff
|
|
47
|
+
style Q fill:#c8e6c9
|
|
48
|
+
```
|
|
49
|
+
|
|
50
|
+
### フェーズ2: タスク実行 (`/task-exec`)
|
|
51
|
+
|
|
52
|
+
**注記**: 品質保証ループにより、レビュー/QA失敗時は自動的に実装フェーズに戻ります。複数タスク一括実行も可能です。
|
|
53
|
+
|
|
54
|
+
```mermaid
|
|
55
|
+
graph TD
|
|
56
|
+
A["入力: Issue番号 + タスクグループ番号"] --> B["GitHub Issueを読み込み"]
|
|
57
|
+
B --> C["タスクを 🔄 着手中に変更"]
|
|
58
|
+
|
|
59
|
+
C --> LoopStart["⟲ 品質保証ループ開始"]
|
|
60
|
+
|
|
61
|
+
LoopStart --> D["ステップ1: 実装フェーズ<br/>(task-executer)"]
|
|
62
|
+
D --> E["requirements.md と design.md を参照"]
|
|
63
|
+
E --> F["SerenaMAP で既存コード分析"]
|
|
64
|
+
F --> G["コード実装・修正<br/>ファイル作成/編集<br/>テストコード追加"]
|
|
65
|
+
|
|
66
|
+
G --> H["ステップ2: レビューフェーズ<br/>(task-reviewer)"]
|
|
67
|
+
H --> I["要件定義・設計との整合性確認"]
|
|
68
|
+
I --> J["コード品質チェック<br/>(TODO/FIXME/仮実装検出)"]
|
|
69
|
+
J --> K{問題あり?}
|
|
70
|
+
K -->|Yes<br/>ループバック| D
|
|
71
|
+
K -->|No| L["ステップ3: 品質保証フェーズ<br/>(task-qa)"]
|
|
72
|
+
|
|
73
|
+
L --> M["受け入れ条件に基づく動作確認"]
|
|
74
|
+
M --> N["テスト実行<br/>画面: Playwright MCP<br/>API: curl"]
|
|
75
|
+
N --> O{テスト失敗?}
|
|
76
|
+
O -->|Yes<br/>ループバック| D
|
|
77
|
+
O -->|No| LoopEnd["✓ 品質保証ループ終了"]
|
|
78
|
+
|
|
79
|
+
LoopEnd --> P["タスクグループを x 完了状態に変更"]
|
|
80
|
+
P --> Q["出力: 実装コード +<br/>更新されたGitHub Issue"]
|
|
81
|
+
|
|
82
|
+
style LoopStart fill:#ffecb3
|
|
83
|
+
style D fill:#e1f5ff
|
|
84
|
+
style H fill:#f3e5f5
|
|
85
|
+
style L fill:#e8f5e9
|
|
86
|
+
style LoopEnd fill:#c8e6c9
|
|
87
|
+
style Q fill:#4caf50,color:#fff
|
|
88
|
+
```
|
|
89
|
+
|
|
90
|
+
### 全体の関係図
|
|
91
|
+
|
|
92
|
+
```mermaid
|
|
93
|
+
graph LR
|
|
94
|
+
A[/spec-create] --> B[requirements.md]
|
|
95
|
+
A --> C[design.md]
|
|
96
|
+
A --> D[GitHub Issue]
|
|
97
|
+
|
|
98
|
+
D --> E[/task-exec]
|
|
99
|
+
B --> E
|
|
100
|
+
C --> E
|
|
101
|
+
|
|
102
|
+
E --> F[実装コード]
|
|
103
|
+
E --> G[更新されたGitHub Issue]
|
|
104
|
+
|
|
105
|
+
G --> H{次のタスクグループ?}
|
|
106
|
+
H -->|Yes| E
|
|
107
|
+
H -->|No| I[完了]
|
|
108
|
+
|
|
109
|
+
style A fill:#2196f3,color:#fff
|
|
110
|
+
style E fill:#ff9800,color:#fff
|
|
111
|
+
style I fill:#4caf50,color:#fff
|
|
112
|
+
```
|
|
113
|
+
|
|
114
|
+
---
|
|
115
|
+
|
|
116
|
+
## コマンド詳細
|
|
117
|
+
|
|
118
|
+
### 1. `/spec-create` コマンド
|
|
119
|
+
|
|
120
|
+
**役割**: プロダクト開発のシニアテクニカルアーキテクト兼シニアプロダクトエンジニアとして、ATDD形式の仕様書を段階的に作成します。
|
|
121
|
+
|
|
122
|
+
#### 実行方法
|
|
123
|
+
|
|
124
|
+
```bash
|
|
125
|
+
# Asanaタスクから仕様書作成
|
|
126
|
+
/spec-create https://app.asana.com/0/project/task-id
|
|
127
|
+
|
|
128
|
+
# 機能説明から仕様書作成
|
|
129
|
+
/spec-create "ユーザー認証機能の実装:マジックリンク認証とセッション管理"
|
|
130
|
+
|
|
131
|
+
# 既存仕様書を修正
|
|
132
|
+
/spec-create "認証機能の改善" /docs/specs/issues/auth/20250111-auth-magic-link/
|
|
133
|
+
```
|
|
134
|
+
|
|
135
|
+
#### 処理フロー詳細
|
|
136
|
+
|
|
137
|
+
```
|
|
138
|
+
Step 1: 外部リソース確認
|
|
139
|
+
├─ AsanaタスクURL指定時
|
|
140
|
+
│ └─ AsanaMCP でタスク情報取得
|
|
141
|
+
│ ├─ タイトル
|
|
142
|
+
│ ├─ 説明
|
|
143
|
+
│ └─ カスタムフィールド
|
|
144
|
+
├─ FigmaURL含まれる場合
|
|
145
|
+
│ └─ FigmaDevModeMCP でデザイン分析
|
|
146
|
+
│ ├─ UI要件
|
|
147
|
+
│ ├─ コンポーネント仕様
|
|
148
|
+
│ └─ デザイントークン
|
|
149
|
+
└─ 出力ディレクトリ決定
|
|
150
|
+
└─ /docs/specs/issues/{domain}/{YYYYMMDD}-{domain}-{feature}/
|
|
151
|
+
|
|
152
|
+
Step 2: requirements.md 作成(要件定義書)
|
|
153
|
+
├─ spec-requirements-generator エージェント起動
|
|
154
|
+
├─ 既存コードベース分析
|
|
155
|
+
├─ ATDD形式のユーザーストーリー作成
|
|
156
|
+
├─ 受け入れ基準(Acceptance Criteria)定義
|
|
157
|
+
├─ 機能要件・非機能要件の整理
|
|
158
|
+
├─ ユーザー承認待ち
|
|
159
|
+
│ ├─ 承認 → コミット&プッシュ
|
|
160
|
+
│ │ └─ メッセージ: "docs: add requirements for {feature-name}"
|
|
161
|
+
│ └─ 修正依頼 → 再作成
|
|
162
|
+
└─ 📄 成果物構成:
|
|
163
|
+
- ユーザーストーリー
|
|
164
|
+
- 受け入れ基準
|
|
165
|
+
- 機能要件
|
|
166
|
+
- 非機能要件
|
|
167
|
+
|
|
168
|
+
Step 3: design.md 作成(設計書)
|
|
169
|
+
├─ spec-design-generator エージェント起動
|
|
170
|
+
├─ 既存アーキテクチャ調査
|
|
171
|
+
├─ 技術スタック選定(Next.js + Hono + Prisma)
|
|
172
|
+
├─ データモデル設計
|
|
173
|
+
├─ API仕様定義
|
|
174
|
+
├─ セキュリティ設計・エラーハンドリング設計
|
|
175
|
+
├─ ユーザー承認待ち
|
|
176
|
+
│ ├─ 承認 → コミット&プッシュ
|
|
177
|
+
│ │ └─ メッセージ: "docs: add design for {feature-name}"
|
|
178
|
+
│ └─ 修正依頼 → 再作成
|
|
179
|
+
└─ 📄 成果物構成:
|
|
180
|
+
- アーキテクチャ設計
|
|
181
|
+
- データモデル設計
|
|
182
|
+
- API仕様
|
|
183
|
+
- セキュリティ設計
|
|
184
|
+
- エラーハンドリング
|
|
185
|
+
|
|
186
|
+
Step 4: GitHub Issueにタスク一覧を記述
|
|
187
|
+
├─ spec-tasks-generator エージェント起動
|
|
188
|
+
├─ 実装タスクの洗い出し
|
|
189
|
+
├─ タスクの分解(Phase別)
|
|
190
|
+
├─ 依存関係の定義
|
|
191
|
+
├─ 優先順位の設定
|
|
192
|
+
├─ GitHub Issueの本文にタスク一覧を記述
|
|
193
|
+
├─ ユーザー承認待ち
|
|
194
|
+
│ ├─ 承認 → Issueブランチ作成、ファイルプッシュ、PR作成、Issue更新
|
|
195
|
+
│ └─ 修正依頼 → 再作成
|
|
196
|
+
└─ 📄 成果物構成:
|
|
197
|
+
**基本構成**(各ファイル1000行以下):
|
|
198
|
+
- requirements.md, design.md
|
|
199
|
+
- GitHub Issueにタスク一覧
|
|
200
|
+
|
|
201
|
+
**分割構成**(1000行超過時):
|
|
202
|
+
- requirements/, design/ ディレクトリ
|
|
203
|
+
- 各ディレクトリ内にREADME.mdと複数の詳細ファイル
|
|
204
|
+
- GitHub Issueにタスク一覧
|
|
205
|
+
```
|
|
206
|
+
|
|
207
|
+
|
|
208
|
+
---
|
|
209
|
+
|
|
210
|
+
### 2. `/task-exec` コマンド
|
|
211
|
+
|
|
212
|
+
**役割**: タスク実行マネージャーとして、タスクの選定から実装、レビュー、QA、完了までの一連のプロセスを管理します。
|
|
213
|
+
|
|
214
|
+
**重要な特徴**:
|
|
215
|
+
- **品質保証ループ**: QAが合格するまで自動的に実装→レビュー→QAのサイクルを繰り返す
|
|
216
|
+
- **即座の次フェーズ開始**: 各フェーズ完了後、ユーザーの応答を待たずに次のフェーズを自動開始
|
|
217
|
+
- **サブエージェント連携**: 各フェーズで専門のサブエージェントを使用(task-executer, task-reviewer, task-qa, task-modification-analyzer)
|
|
218
|
+
|
|
219
|
+
#### 実行方法
|
|
220
|
+
|
|
221
|
+
```bash
|
|
222
|
+
# Issue番号を指定(自動選定)
|
|
223
|
+
/task-exec #123
|
|
224
|
+
|
|
225
|
+
# 特定のタスクグループを指定
|
|
226
|
+
/task-exec #123 1.1
|
|
227
|
+
|
|
228
|
+
# Issue番号のみ(#なし)
|
|
229
|
+
/task-exec 123
|
|
230
|
+
```
|
|
231
|
+
|
|
232
|
+
#### 処理フロー詳細
|
|
233
|
+
|
|
234
|
+
```
|
|
235
|
+
┌─────────────────────────────────────────────────────┐
|
|
236
|
+
│ ステップ1: 実装フェーズ [task-executer] │
|
|
237
|
+
│ 🎯 目的: 選定されたタスクの実装 │
|
|
238
|
+
│ ⚠️ 注意: ユーザーの応答を待たずに自動開始 │
|
|
239
|
+
└─────────────────────────────────────────────────────┘
|
|
240
|
+
↓
|
|
241
|
+
├─ task-executerサブエージェント起動
|
|
242
|
+
├─ requirements.md と design.md を参照
|
|
243
|
+
├─ SerenaMAP で既存コード分析
|
|
244
|
+
│ ├─ 関連ファイルの検索
|
|
245
|
+
│ ├─ シンボル定義の確認
|
|
246
|
+
│ └─ 参照関係の把握
|
|
247
|
+
├─ コード実装・修正
|
|
248
|
+
│ ├─ ファイル作成/編集
|
|
249
|
+
│ ├─ テストコード追加
|
|
250
|
+
│ └─ ドキュメント更新
|
|
251
|
+
├─ 完了報告: "## 🔨 実装フェーズ完了"
|
|
252
|
+
└─ 即座にステップ2へ(レビューフェーズ)
|
|
253
|
+
|
|
254
|
+
┌─────────────────────────────────────────────────────┐
|
|
255
|
+
│ ステップ2: レビューフェーズ [task-reviewer] │
|
|
256
|
+
│ 🎯 目的: 実装内容の品質確認 │
|
|
257
|
+
│ ⚠️ 注意: ユーザーの応答を待たずに自動開始 │
|
|
258
|
+
└─────────────────────────────────────────────────────┘
|
|
259
|
+
↓
|
|
260
|
+
├─ requirements.md との整合性確認
|
|
261
|
+
│ └─ 受け入れ基準を満たしているか
|
|
262
|
+
├─ design.md との整合性確認
|
|
263
|
+
│ ├─ アーキテクチャに準拠しているか
|
|
264
|
+
│ └─ API仕様に従っているか
|
|
265
|
+
├─ コード品質チェック
|
|
266
|
+
│ ├─ TODO/FIXME の検出
|
|
267
|
+
│ ├─ 仮実装の検出
|
|
268
|
+
│ └─ エラーハンドリングの確認
|
|
269
|
+
├─ 問題発見時
|
|
270
|
+
│ └─ 実装フェーズに戻る(ステップ1へ自動ループバック)
|
|
271
|
+
├─ 完了報告: "## 🔍 レビューフェーズ完了"
|
|
272
|
+
└─ 問題なし → 即座にステップ3へ(QAフェーズ)
|
|
273
|
+
|
|
274
|
+
┌─────────────────────────────────────────────────────┐
|
|
275
|
+
│ ステップ3: 品質保証フェーズ [task-qa] │
|
|
276
|
+
│ 🎯 目的: 受け入れ条件に基づく動作確認 │
|
|
277
|
+
│ ⚠️ 注意: ユーザーの応答を待たずに自動開始 │
|
|
278
|
+
└─────────────────────────────────────────────────────┘
|
|
279
|
+
↓
|
|
280
|
+
├─ 受け入れ条件に基づく動作確認
|
|
281
|
+
├─ テストタイプ別実行
|
|
282
|
+
│ ├─ 画面テスト: Playwright MCP
|
|
283
|
+
│ │ ├─ 画面遷移確認
|
|
284
|
+
│ │ ├─ 入力検証
|
|
285
|
+
│ │ └─ エラー表示確認
|
|
286
|
+
│ ├─ APIテスト: curl
|
|
287
|
+
│ │ ├─ リクエスト送信
|
|
288
|
+
│ │ ├─ レスポンス検証
|
|
289
|
+
│ │ └─ エラーケース確認
|
|
290
|
+
│ └─ スクリプトテスト: 実行確認
|
|
291
|
+
├─ エビデンス保存
|
|
292
|
+
│ ├─ スクリーンショット
|
|
293
|
+
│ └─ ログファイル
|
|
294
|
+
├─ テスト失敗時
|
|
295
|
+
│ └─ 実装フェーズに戻る(ステップ1へ自動ループバック)
|
|
296
|
+
├─ 完了報告: "## ✅ QAフェーズ完了"
|
|
297
|
+
└─ 全テスト合格 → タスクグループ完了
|
|
298
|
+
|
|
299
|
+
┌─────────────────────────────────────────────────────┐
|
|
300
|
+
│ ステップ4: 追加修正対応フェーズ [task-modification- │
|
|
301
|
+
│ analyzer] (オプション) │
|
|
302
|
+
│ 🎯 目的: ユーザーからの追加修正指示への対応 │
|
|
303
|
+
└─────────────────────────────────────────────────────┘
|
|
304
|
+
↓
|
|
305
|
+
├─ ユーザーから追加修正指示がある場合のみ実行
|
|
306
|
+
├─ 修正内容の分析
|
|
307
|
+
│ ├─ ドキュメント修正の必要性判定
|
|
308
|
+
│ ├─ 修正規模の評価(小規模/中規模/大規模)
|
|
309
|
+
│ └─ 品質保証プロセスの必要性判定
|
|
310
|
+
├─ 推奨パイプラインの提案
|
|
311
|
+
│ ├─ 小規模修正 → 直接修正+軽微な確認
|
|
312
|
+
│ ├─ 中規模修正 → ステップ1から再実行
|
|
313
|
+
│ └─ 大規模修正 → 仕様書更新から再開
|
|
314
|
+
└─ 完了報告: "## 📊 追加修正分析完了"
|
|
315
|
+
```
|
|
316
|
+
|
|
317
|
+
---
|
|
318
|
+
|
|
319
|
+
### 3. `pnpm task:loop` コマンド
|
|
320
|
+
|
|
321
|
+
**役割**: 複数タスクの自動連続実行とVibe-Kanbanによる進捗追跡
|
|
322
|
+
|
|
323
|
+
詳細については、専用ドキュメントを参照してください:
|
|
324
|
+
**📖 [Vibe-Kanban自動実行ガイド](./task-vibe-kanban-loop.md)**
|
|
325
|
+
|
|
326
|
+
#### `/task-exec`との使い分け
|
|
327
|
+
|
|
328
|
+
| コマンド | 用途 | 品質保証 | 推奨シーン |
|
|
329
|
+
|---------|------|---------|----------|
|
|
330
|
+
| **`/task-exec`** | 重要タスクの確実な完了 | ✅ 合格まで自動ループ | 複雑な実装、品質重視 |
|
|
331
|
+
| **`pnpm task:loop`** | 大量タスクの自動消化 | ❌ 各タスクは別プロセス | 定型作業、並行開発 |
|
|
332
|
+
|
|
333
|
+
**詳細な使い分け基準**: [task-vibe-kanban-loop.md](./task-vibe-kanban-loop.md#task-execとの使い分け)
|
|
334
|
+
|
|
335
|
+
---
|
|
336
|
+
|
|
337
|
+
## 実際の開発フロー例
|
|
338
|
+
|
|
339
|
+
### シナリオ: マジックリンク認証機能の実装
|
|
340
|
+
|
|
341
|
+
#### Step 1: 仕様書作成
|
|
342
|
+
|
|
343
|
+
```bash
|
|
344
|
+
# Asanaタスクから仕様書を作成
|
|
345
|
+
/spec-create https://app.asana.com/0/project/auth-magic-link
|
|
346
|
+
|
|
347
|
+
# または機能説明から作成
|
|
348
|
+
/spec-create "マジックリンク認証機能:
|
|
349
|
+
- メールアドレスでログイン
|
|
350
|
+
- ワンタイムトークン生成
|
|
351
|
+
- メール送信
|
|
352
|
+
- トークン検証
|
|
353
|
+
- セッション管理"
|
|
354
|
+
```
|
|
355
|
+
|
|
356
|
+
**生成される仕様書**:
|
|
357
|
+
```
|
|
358
|
+
/docs/specs/issues/auth/issue123-auth-magic-link/
|
|
359
|
+
├── requirements.md ← ユーザーストーリー、受け入れ基準
|
|
360
|
+
└── design.md ← API設計、データモデル、セキュリティ
|
|
361
|
+
|
|
362
|
+
GitHub Issue #123 ← 実装タスク一覧(Phase 1〜3)
|
|
363
|
+
```
|
|
364
|
+
|
|
365
|
+
#### Step 2: タスク実行(Phase 1-1)
|
|
366
|
+
|
|
367
|
+
```bash
|
|
368
|
+
# Phase 1-1: トークン生成APIの実装
|
|
369
|
+
/task-exec #123
|
|
370
|
+
|
|
371
|
+
# 実行内容:
|
|
372
|
+
# 1. task-executer: API実装、バリデーション追加
|
|
373
|
+
# 2. task-reviewer: 設計との整合性確認
|
|
374
|
+
# 3. task-qa: curlでAPIテスト
|
|
375
|
+
# → タスクグループを完了状態に変更
|
|
376
|
+
```
|
|
377
|
+
|
|
378
|
+
#### Step 3: タスク実行(Phase 1-2)
|
|
379
|
+
|
|
380
|
+
```bash
|
|
381
|
+
# Phase 1-2: メール送信機能の実装
|
|
382
|
+
/task-exec #123
|
|
383
|
+
|
|
384
|
+
# 実行内容:
|
|
385
|
+
# 1. task-executer: メールサービス実装
|
|
386
|
+
# 2. task-reviewer: テンプレート確認
|
|
387
|
+
# 3. task-qa: メール送信テスト
|
|
388
|
+
# → タスクグループを完了状態に変更
|
|
389
|
+
```
|
|
390
|
+
|
|
391
|
+
#### Step 4: 全フェーズ完了まで繰り返し
|
|
392
|
+
|
|
393
|
+
```bash
|
|
394
|
+
# Phase 2, Phase 3 のタスクグループを順次実行
|
|
395
|
+
/task-exec #123
|
|
396
|
+
/task-exec #123
|
|
397
|
+
...
|
|
398
|
+
|
|
399
|
+
# 最終的にすべてのタスクグループが [x] 完了状態になる
|
|
400
|
+
```
|
|
401
|
+
|
|
402
|
+
---
|
|
403
|
+
|
|
404
|
+
## タスク状態管理
|
|
405
|
+
|
|
406
|
+
### GitHub Issueのフォーマット
|
|
407
|
+
|
|
408
|
+
```markdown
|
|
409
|
+
## タスク一覧
|
|
410
|
+
|
|
411
|
+
### Phase 1: 基礎実装
|
|
412
|
+
|
|
413
|
+
- [ ] 1.1 トークン生成API実装
|
|
414
|
+
|
|
415
|
+
- 1.1.1 トークン生成ロジックの実装
|
|
416
|
+
- トークンテーブルの作成
|
|
417
|
+
- ランダム文字列生成関数の実装
|
|
418
|
+
- **要件**: Story 1
|
|
419
|
+
- **依存関係**: なし
|
|
420
|
+
- **完了条件**: トークン生成が正常に動作すること(AC1.1を満たす)
|
|
421
|
+
- **対応設計**: design.md「トークン生成」セクション
|
|
422
|
+
- **シナリオテスト**: なし(基盤実装のため)
|
|
423
|
+
|
|
424
|
+
- 1.1.2 APIエンドポイントの作成
|
|
425
|
+
- POST /api/auth/magic-link エンドポイント
|
|
426
|
+
- バリデーション適用
|
|
427
|
+
- **要件**: Story 1
|
|
428
|
+
- **依存関係**: 1.1.1
|
|
429
|
+
- **完了条件**: APIエンドポイントが正常動作すること(AC1.2を満たす)
|
|
430
|
+
- **対応設計**: design.md「API設計」セクション
|
|
431
|
+
- **シナリオテスト**: シナリオ1 Step 1-2(部分実行)
|
|
432
|
+
|
|
433
|
+
- [ ] 1.2 メール送信機能実装
|
|
434
|
+
|
|
435
|
+
- 1.2.1 メールサービスの実装
|
|
436
|
+
- メール送信ロジックの実装
|
|
437
|
+
- テンプレートの作成
|
|
438
|
+
- **要件**: Story 1
|
|
439
|
+
- **依存関係**: 1.1
|
|
440
|
+
- **完了条件**: メール送信テストが通ること(AC1.3を満たす)
|
|
441
|
+
- **対応設計**: design.md「メール送信」セクション
|
|
442
|
+
- **シナリオテスト**: シナリオ1 全Step(フル実行)
|
|
443
|
+
|
|
444
|
+
### Phase 2: UI実装
|
|
445
|
+
...
|
|
446
|
+
```
|
|
447
|
+
|
|
448
|
+
### タスク状態の遷移
|
|
449
|
+
|
|
450
|
+
```mermaid
|
|
451
|
+
stateDiagram-v2
|
|
452
|
+
[*] --> 未着手: タスク作成
|
|
453
|
+
|
|
454
|
+
未着手 --> 着手中_TaskExec: /task-exec実行
|
|
455
|
+
未着手 --> Vibe登録: /task-vibe-kanban-loop実行
|
|
456
|
+
|
|
457
|
+
着手中_TaskExec --> 実装中: 実装フェーズ
|
|
458
|
+
実装中 --> レビュー中: 実装完了
|
|
459
|
+
レビュー中 --> 実装中: 問題あり<br/>(ループバック)
|
|
460
|
+
レビュー中 --> QA中: 問題なし
|
|
461
|
+
QA中 --> 実装中: テスト失敗<br/>(ループバック)
|
|
462
|
+
QA中 --> 完了_TaskExec: 全テスト合格
|
|
463
|
+
|
|
464
|
+
Vibe登録 --> 実行待機: Vibe-Kanban登録完了
|
|
465
|
+
実行待機 --> 実行中_Vibe: エージェント開始
|
|
466
|
+
実行中_Vibe --> 完了_Vibe: 実行成功
|
|
467
|
+
実行中_Vibe --> 失敗: 実行失敗
|
|
468
|
+
|
|
469
|
+
失敗 --> 手動修正: 開発者が修正
|
|
470
|
+
手動修正 --> Vibe登録: 再実行
|
|
471
|
+
|
|
472
|
+
完了_TaskExec --> [*]
|
|
473
|
+
完了_Vibe --> [*]
|
|
474
|
+
|
|
475
|
+
note right of 未着手
|
|
476
|
+
状態: [ ]
|
|
477
|
+
end note
|
|
478
|
+
|
|
479
|
+
note right of 実装中
|
|
480
|
+
品質保証ループ内
|
|
481
|
+
合格まで自動継続
|
|
482
|
+
状態: [🔄]
|
|
483
|
+
end note
|
|
484
|
+
|
|
485
|
+
note right of 実行待機
|
|
486
|
+
1分間隔で再試行
|
|
487
|
+
最大30回まで
|
|
488
|
+
end note
|
|
489
|
+
|
|
490
|
+
note right of 完了_TaskExec
|
|
491
|
+
状態: [x]
|
|
492
|
+
end note
|
|
493
|
+
|
|
494
|
+
note right of 完了_Vibe
|
|
495
|
+
状態: [x]
|
|
496
|
+
end note
|
|
497
|
+
```
|
|
498
|
+
|
|
499
|
+
---
|
|
500
|
+
|
|
501
|
+
## 重要な原則
|
|
502
|
+
|
|
503
|
+
### ATDD(受け入れテスト駆動開発)
|
|
504
|
+
|
|
505
|
+
1. **要件定義から始める**: 受け入れ基準を明確に定義
|
|
506
|
+
2. **設計を詳細化**: 技術的な実装方法を設計
|
|
507
|
+
3. **タスクに分解**: 実装可能な単位に分割
|
|
508
|
+
4. **実装→レビュー→QA**: 品質を段階的に確保
|
|
509
|
+
5. **受け入れテスト**: 要件を満たしているか確認
|
|
510
|
+
|
|
511
|
+
### 技術スタック対応
|
|
512
|
+
|
|
513
|
+
- **フロントエンド**: Next.js (App Router)
|
|
514
|
+
- **バックエンド**: Hono (API)
|
|
515
|
+
- **データベース**: Prisma (ORM)
|
|
516
|
+
- **認証**: 独自実装(マジックリンク、セッション)
|
|
517
|
+
|
|
518
|
+
### トレーサビリティ確保
|
|
519
|
+
|
|
520
|
+
```mermaid
|
|
521
|
+
graph TD
|
|
522
|
+
A["Asanaタスク"] --> B["requirements.md (受け入れ基準)"]
|
|
523
|
+
B --> C["design.md (技術仕様)"]
|
|
524
|
+
C --> D["GitHub Issue (実装タスク一覧)"]
|
|
525
|
+
D --> E["コード実装"]
|
|
526
|
+
E --> F["QAテスト (受け入れ基準を検証)"]
|
|
527
|
+
|
|
528
|
+
style A fill:#ff9800,color:#fff
|
|
529
|
+
style B fill:#2196f3,color:#fff
|
|
530
|
+
style C fill:#2196f3,color:#fff
|
|
531
|
+
style D fill:#2196f3,color:#fff
|
|
532
|
+
style E fill:#4caf50,color:#fff
|
|
533
|
+
style F fill:#4caf50,color:#fff
|
|
534
|
+
```
|
|
535
|
+
|
|
536
|
+
---
|
|
537
|
+
|
|
538
|
+
## トラブルシューティング
|
|
539
|
+
|
|
540
|
+
### よくある問題と対処法
|
|
541
|
+
|
|
542
|
+
#### 1. タスクグループが選定されない
|
|
543
|
+
|
|
544
|
+
```bash
|
|
545
|
+
# 原因: 依存関係が満たされていない
|
|
546
|
+
# 対処: 先行タスクグループを先に完了させる
|
|
547
|
+
|
|
548
|
+
/task-exec #123 1.1 # 先行タスクグループを指定して実行
|
|
549
|
+
```
|
|
550
|
+
|
|
551
|
+
#### 2. レビューで差し戻される
|
|
552
|
+
|
|
553
|
+
```bash
|
|
554
|
+
# 原因: 要件や設計との不整合
|
|
555
|
+
# 対処: requirements.md と design.md を再確認
|
|
556
|
+
|
|
557
|
+
# レビュー結果を確認後、再度実装フェーズから実行される
|
|
558
|
+
# (task-exec内で自動的に実装をやり直します)
|
|
559
|
+
```
|
|
560
|
+
|
|
561
|
+
#### 3. QAテストが失敗する
|
|
562
|
+
|
|
563
|
+
```bash
|
|
564
|
+
# 原因: 受け入れ条件を満たしていない
|
|
565
|
+
# 対処: テスト結果を確認し、実装を修正
|
|
566
|
+
|
|
567
|
+
# QA失敗時は自動的に実装フェーズに戻ります
|
|
568
|
+
# (task-exec内で自動的に実装をやり直します)
|
|
569
|
+
```
|
|
570
|
+
|
|
571
|
+
---
|
|
572
|
+
|
|
573
|
+
## コマンド実行の全体像
|
|
574
|
+
|
|
575
|
+
```mermaid
|
|
576
|
+
sequenceDiagram
|
|
577
|
+
participant User as ユーザー
|
|
578
|
+
participant SpecCreate as /spec-create
|
|
579
|
+
participant TaskExec as /task-exec
|
|
580
|
+
participant Executer as task-executer
|
|
581
|
+
participant Reviewer as task-reviewer
|
|
582
|
+
participant QA as task-qa
|
|
583
|
+
|
|
584
|
+
User->>SpecCreate: 機能説明/AsanaURL
|
|
585
|
+
SpecCreate->>SpecCreate: requirements.md 作成
|
|
586
|
+
SpecCreate->>User: 承認依頼
|
|
587
|
+
User->>SpecCreate: 承認
|
|
588
|
+
SpecCreate->>SpecCreate: design.md 作成
|
|
589
|
+
SpecCreate->>User: 承認依頼
|
|
590
|
+
User->>SpecCreate: 承認
|
|
591
|
+
SpecCreate->>SpecCreate: GitHub Issueにタスク一覧を記述
|
|
592
|
+
SpecCreate->>User: 仕様書完成
|
|
593
|
+
|
|
594
|
+
User->>TaskExec: Issue番号 + タスクグループ番号
|
|
595
|
+
|
|
596
|
+
TaskExec->>Executer: 実装依頼
|
|
597
|
+
Executer->>TaskExec: 実装完了
|
|
598
|
+
|
|
599
|
+
TaskExec->>Reviewer: レビュー依頼
|
|
600
|
+
alt 問題なし
|
|
601
|
+
Reviewer->>TaskExec: レビュー合格
|
|
602
|
+
TaskExec->>QA: QA依頼
|
|
603
|
+
alt テスト成功
|
|
604
|
+
QA->>TaskExec: QA合格
|
|
605
|
+
TaskExec->>User: タスクグループ完了
|
|
606
|
+
else テスト失敗
|
|
607
|
+
QA->>TaskExec: QA不合格
|
|
608
|
+
TaskExec->>Executer: 再実装依頼
|
|
609
|
+
end
|
|
610
|
+
else 問題あり
|
|
611
|
+
Reviewer->>TaskExec: レビュー不合格
|
|
612
|
+
TaskExec->>Executer: 再実装依頼
|
|
613
|
+
end
|
|
614
|
+
```
|
|
615
|
+
|
|
616
|
+
---
|
|
617
|
+
|
|
618
|
+
## まとめ
|
|
619
|
+
|
|
620
|
+
このワークフローにより、以下が実現されます:
|
|
621
|
+
|
|
622
|
+
✅ **品質の高い仕様書**: ATDD形式で明確な受け入れ基準
|
|
623
|
+
✅ **体系的な実装**: 設計に基づいた段階的な開発
|
|
624
|
+
✅ **直接的な実装**: task-exec内で直接実装を実行(エージェント不要)
|
|
625
|
+
✅ **自動化されたレビュー**: 要件との整合性を自動チェック
|
|
626
|
+
✅ **確実なQA**: 受け入れ条件に基づく動作確認
|
|
627
|
+
✅ **トレーサビリティ**: Asanaから実装までの追跡可能性
|
|
628
|
+
|
|
629
|
+
### 実行の流れ
|
|
630
|
+
|
|
631
|
+
1. **仕様書作成**: `/spec-create`で要件・設計を作成し、GitHub Issueにタスク一覧を記述
|
|
632
|
+
2. **タスク実行**: `/task-exec`でタスクグループを1つずつ実行
|
|
633
|
+
- task-executerで実装
|
|
634
|
+
- task-reviewerでレビュー
|
|
635
|
+
- task-qaでQA
|
|
636
|
+
- 完了時にタスクグループを完了状態に更新
|
|
637
|
+
3. **繰り返し**: 全タスクグループが完了するまで`/task-exec`を繰り返す
|
|
638
|
+
|
|
639
|
+
開発を始める際は、まず`/spec-create`で仕様書を作成し、その後`/task-exec`でタスクグループを順次実行していきます。
|
|
640
|
+
<!-- @einja:managed:end -->
|
|
641
|
+
|
|
642
|
+
---
|
|
643
|
+
|
|
644
|
+
<!-- @einja:seed:start id="task-execute-project" -->
|
|
645
|
+
## プロジェクト固有の設定
|
|
646
|
+
|
|
647
|
+
<!-- このセクションはプロジェクト固有の内容を追記する場所です -->
|
|
648
|
+
<!-- einja syncで上書きされません -->
|
|
649
|
+
<!-- @einja:seed:end -->
|