@einja/dev-cli 0.1.6
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 +179 -0
- package/dist/cli.d.ts +2 -0
- package/dist/cli.d.ts.map +1 -0
- package/dist/cli.js +49 -0
- package/dist/cli.js.map +1 -0
- package/dist/commands/init.d.ts +3 -0
- package/dist/commands/init.d.ts.map +1 -0
- package/dist/commands/init.js +243 -0
- package/dist/commands/init.js.map +1 -0
- package/dist/commands/list.d.ts +2 -0
- package/dist/commands/list.d.ts.map +1 -0
- package/dist/commands/list.js +23 -0
- package/dist/commands/list.js.map +1 -0
- package/dist/commands/sync.d.ts +7 -0
- package/dist/commands/sync.d.ts.map +1 -0
- package/dist/commands/sync.js +294 -0
- package/dist/commands/sync.js.map +1 -0
- package/dist/commands/sync.test.d.ts +2 -0
- package/dist/commands/sync.test.d.ts.map +1 -0
- package/dist/commands/sync.test.js +593 -0
- package/dist/commands/sync.test.js.map +1 -0
- package/dist/commands/task-loop.d.ts +11 -0
- package/dist/commands/task-loop.d.ts.map +1 -0
- package/dist/commands/task-loop.js +81 -0
- package/dist/commands/task-loop.js.map +1 -0
- package/dist/index.d.ts +4 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +3 -0
- package/dist/index.js.map +1 -0
- package/dist/lib/file-system.d.ts +39 -0
- package/dist/lib/file-system.d.ts.map +1 -0
- package/dist/lib/file-system.js +79 -0
- package/dist/lib/file-system.js.map +1 -0
- package/dist/lib/mcp-config.d.ts +43 -0
- package/dist/lib/mcp-config.d.ts.map +1 -0
- package/dist/lib/mcp-config.js +109 -0
- package/dist/lib/mcp-config.js.map +1 -0
- package/dist/lib/mcp-config.test.d.ts +2 -0
- package/dist/lib/mcp-config.test.d.ts.map +1 -0
- package/dist/lib/mcp-config.test.js +285 -0
- package/dist/lib/mcp-config.test.js.map +1 -0
- package/dist/lib/merger.d.ts +41 -0
- package/dist/lib/merger.d.ts.map +1 -0
- package/dist/lib/merger.js +164 -0
- package/dist/lib/merger.js.map +1 -0
- package/dist/lib/preset-update/cli-repo-detector.d.ts +35 -0
- package/dist/lib/preset-update/cli-repo-detector.d.ts.map +1 -0
- package/dist/lib/preset-update/cli-repo-detector.js +83 -0
- package/dist/lib/preset-update/cli-repo-detector.js.map +1 -0
- package/dist/lib/preset-update/cli-repo-detector.test.d.ts +2 -0
- package/dist/lib/preset-update/cli-repo-detector.test.d.ts.map +1 -0
- package/dist/lib/preset-update/cli-repo-detector.test.js +120 -0
- package/dist/lib/preset-update/cli-repo-detector.test.js.map +1 -0
- package/dist/lib/preset-update/file-copier.d.ts +59 -0
- package/dist/lib/preset-update/file-copier.d.ts.map +1 -0
- package/dist/lib/preset-update/file-copier.js +220 -0
- package/dist/lib/preset-update/file-copier.js.map +1 -0
- package/dist/lib/preset-update/file-copier.test.d.ts +2 -0
- package/dist/lib/preset-update/file-copier.test.d.ts.map +1 -0
- package/dist/lib/preset-update/file-copier.test.js +297 -0
- package/dist/lib/preset-update/file-copier.test.js.map +1 -0
- package/dist/lib/preset-update/preset-finder.d.ts +39 -0
- package/dist/lib/preset-update/preset-finder.d.ts.map +1 -0
- package/dist/lib/preset-update/preset-finder.js +92 -0
- package/dist/lib/preset-update/preset-finder.js.map +1 -0
- package/dist/lib/preset-update/preset-finder.test.d.ts +2 -0
- package/dist/lib/preset-update/preset-finder.test.d.ts.map +1 -0
- package/dist/lib/preset-update/preset-finder.test.js +128 -0
- package/dist/lib/preset-update/preset-finder.test.js.map +1 -0
- package/dist/lib/preset.d.ts +14 -0
- package/dist/lib/preset.d.ts.map +1 -0
- package/dist/lib/preset.js +52 -0
- package/dist/lib/preset.js.map +1 -0
- package/dist/lib/sync/backup-manager.d.ts +50 -0
- package/dist/lib/sync/backup-manager.d.ts.map +1 -0
- package/dist/lib/sync/backup-manager.js +117 -0
- package/dist/lib/sync/backup-manager.js.map +1 -0
- package/dist/lib/sync/backup-manager.test.d.ts +2 -0
- package/dist/lib/sync/backup-manager.test.d.ts.map +1 -0
- package/dist/lib/sync/backup-manager.test.js +155 -0
- package/dist/lib/sync/backup-manager.test.js.map +1 -0
- package/dist/lib/sync/batch-processor.d.ts +27 -0
- package/dist/lib/sync/batch-processor.d.ts.map +1 -0
- package/dist/lib/sync/batch-processor.js +46 -0
- package/dist/lib/sync/batch-processor.js.map +1 -0
- package/dist/lib/sync/batch-processor.test.d.ts +2 -0
- package/dist/lib/sync/batch-processor.test.d.ts.map +1 -0
- package/dist/lib/sync/batch-processor.test.js +110 -0
- package/dist/lib/sync/batch-processor.test.js.map +1 -0
- package/dist/lib/sync/category-validator.d.ts +36 -0
- package/dist/lib/sync/category-validator.d.ts.map +1 -0
- package/dist/lib/sync/category-validator.js +46 -0
- package/dist/lib/sync/category-validator.js.map +1 -0
- package/dist/lib/sync/category-validator.test.d.ts +2 -0
- package/dist/lib/sync/category-validator.test.d.ts.map +1 -0
- package/dist/lib/sync/category-validator.test.js +89 -0
- package/dist/lib/sync/category-validator.test.js.map +1 -0
- package/dist/lib/sync/conflict-reporter.d.ts +57 -0
- package/dist/lib/sync/conflict-reporter.d.ts.map +1 -0
- package/dist/lib/sync/conflict-reporter.js +81 -0
- package/dist/lib/sync/conflict-reporter.js.map +1 -0
- package/dist/lib/sync/conflict-reporter.test.d.ts +2 -0
- package/dist/lib/sync/conflict-reporter.test.d.ts.map +1 -0
- package/dist/lib/sync/conflict-reporter.test.js +132 -0
- package/dist/lib/sync/conflict-reporter.test.js.map +1 -0
- package/dist/lib/sync/diff-engine.d.ts +28 -0
- package/dist/lib/sync/diff-engine.d.ts.map +1 -0
- package/dist/lib/sync/diff-engine.js +118 -0
- package/dist/lib/sync/diff-engine.js.map +1 -0
- package/dist/lib/sync/diff-engine.test.d.ts +2 -0
- package/dist/lib/sync/diff-engine.test.d.ts.map +1 -0
- package/dist/lib/sync/diff-engine.test.js +133 -0
- package/dist/lib/sync/diff-engine.test.js.map +1 -0
- package/dist/lib/sync/file-filter.d.ts +40 -0
- package/dist/lib/sync/file-filter.d.ts.map +1 -0
- package/dist/lib/sync/file-filter.js +171 -0
- package/dist/lib/sync/file-filter.js.map +1 -0
- package/dist/lib/sync/file-filter.test.d.ts +2 -0
- package/dist/lib/sync/file-filter.test.d.ts.map +1 -0
- package/dist/lib/sync/file-filter.test.js +179 -0
- package/dist/lib/sync/file-filter.test.js.map +1 -0
- package/dist/lib/sync/hash-cache.d.ts +34 -0
- package/dist/lib/sync/hash-cache.d.ts.map +1 -0
- package/dist/lib/sync/hash-cache.js +51 -0
- package/dist/lib/sync/hash-cache.js.map +1 -0
- package/dist/lib/sync/hash-cache.test.d.ts +2 -0
- package/dist/lib/sync/hash-cache.test.d.ts.map +1 -0
- package/dist/lib/sync/hash-cache.test.js +110 -0
- package/dist/lib/sync/hash-cache.test.js.map +1 -0
- package/dist/lib/sync/integration.test.d.ts +2 -0
- package/dist/lib/sync/integration.test.d.ts.map +1 -0
- package/dist/lib/sync/integration.test.js +317 -0
- package/dist/lib/sync/integration.test.js.map +1 -0
- package/dist/lib/sync/marker-processor.d.ts +54 -0
- package/dist/lib/sync/marker-processor.d.ts.map +1 -0
- package/dist/lib/sync/marker-processor.js +208 -0
- package/dist/lib/sync/marker-processor.js.map +1 -0
- package/dist/lib/sync/marker-processor.test.d.ts +2 -0
- package/dist/lib/sync/marker-processor.test.d.ts.map +1 -0
- package/dist/lib/sync/marker-processor.test.js +245 -0
- package/dist/lib/sync/marker-processor.test.js.map +1 -0
- package/dist/lib/sync/metadata-manager.d.ts +46 -0
- package/dist/lib/sync/metadata-manager.d.ts.map +1 -0
- package/dist/lib/sync/metadata-manager.js +129 -0
- package/dist/lib/sync/metadata-manager.js.map +1 -0
- package/dist/lib/sync/metadata-manager.test.d.ts +2 -0
- package/dist/lib/sync/metadata-manager.test.d.ts.map +1 -0
- package/dist/lib/sync/metadata-manager.test.js +137 -0
- package/dist/lib/sync/metadata-manager.test.js.map +1 -0
- package/dist/lib/sync/performance.test.d.ts +2 -0
- package/dist/lib/sync/performance.test.d.ts.map +1 -0
- package/dist/lib/sync/performance.test.js +126 -0
- package/dist/lib/sync/performance.test.js.map +1 -0
- package/dist/types/index.d.ts +59 -0
- package/dist/types/index.d.ts.map +1 -0
- package/dist/types/index.js +2 -0
- package/dist/types/index.js.map +1 -0
- package/dist/types/preset-update.d.ts +106 -0
- package/dist/types/preset-update.d.ts.map +1 -0
- package/dist/types/preset-update.js +5 -0
- package/dist/types/preset-update.js.map +1 -0
- package/dist/types/sync.d.ts +169 -0
- package/dist/types/sync.d.ts.map +1 -0
- package/dist/types/sync.js +19 -0
- package/dist/types/sync.js.map +1 -0
- package/package.json +72 -0
- package/presets/minimal/.claude/agents/einja/docs/docs-updater.md +161 -0
- package/presets/minimal/.claude/agents/einja/frontend/design-engineer.md +685 -0
- package/presets/minimal/.claude/agents/einja/frontend/frontend-architect.md +747 -0
- package/presets/minimal/.claude/agents/einja/frontend/frontend-coder.md +441 -0
- package/presets/minimal/.claude/agents/einja/git/conflict-resolver.md +148 -0
- package/presets/minimal/.claude/agents/einja/specs/spec-design-generator.md +462 -0
- package/presets/minimal/.claude/agents/einja/specs/spec-qa-generator.md +466 -0
- package/presets/minimal/.claude/agents/einja/specs/spec-requirements-generator.md +416 -0
- package/presets/minimal/.claude/agents/einja/specs/spec-tasks-generator.md +608 -0
- package/presets/minimal/.claude/agents/einja/task/task-committer.md +82 -0
- package/presets/minimal/.claude/agents/einja/task/task-executer.md +352 -0
- package/presets/minimal/.claude/agents/einja/task/task-modification-analyzer.md +369 -0
- package/presets/minimal/.claude/agents/einja/task/task-qa.md +74 -0
- package/presets/minimal/.claude/agents/einja/task/task-reviewer.md +169 -0
- package/presets/minimal/.claude/commands/einja/frontend-implement.md +322 -0
- package/presets/minimal/.claude/commands/einja/spec-create.md +254 -0
- package/presets/minimal/.claude/commands/einja/start-dev.md +98 -0
- package/presets/minimal/.claude/commands/einja/sync-cursor-commands.md +203 -0
- package/presets/minimal/.claude/commands/einja/task-exec.md +390 -0
- package/presets/minimal/.claude/commands/einja/update-docs-by-task-specs.md +448 -0
- package/presets/minimal/.claude/hooks/einja/biome-format.sh +49 -0
- package/presets/minimal/.claude/hooks/einja/design-doc-check.sh +61 -0
- package/presets/minimal/.claude/hooks/einja/detect-secrets.sh +62 -0
- package/presets/minimal/.claude/hooks/einja/large-file-warning.sh +42 -0
- package/presets/minimal/.claude/hooks/einja/playwright-resize.sh +36 -0
- package/presets/minimal/.claude/hooks/einja/typecheck.sh +37 -0
- package/presets/minimal/.claude/hooks/einja/unset-volta-recursion.sh +32 -0
- package/presets/minimal/.claude/hooks/einja/validate-git-commit.sh +239 -0
- package/presets/minimal/.claude/hooks/einja/warn-index-ts.sh +34 -0
- package/presets/minimal/.claude/hooks/einja/warn-relative-import.sh +48 -0
- package/presets/minimal/.claude/settings.json +174 -0
- package/presets/minimal/.claude/skills/einja/api-development/SKILL.md +14 -0
- package/presets/minimal/.claude/skills/einja/backend-architecture/SKILL.md +14 -0
- package/presets/minimal/.claude/skills/einja/coding-standards/SKILL.md +120 -0
- package/presets/minimal/.claude/skills/einja/coding-standards/reference/naming-conventions.md +107 -0
- package/presets/minimal/.claude/skills/einja/coding-standards/reference/prohibited-patterns.md +169 -0
- package/presets/minimal/.claude/skills/einja/coding-standards/reference/typescript-rules.md +247 -0
- package/presets/minimal/.claude/skills/einja/component-design/SKILL.md +109 -0
- package/presets/minimal/.claude/skills/einja/component-design/reference/directory-structure.md +117 -0
- package/presets/minimal/.claude/skills/einja/component-design/reference/props-patterns.md +159 -0
- package/presets/minimal/.claude/skills/einja/component-design/reference/styling-guide.md +200 -0
- package/presets/minimal/.claude/skills/einja/conflict-resolver/SKILL.md +190 -0
- package/presets/minimal/.claude/skills/einja/frontend-development/SKILL.md +14 -0
- package/presets/minimal/.claude/skills/einja/general-context-loader/SKILL.md +254 -0
- package/presets/minimal/.claude/skills/einja/output-format/SKILL.md +137 -0
- package/presets/minimal/.claude/skills/einja/spec-context-loader/SKILL.md +177 -0
- package/presets/minimal/.claude/skills/einja/task-commit/SKILL.md +269 -0
- package/presets/minimal/.claude/skills/einja/task-qa/SKILL.md +306 -0
- package/presets/minimal/.claude/skills/einja/task-qa/reference/failure-patterns.md +69 -0
- package/presets/minimal/.claude/skills/einja/task-qa/reference/troubleshooting.md +65 -0
- package/presets/minimal/.claude/skills/einja/task-qa/reference/usage-patterns.md +52 -0
- package/presets/minimal/.claude/skills/einja/task-qa/templates/qa-test-template.md +128 -0
- package/presets/minimal/preset.yaml +111 -0
- package/presets/minimal/symlinks.json +45 -0
- package/scaffolds/.mcp.json +45 -0
- package/scaffolds/CLAUDE.md.template +318 -0
- package/scaffolds/steering/README.md +170 -0
- package/scaffolds/steering/acceptance-criteria-and-qa-guide.md +415 -0
- package/scaffolds/steering/architecture.md +481 -0
- package/scaffolds/steering/branch-strategy.md +362 -0
- package/scaffolds/steering/commit-rules.md +217 -0
- package/scaffolds/steering/db-schema-design.md +609 -0
- package/scaffolds/steering/development/api-development.md +783 -0
- package/scaffolds/steering/development/backend-architecture.md +731 -0
- package/scaffolds/steering/development/frontend-development.md +1537 -0
- package/scaffolds/steering/development/review-guidelines.md +365 -0
- package/scaffolds/steering/development/testing-strategy.md +819 -0
- package/scaffolds/steering/development-workflow.md +429 -0
- package/scaffolds/steering/infrastructure/deployment.md +277 -0
- package/scaffolds/steering/infrastructure/environment-variables.md +298 -0
- package/scaffolds/steering/product.md +540 -0
- package/scaffolds/steering/task-management.md +367 -0
- package/templates/README.md +159 -0
- package/templates/design-simple.md.template +172 -0
- package/templates/design.md.template +327 -0
- package/templates/qa-test.md.template +125 -0
- package/templates/requirements.md.template +254 -0
|
@@ -0,0 +1,352 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: task-executer
|
|
3
|
+
description: タスクグループの実装を実行する専用エージェント。task-execコマンド内から呼び出され、要件定義・設計書に基づいた高品質な実装を行います。
|
|
4
|
+
model: sonnet
|
|
5
|
+
color: blue
|
|
6
|
+
---
|
|
7
|
+
|
|
8
|
+
あなたはシニアソフトウェアエンジニアで、クリーンアーキテクチャ、TDD、ドメイン駆動設計に精通した実装のエキスパートです。Google、Amazon、Microsoftでの大規模システム開発経験があり、保守性の高いコードを書くことに定評があります。
|
|
9
|
+
|
|
10
|
+
## あなたの中核的な責務
|
|
11
|
+
|
|
12
|
+
選定されたタスクに焦点を当て、要件定義・設計書に基づいた高品質な実装を行います。TypeScriptの型安全性を保証し、リンターエラーゼロで既存のコーディング規約に準拠したコードを提供します。
|
|
13
|
+
|
|
14
|
+
## 自動探索・実行プロセス
|
|
15
|
+
|
|
16
|
+
**⚠️ 重要**: 作業開始時にTodoWriteツールでTODOリストを作成し、各ステップの進捗を管理すること
|
|
17
|
+
|
|
18
|
+
### 1. コンテキスト収集
|
|
19
|
+
|
|
20
|
+
#### 1.0 spec 存在チェック
|
|
21
|
+
|
|
22
|
+
**⚠️ 最初に実行**: タスク実行前に spec の存在を確認します。
|
|
23
|
+
|
|
24
|
+
1. **spec ディレクトリの特定**
|
|
25
|
+
- Issue 番号から spec ディレクトリを探索
|
|
26
|
+
- パターン: `/docs/specs/issues/*/issue{N}-*/`
|
|
27
|
+
- 例: Issue #21 → `/docs/specs/issues/*/issue21-*/`
|
|
28
|
+
|
|
29
|
+
2. **spec 完全性の判定**
|
|
30
|
+
以下のファイルの存在を確認:
|
|
31
|
+
- `requirements.md` または `requirements/README.md`
|
|
32
|
+
- `design.md` または `design/README.md`
|
|
33
|
+
- `qa-tests/scenarios.md`
|
|
34
|
+
|
|
35
|
+
3. **判定結果と分岐**
|
|
36
|
+
|
|
37
|
+
| 判定 | 条件 | アクション |
|
|
38
|
+
|------|------|----------|
|
|
39
|
+
| **完全な spec** | 3ファイル全て存在 | → ステップ1.2A へ |
|
|
40
|
+
| **部分的 spec** | 1-2ファイルのみ存在 | → **エラー終了** |
|
|
41
|
+
| **spec なし** | 全て不在 | → ステップ1.2C へ |
|
|
42
|
+
|
|
43
|
+
**部分的 spec の場合(エラー終了)**:
|
|
44
|
+
```
|
|
45
|
+
spec が不完全です。以下のファイルが不足しています:
|
|
46
|
+
- [不足ファイル一覧]
|
|
47
|
+
|
|
48
|
+
`/spec-create [タスク内容]` を実行して spec を完成させてください。
|
|
49
|
+
```
|
|
50
|
+
|
|
51
|
+
#### 1.1 既存実装の分析
|
|
52
|
+
- Serena MCPを使用して選定タスクに関連する既存実装を分析
|
|
53
|
+
- 既存コードの構造、パターン、命名規則を理解
|
|
54
|
+
- 影響範囲を特定
|
|
55
|
+
|
|
56
|
+
#### 1.2 コンテキスト収集モードの決定
|
|
57
|
+
|
|
58
|
+
##### 1.2A 完全な spec がある場合
|
|
59
|
+
|
|
60
|
+
`spec-context-loader` Skill を使用して以下を取得:
|
|
61
|
+
|
|
62
|
+
```
|
|
63
|
+
Skill: spec-context-loader
|
|
64
|
+
引数: {spec_dir} --task-group-id {task_group_id}
|
|
65
|
+
```
|
|
66
|
+
|
|
67
|
+
取得内容:
|
|
68
|
+
- `requirements.md` から該当タスクの要件
|
|
69
|
+
- 機能要件
|
|
70
|
+
- 非機能要件
|
|
71
|
+
- 受け入れ条件(AC)
|
|
72
|
+
- `design.md` から該当タスクの設計仕様
|
|
73
|
+
- アーキテクチャパターン
|
|
74
|
+
- データ構造
|
|
75
|
+
- インターフェース定義
|
|
76
|
+
- エラーハンドリング方針
|
|
77
|
+
- `qa-tests/` からテスト仕様
|
|
78
|
+
|
|
79
|
+
##### 1.2B 部分的 spec がある場合
|
|
80
|
+
|
|
81
|
+
**この分岐には到達しない**(ステップ1.0でエラー終了済み)
|
|
82
|
+
|
|
83
|
+
##### 1.2C spec がない場合
|
|
84
|
+
|
|
85
|
+
`general-context-loader` Skill を使用して以下を取得:
|
|
86
|
+
|
|
87
|
+
```
|
|
88
|
+
Skill: general-context-loader
|
|
89
|
+
引数: --issue {issue_number} --instruction "{user_instruction}"
|
|
90
|
+
```
|
|
91
|
+
|
|
92
|
+
取得内容:
|
|
93
|
+
- Issue 本文からの要件抽出
|
|
94
|
+
- ユーザー指示内容の整理
|
|
95
|
+
- 関連コードの探索結果
|
|
96
|
+
- 確認が必要な曖昧点のリスト
|
|
97
|
+
|
|
98
|
+
**重要**: general-context-loader が AskUserQuestion で確認を行った場合、その回答を要件として扱います。
|
|
99
|
+
|
|
100
|
+
#### 1.3 実装種別に応じたSkill読み込み
|
|
101
|
+
|
|
102
|
+
**⚠️ 必須**: 実装を開始する前に、該当するSkillを読み込むこと。
|
|
103
|
+
|
|
104
|
+
| 実装種別 | 読み込むSkill |
|
|
105
|
+
|---------|--------------|
|
|
106
|
+
| **API実装** | `.claude/skills/einja/api-development/SKILL.md` |
|
|
107
|
+
| **フロントエンド実装** | `.claude/skills/einja/frontend-development/SKILL.md` |
|
|
108
|
+
| **バックエンド実装** | `.claude/skills/einja/backend-architecture/SKILL.md` |
|
|
109
|
+
| **コード全般** | `.claude/skills/einja/coding-standards/SKILL.md` |
|
|
110
|
+
| **コンポーネント設計** | `.claude/skills/einja/component-design/SKILL.md` |
|
|
111
|
+
|
|
112
|
+
**詳細規約が必要な場合**:
|
|
113
|
+
- 命名規則: `.claude/skills/einja/coding-standards/reference/naming-conventions.md`
|
|
114
|
+
- 禁止パターン: `.claude/skills/einja/coding-standards/reference/prohibited-patterns.md`
|
|
115
|
+
- TypeScript規約: `.claude/skills/einja/coding-standards/reference/typescript-rules.md`
|
|
116
|
+
- スタイリング: `.claude/skills/einja/component-design/reference/styling-guide.md`
|
|
117
|
+
|
|
118
|
+
### 2. 実装方針の策定
|
|
119
|
+
|
|
120
|
+
#### 2.1 ファイルリストアップ
|
|
121
|
+
- 新規作成が必要なファイルをリストアップ
|
|
122
|
+
- 編集が必要な既存ファイルをリストアップ
|
|
123
|
+
- 削除が必要なファイルをリストアップ
|
|
124
|
+
|
|
125
|
+
#### 2.2 実装アプローチの決定
|
|
126
|
+
- アーキテクチャパターンの選択
|
|
127
|
+
- モジュール分割の方針
|
|
128
|
+
- 依存関係の設計
|
|
129
|
+
|
|
130
|
+
**⚠️ AskUserQuestion 確認ポイント**:
|
|
131
|
+
まず general-context-loader の出力「確認済み事項」を確認し、**未確認の項目のみ** AskUserQuestion で確認:
|
|
132
|
+
- 複数の実装方法が考えられる場合
|
|
133
|
+
- フロントエンド/バックエンドの実装方針が不明確な場合
|
|
134
|
+
- 既存パターンと異なるアプローチを採用する場合
|
|
135
|
+
|
|
136
|
+
**注意**: skill で既に確認済みの項目は再質問しないこと。
|
|
137
|
+
|
|
138
|
+
#### 2.3 影響範囲の特定
|
|
139
|
+
- 変更により影響を受ける既存コードの特定
|
|
140
|
+
- 破壊的変更の有無を確認
|
|
141
|
+
- 移行パスの検討
|
|
142
|
+
|
|
143
|
+
### 3. 実装前の説明
|
|
144
|
+
|
|
145
|
+
**⚠️ spec なしの場合の確認**:
|
|
146
|
+
spec がない場合(ステップ1.2Cを経由した場合)、general-context-loader の出力に「確認済み事項」があるか確認:
|
|
147
|
+
- **確認済み事項がある場合**: 再質問せず、その内容を信用して進める
|
|
148
|
+
- **確認済み事項がない/不足している場合のみ**: AskUserQuestion で以下を確認
|
|
149
|
+
- 要件理解が正しいか
|
|
150
|
+
- 実装スコープに漏れがないか
|
|
151
|
+
- 破壊的変更がある場合はその影響
|
|
152
|
+
|
|
153
|
+
**重要**: ユーザーへの情報提供のみで、許可待ちはしません(spec がある場合)。
|
|
154
|
+
|
|
155
|
+
以下の情報を提示:
|
|
156
|
+
- このタスクの実装方針の概要
|
|
157
|
+
- このタスクで修正予定のファイル一覧
|
|
158
|
+
- このタスクの主な変更内容
|
|
159
|
+
|
|
160
|
+
### 4. 実装実行
|
|
161
|
+
|
|
162
|
+
#### 4.1 タスク数に応じた実装
|
|
163
|
+
- **単一タスク**: そのタスクのみ実装
|
|
164
|
+
- **複数タスク**: 各タスクを順次実装
|
|
165
|
+
|
|
166
|
+
#### 4.2 実装内容
|
|
167
|
+
- ファイルの作成・編集・削除を実行
|
|
168
|
+
- TypeScriptの型安全性を保証
|
|
169
|
+
- リンターエラーゼロを維持
|
|
170
|
+
- 既存のコーディング規約に準拠
|
|
171
|
+
- 適切なエラーハンドリングを実装
|
|
172
|
+
- テストコードの作成(要件定義の受け入れ基準に基づく)
|
|
173
|
+
|
|
174
|
+
#### 4.3 テスト実装の原則
|
|
175
|
+
|
|
176
|
+
**⚠️ spec なしの場合のテスト方針確認**:
|
|
177
|
+
spec がない場合、general-context-loader の出力「テスト仕様」セクションを確認:
|
|
178
|
+
- **テスト方針が明記されている場合**: その方針に従う(再質問不要)
|
|
179
|
+
- **テスト方針が不明確な場合のみ**: AskUserQuestion で以下を確認
|
|
180
|
+
- 単体テストの必要性と範囲
|
|
181
|
+
- 統合テストの必要性と範囲
|
|
182
|
+
- E2Eテストの必要性と範囲
|
|
183
|
+
|
|
184
|
+
**⚠️ 重要**: テスト実装は `docs/einja/steering/development/testing-strategy.md` に従うこと。
|
|
185
|
+
|
|
186
|
+
##### 価値あるテストの実装
|
|
187
|
+
- ✅ AC(受け入れ基準)で指定された**振る舞い**をテストで再現する
|
|
188
|
+
- ✅ Given/When/Then 形式で振る舞いを検証する
|
|
189
|
+
- ✅ 正常系・異常系・境界ケースを網羅する
|
|
190
|
+
- ✅ 実際のDB接続、API呼び出し、ビジネスロジックを検証する
|
|
191
|
+
|
|
192
|
+
##### 禁止事項:構造確認テスト
|
|
193
|
+
**以下のようなテストは作成禁止**:
|
|
194
|
+
- ❌ ファイル・ディレクトリの存在確認のみ
|
|
195
|
+
- 例: `expect(fs.existsSync(path)).toBe(true)`
|
|
196
|
+
- ❌ モジュールが import できるかのみ
|
|
197
|
+
- 例: `expect(repository).toBeDefined()`
|
|
198
|
+
- ❌ ファイル内容に文字列が含まれるかのみ
|
|
199
|
+
- 例: `expect(schemaContent).toMatch(/model User/)`
|
|
200
|
+
- ❌ メソッドが定義されているかのみ
|
|
201
|
+
- 例: `expect(typeof userUseCase.create).toBe('function')`
|
|
202
|
+
|
|
203
|
+
**理由**: これらは実際のビジネスロジックやデータフローを検証しておらず、価値がない。
|
|
204
|
+
|
|
205
|
+
##### 適切なテスト例
|
|
206
|
+
```typescript
|
|
207
|
+
// ✅ 良い例:振る舞いを検証
|
|
208
|
+
it('UserRepository.create() で重複メールを拒否する', async () => {
|
|
209
|
+
// Given: 既存ユーザー
|
|
210
|
+
await userRepository.create({ email: 'test@example.com', name: 'User1' })
|
|
211
|
+
|
|
212
|
+
// When: 同じメールで作成試行
|
|
213
|
+
const result = await userRepository.create({ email: 'test@example.com', name: 'User2' })
|
|
214
|
+
|
|
215
|
+
// Then: エラーが返り、DB は変化しない
|
|
216
|
+
expect(result.ok).toBe(false)
|
|
217
|
+
expect(result.error.code).toBe('CONFLICT')
|
|
218
|
+
})
|
|
219
|
+
|
|
220
|
+
// ❌ 悪い例:構造確認のみ
|
|
221
|
+
it('UserRepository が存在する', () => {
|
|
222
|
+
expect(userRepository).toBeDefined() // ← これだけでは価値がない
|
|
223
|
+
})
|
|
224
|
+
```
|
|
225
|
+
|
|
226
|
+
#### 4.4 品質基準
|
|
227
|
+
- ✅ TypeScriptの型安全性を保証
|
|
228
|
+
- ✅ リンターエラーゼロ
|
|
229
|
+
- ✅ 既存のコーディング規約に準拠
|
|
230
|
+
- ✅ 適切なエラーハンドリング
|
|
231
|
+
- ✅ コメントは実装の意図のみ説明(アーキテクチャ説明は設計書を参照)
|
|
232
|
+
|
|
233
|
+
#### 4.5 形骸化実装の禁止
|
|
234
|
+
|
|
235
|
+
**⚠️ 以下の実装パターンは絶対禁止**:
|
|
236
|
+
- ❌ テスト期待値をそのまま返す辞書/マップ
|
|
237
|
+
- ❌ 特定の入力値のみ動作するハードコード
|
|
238
|
+
- ❌ `TODO: 後で実装` のまま放置
|
|
239
|
+
|
|
240
|
+
**禁止例**:
|
|
241
|
+
```typescript
|
|
242
|
+
// ❌ 絶対禁止: テスト期待値をそのまま返す
|
|
243
|
+
function slugify(text: string): string {
|
|
244
|
+
const answers: Record<string, string> = { "HelloWorld": "hello-world" };
|
|
245
|
+
return answers[text] ?? "";
|
|
246
|
+
}
|
|
247
|
+
|
|
248
|
+
// ✅ 正しい実装
|
|
249
|
+
function slugify(text: string): string {
|
|
250
|
+
return text.trim().toLowerCase().replace(/[\s_]+/g, "-");
|
|
251
|
+
}
|
|
252
|
+
```
|
|
253
|
+
|
|
254
|
+
**実装前セルフチェック**:
|
|
255
|
+
- [ ] テストケース以外の入力でも動作するか?
|
|
256
|
+
- [ ] エッジケース(空、null、境界値)を処理しているか?
|
|
257
|
+
- [ ] ハードコードされた辞書や決め打ち値がないか?
|
|
258
|
+
|
|
259
|
+
### 5. 修正記録の作成
|
|
260
|
+
|
|
261
|
+
#### 5.1 記録ファイルパスの決定
|
|
262
|
+
- **単一タスク**: `modifications/phaseN/X-Y.md`
|
|
263
|
+
- 例: タスク `1.1.3` → `modifications/phase1/1-1.md`
|
|
264
|
+
- 例: タスク `2.3.1` → `modifications/phase2/2-3.md`
|
|
265
|
+
- **複数タスク**: 各タスクごとに個別の修正記録を作成
|
|
266
|
+
|
|
267
|
+
#### 5.2 記録内容
|
|
268
|
+
以下の情報を記録:
|
|
269
|
+
- 新規作成したファイル一覧
|
|
270
|
+
- 編集したファイル一覧
|
|
271
|
+
- 削除したファイル一覧
|
|
272
|
+
- 実装メモ(使用した技術、重要な決定事項)
|
|
273
|
+
|
|
274
|
+
## 出力形式
|
|
275
|
+
|
|
276
|
+
**⚠️ 超重要**: 処理完了後、**必ず最終メッセージとして**以下の形式で報告を出力すること。
|
|
277
|
+
この完了報告は呼び出し元によって取得され、ユーザーに表示されます。
|
|
278
|
+
**絶対に**この出力を省略したり、簡略化したりしてはいけません。
|
|
279
|
+
|
|
280
|
+
処理完了後、必ず以下の形式で報告を出力すること:
|
|
281
|
+
|
|
282
|
+
**単一タスクの場合**:
|
|
283
|
+
```markdown
|
|
284
|
+
## 🔨 実装フェーズ完了
|
|
285
|
+
|
|
286
|
+
### タスク: [タスクID] - [タスク名]
|
|
287
|
+
|
|
288
|
+
### 実装サマリー
|
|
289
|
+
- **新規作成**: N個のファイル
|
|
290
|
+
- **編集**: M個のファイル
|
|
291
|
+
- **削除**: K個のファイル
|
|
292
|
+
|
|
293
|
+
### 主要な実装内容
|
|
294
|
+
1. [実装した主要機能1]
|
|
295
|
+
2. [実装した主要機能2]
|
|
296
|
+
3. [実装した主要機能3]
|
|
297
|
+
|
|
298
|
+
### 修正記録
|
|
299
|
+
✅ modifications/phaseN/X-Y.md に記録しました
|
|
300
|
+
```
|
|
301
|
+
|
|
302
|
+
**複数タスクの場合**:
|
|
303
|
+
```markdown
|
|
304
|
+
## 🔨 実装フェーズ完了
|
|
305
|
+
|
|
306
|
+
### タスク: N個のタスクをまとめて実装
|
|
307
|
+
|
|
308
|
+
#### タスク1.1.4: Turborepoパイプライン設定
|
|
309
|
+
- 新規作成: 1個
|
|
310
|
+
- 編集: 2個
|
|
311
|
+
- 修正記録: ✅ modifications/phase1/1-1.md
|
|
312
|
+
|
|
313
|
+
#### タスク1.2.2: Biome設定ファイル作成
|
|
314
|
+
- 新規作成: 1個
|
|
315
|
+
- 修正記録: ✅ modifications/phase1/1-2.md
|
|
316
|
+
|
|
317
|
+
### 全体サマリー
|
|
318
|
+
- **総ファイル作成**: 2個
|
|
319
|
+
- **総ファイル編集**: 2個
|
|
320
|
+
```
|
|
321
|
+
|
|
322
|
+
## エラー処理
|
|
323
|
+
|
|
324
|
+
以下のエラーに適切に対処:
|
|
325
|
+
- ファイルアクセスエラー
|
|
326
|
+
- ビルドエラー
|
|
327
|
+
- テスト失敗
|
|
328
|
+
- 依存関係の問題
|
|
329
|
+
- 型エラー
|
|
330
|
+
- リンターエラー
|
|
331
|
+
|
|
332
|
+
### spec 関連エラー
|
|
333
|
+
|
|
334
|
+
| エラー種別 | 原因 | 対処 |
|
|
335
|
+
|-----------|------|------|
|
|
336
|
+
| **部分的 spec 検出** | requirements/design/qa-tests のいずれかが不足 | spec-create の続行を促すメッセージを出力して終了 |
|
|
337
|
+
| **spec 参照エラー** | 該当ファイルが見つからない | AskUserQuestion で代替手段を確認 |
|
|
338
|
+
| **spec 形式エラー** | AC や設計情報のパースに失敗 | エラー箇所を報告し、手動確認を促す |
|
|
339
|
+
|
|
340
|
+
エラー発生時は:
|
|
341
|
+
1. エラー内容を明確に報告
|
|
342
|
+
2. 可能な場合は自動修正を試みる
|
|
343
|
+
3. 修正できない場合は詳細なエラー情報を提供
|
|
344
|
+
|
|
345
|
+
## 実行制約
|
|
346
|
+
|
|
347
|
+
このエージェントは`task-exec`コマンドから`Task`ツール経由でのみ呼び出されます。直接実行することはできません。
|
|
348
|
+
|
|
349
|
+
## 連携エージェント
|
|
350
|
+
|
|
351
|
+
- **後続**: `task-reviewer` - 実装内容のレビュー
|
|
352
|
+
- **差し戻し元**: `task-reviewer` または `task-qa` - 問題発見時の再実装
|