create-ai-project 1.12.0 → 1.12.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/package.json +1 -1
- package/.claude/agents/acceptance-test-generator.md +0 -250
- package/.claude/agents/code-reviewer.md +0 -187
- package/.claude/agents/design-sync.md +0 -221
- package/.claude/agents/document-reviewer.md +0 -187
- package/.claude/agents/integration-test-reviewer.md +0 -192
- package/.claude/agents/prd-creator.md +0 -190
- package/.claude/agents/quality-fixer-frontend.md +0 -324
- package/.claude/agents/quality-fixer.md +0 -281
- package/.claude/agents/requirement-analyzer.md +0 -161
- package/.claude/agents/rule-advisor.md +0 -175
- package/.claude/agents/task-decomposer.md +0 -285
- package/.claude/agents/task-executor-frontend.md +0 -264
- package/.claude/agents/task-executor.md +0 -258
- package/.claude/agents/technical-designer-frontend.md +0 -444
- package/.claude/agents/technical-designer.md +0 -368
- package/.claude/agents/work-planner.md +0 -208
- package/.claude/commands/build.md +0 -75
- package/.claude/commands/design.md +0 -37
- package/.claude/commands/front-build.md +0 -103
- package/.claude/commands/front-design.md +0 -42
- package/.claude/commands/front-plan.md +0 -40
- package/.claude/commands/implement.md +0 -73
- package/.claude/commands/plan.md +0 -43
- package/.claude/commands/project-inject.md +0 -76
- package/.claude/commands/refine-skill.md +0 -206
- package/.claude/commands/review.md +0 -78
- package/.claude/commands/sync-skills.md +0 -116
- package/.claude/commands/task.md +0 -13
- package/.claude/settings.local.json +0 -94
- package/.claude/skills/coding-standards/SKILL.md +0 -246
- package/.claude/skills/documentation-criteria/SKILL.md +0 -193
- package/.claude/skills/documentation-criteria/references/adr-template.md +0 -64
- package/.claude/skills/documentation-criteria/references/design-template.md +0 -242
- package/.claude/skills/documentation-criteria/references/plan-template.md +0 -130
- package/.claude/skills/documentation-criteria/references/prd-template.md +0 -109
- package/.claude/skills/frontend/technical-spec/SKILL.md +0 -147
- package/.claude/skills/frontend/typescript-rules/SKILL.md +0 -315
- package/.claude/skills/frontend/typescript-testing/SKILL.md +0 -212
- package/.claude/skills/implementation-approach/SKILL.md +0 -141
- package/.claude/skills/integration-e2e-testing/SKILL.md +0 -146
- package/.claude/skills/project-context/SKILL.md +0 -42
- package/.claude/skills/subagents-orchestration-guide/SKILL.md +0 -212
- package/.claude/skills/task-analyzer/SKILL.md +0 -142
- package/.claude/skills/task-analyzer/references/skills-index.yaml +0 -211
- package/.claude/skills/technical-spec/SKILL.md +0 -86
- package/.claude/skills/typescript-rules/SKILL.md +0 -121
- package/.claude/skills/typescript-testing/SKILL.md +0 -155
|
@@ -1,78 +0,0 @@
|
|
|
1
|
-
---
|
|
2
|
-
description: Design Doc準拠検証と必要に応じた自動修正
|
|
3
|
-
---
|
|
4
|
-
|
|
5
|
-
**コマンドコンテキスト**: 実装完了後の品質保証専用コマンド
|
|
6
|
-
|
|
7
|
-
Design Doc(省略時は直近のもの): $ARGUMENTS
|
|
8
|
-
|
|
9
|
-
**Think deeply** 準拠検証の本質を理解し、以下のステップで実行:
|
|
10
|
-
|
|
11
|
-
## 実行フロー
|
|
12
|
-
|
|
13
|
-
### 1. 前提確認
|
|
14
|
-
```bash
|
|
15
|
-
# Design Docの特定
|
|
16
|
-
ls docs/design/*.md | grep -v template | tail -1
|
|
17
|
-
|
|
18
|
-
# 実装ファイル確認
|
|
19
|
-
git diff --name-only main...HEAD
|
|
20
|
-
```
|
|
21
|
-
|
|
22
|
-
### 2. code-reviewer実行
|
|
23
|
-
Design Doc準拠率を検証:
|
|
24
|
-
- 受入条件の充足確認
|
|
25
|
-
- コード品質チェック
|
|
26
|
-
- 実装完全性の評価
|
|
27
|
-
|
|
28
|
-
### 3. 判定と対応
|
|
29
|
-
|
|
30
|
-
**判定基準(プロジェクト段階を考慮)**:
|
|
31
|
-
- プロトタイプ: 70%以上で合格
|
|
32
|
-
- 本番実装: 90%以上推奨
|
|
33
|
-
- 重要項目(セキュリティ等): 準拠率に関わらず必須
|
|
34
|
-
|
|
35
|
-
**準拠率に基づく対応**:
|
|
36
|
-
|
|
37
|
-
準拠率が低い場合(本番で90%未満):
|
|
38
|
-
```
|
|
39
|
-
検証結果: 準拠率 [X]%
|
|
40
|
-
未充足項目:
|
|
41
|
-
- [項目リスト]
|
|
42
|
-
|
|
43
|
-
修正を実行しますか? (y/n):
|
|
44
|
-
```
|
|
45
|
-
|
|
46
|
-
ユーザーが `y` を選択した場合:
|
|
47
|
-
|
|
48
|
-
## 🧠 修正実行前のメタ認知
|
|
49
|
-
**必須**: `rule-advisor → TodoWrite → task-executor → quality-fixer`
|
|
50
|
-
|
|
51
|
-
1. **rule-advisor実行**: 修正の本質を理解(表面的な対症療法 vs 根本解決)
|
|
52
|
-
2. **TodoWrite更新**: 修正タスクを構造化 → `docs/plans/tasks/review-fixes-YYYYMMDD.md`
|
|
53
|
-
3. **task-executor実行**: 自動修正を段階的実行(5ファイル超過で停止)
|
|
54
|
-
4. **quality-fixer実行**: 品質ゲート通過を確認
|
|
55
|
-
5. **再検証**: code-reviewerで改善度を測定
|
|
56
|
-
|
|
57
|
-
### 4. 最終レポート
|
|
58
|
-
```
|
|
59
|
-
初回準拠率: [X]%
|
|
60
|
-
最終準拠率: [Y]%(修正実行時)
|
|
61
|
-
改善度: [Y-X]%
|
|
62
|
-
|
|
63
|
-
残存課題:
|
|
64
|
-
- [手動対応が必要な項目]
|
|
65
|
-
```
|
|
66
|
-
|
|
67
|
-
## 自動修正可能な項目
|
|
68
|
-
- 単純な未実装の受入条件
|
|
69
|
-
- エラーハンドリング追加
|
|
70
|
-
- 型定義の修正
|
|
71
|
-
- 関数分割(長さ・複雑度の改善)
|
|
72
|
-
|
|
73
|
-
## 自動修正不可能な項目
|
|
74
|
-
- ビジネスロジックの根本的変更
|
|
75
|
-
- アーキテクチャレベルの修正
|
|
76
|
-
- Design Doc自体の不備
|
|
77
|
-
|
|
78
|
-
**スコープ**: Design Doc準拠検証と自動修正まで。
|
|
@@ -1,116 +0,0 @@
|
|
|
1
|
-
---
|
|
2
|
-
description: スキル修正後のメタデータ同期とrule-advisor精度最適化
|
|
3
|
-
---
|
|
4
|
-
|
|
5
|
-
**コマンドコンテキスト**: スキルファイル編集後のメンテナンス作業
|
|
6
|
-
|
|
7
|
-
**Think deeply** rule-advisorの実行精度を最大化するための同期作業:
|
|
8
|
-
|
|
9
|
-
## 実行フロー
|
|
10
|
-
|
|
11
|
-
### 1. スキルファイルのスキャン
|
|
12
|
-
```bash
|
|
13
|
-
# 実行時のスキルディレクトリ
|
|
14
|
-
SKILLS_DIR=".claude/skills"
|
|
15
|
-
INDEX_FILE=".claude/skills/task-analyzer/references/skills-index.yaml"
|
|
16
|
-
|
|
17
|
-
# 全スキルファイルを解析
|
|
18
|
-
find "${SKILLS_DIR}" -name "SKILL.md" -type f | sort
|
|
19
|
-
```
|
|
20
|
-
|
|
21
|
-
### 2. メタデータ同期と最適化
|
|
22
|
-
|
|
23
|
-
#### セクション自動同期
|
|
24
|
-
- 各SKILL.mdの`## `セクションを抽出
|
|
25
|
-
- skills-index.yamlのsectionsを自動更新
|
|
26
|
-
|
|
27
|
-
#### タグの最適化
|
|
28
|
-
- ファイル内容からキーワードを分析
|
|
29
|
-
- 適切なタグの追加提案
|
|
30
|
-
- 不要なタグの削除提案
|
|
31
|
-
|
|
32
|
-
#### typical-useの更新
|
|
33
|
-
- ファイルの変更内容から使用場面を推測
|
|
34
|
-
- より具体的な利用シーンの記述を提案
|
|
35
|
-
|
|
36
|
-
#### key-referencesの補完
|
|
37
|
-
- 新しく追加された概念や手法を検出
|
|
38
|
-
- 関連する参考文献の追加を提案
|
|
39
|
-
|
|
40
|
-
### 3. rule-advisor向け最適化
|
|
41
|
-
|
|
42
|
-
メタデータの質を向上させ、rule-advisorが正確にスキルを選択できるよう調整:
|
|
43
|
-
|
|
44
|
-
```
|
|
45
|
-
=== スキルメタデータ同期 ===
|
|
46
|
-
対象: .claude/skills
|
|
47
|
-
|
|
48
|
-
実行した更新:
|
|
49
|
-
✅ sections同期
|
|
50
|
-
- typescript-testing: 2セクション追加
|
|
51
|
-
- coding-standards: 1セクション更新
|
|
52
|
-
|
|
53
|
-
✅ tags最適化
|
|
54
|
-
- typescript-rules: [functional-programming]タグ追加を提案
|
|
55
|
-
- technical-spec: [deprecated]タグ削除を提案
|
|
56
|
-
|
|
57
|
-
✅ typical-use改善
|
|
58
|
-
- 3スキルの説明をより具体的に更新
|
|
59
|
-
|
|
60
|
-
最終結果: rule-advisor精度向上のための最適化完了
|
|
61
|
-
```
|
|
62
|
-
|
|
63
|
-
## 🧠 メタ認知ポイント
|
|
64
|
-
|
|
65
|
-
**本質的な目的**:
|
|
66
|
-
- 単なる整合性維持ではなく、rule-advisorの選択精度向上
|
|
67
|
-
- スキル編集作業の仕上げとしてのメタデータ最適化
|
|
68
|
-
|
|
69
|
-
**品質基準**:
|
|
70
|
-
- sectionsは100%同期必須
|
|
71
|
-
- tagsは内容を正確に反映
|
|
72
|
-
- typical-useは具体的な利用場面を明示
|
|
73
|
-
- key-referencesは最新の手法を網羅
|
|
74
|
-
|
|
75
|
-
## 変更要否の判断
|
|
76
|
-
|
|
77
|
-
以下の順序で評価:
|
|
78
|
-
- sectionsが100%同期済み → 「同期確認完了、更新不要」と報告して終了
|
|
79
|
-
- 内容とタグが適切に一致 → 更新不要と判断
|
|
80
|
-
- 改善の余地がある場合のみ → 具体的な修正提案を提示
|
|
81
|
-
|
|
82
|
-
**注意**: 毎回変更する必要はありません。変更不要な場合はその旨を明確に報告して終了してください。
|
|
83
|
-
|
|
84
|
-
## 実行タイミング
|
|
85
|
-
|
|
86
|
-
- スキルファイル編集後(必須)
|
|
87
|
-
- 新しいスキルファイル追加時
|
|
88
|
-
- 大規模なスキル改訂後
|
|
89
|
-
- rule-advisorの選択精度が低下したと感じた時
|
|
90
|
-
|
|
91
|
-
## 出力例
|
|
92
|
-
|
|
93
|
-
```
|
|
94
|
-
=== スキルメタデータ同期開始 ===
|
|
95
|
-
対象: .claude/skills (13スキル)
|
|
96
|
-
|
|
97
|
-
[1/13] typescript-rules
|
|
98
|
-
✅ sections: 7件同期完了
|
|
99
|
-
💡 tags提案: +[functional-programming, dependency-injection]
|
|
100
|
-
💡 typical-use: "TypeScript実装全般" → "型安全性重視の実装とモダンTypeScript機能活用"
|
|
101
|
-
|
|
102
|
-
[2/13] typescript-testing
|
|
103
|
-
✅ sections: 2件追加(テストの粒度、モックの型安全性)
|
|
104
|
-
✅ tags: 変更なし
|
|
105
|
-
✅ typical-use: 現状維持
|
|
106
|
-
|
|
107
|
-
...
|
|
108
|
-
|
|
109
|
-
=== 同期完了 ===
|
|
110
|
-
更新: 3スキル
|
|
111
|
-
提案: 5件(承認してください)
|
|
112
|
-
|
|
113
|
-
rule-advisor精度向上: 推定15%改善
|
|
114
|
-
```
|
|
115
|
-
|
|
116
|
-
**スコープ**: スキル修正作業後のメタデータ同期とrule-advisor精度最適化。
|
package/.claude/commands/task.md
DELETED
|
@@ -1,94 +0,0 @@
|
|
|
1
|
-
{
|
|
2
|
-
"$schema": "https://json.schemastore.org/claude-code-settings.json",
|
|
3
|
-
"permissions": {
|
|
4
|
-
"allow": [
|
|
5
|
-
"Bash(npm run check:unused:*)",
|
|
6
|
-
"Read(/Users/kagawashinsuke/Documents/tacoms-ai-bot/scripts/**)",
|
|
7
|
-
"WebSearch",
|
|
8
|
-
"Bash(npx ts-prune:*)",
|
|
9
|
-
"Bash(git checkout:*)",
|
|
10
|
-
"Bash(git pull:*)",
|
|
11
|
-
"Bash(chmod:*)",
|
|
12
|
-
"Bash(git add:*)",
|
|
13
|
-
"Bash(git commit:*)",
|
|
14
|
-
"Bash(gh api:*)",
|
|
15
|
-
"Bash(git branch:*)",
|
|
16
|
-
"WebFetch(domain:github.com)",
|
|
17
|
-
"Bash(npm install:*)",
|
|
18
|
-
"Bash(git reset:*)",
|
|
19
|
-
"WebFetch(domain:qiita.com)",
|
|
20
|
-
"Bash(cat:*)",
|
|
21
|
-
"Bash(git push:*)",
|
|
22
|
-
"WebFetch(domain:mermaid.js.org)",
|
|
23
|
-
"Bash(gh pr view:*)",
|
|
24
|
-
"Bash(gh pr diff:*)",
|
|
25
|
-
"Read(//tmp/**)",
|
|
26
|
-
"Bash(gh repo clone:*)",
|
|
27
|
-
"Bash(git stash:*)",
|
|
28
|
-
"Bash(npm run lang:ja:*)",
|
|
29
|
-
"Bash(find:*)",
|
|
30
|
-
"Bash(awk:*)",
|
|
31
|
-
"Bash(grep:*)",
|
|
32
|
-
"Bash(xargs basename:*)",
|
|
33
|
-
"WebFetch(domain:dev.to)",
|
|
34
|
-
"Bash(gh pr checks:*)",
|
|
35
|
-
"WebFetch(domain:www.anthropic.com)",
|
|
36
|
-
"Read(//Users/kagawashinsuke/Documents/agentic-code/**)",
|
|
37
|
-
"Read(//Users/kagawashinsuke/Documents/claude-code-workflows/**)",
|
|
38
|
-
"Bash(git -C /Users/kagawashinsuke/Documents/claude-code-workflows diff agents/acceptance-test-generator.md)",
|
|
39
|
-
"Read(//Users/kagawashinsuke/Documents/project-qb/**)",
|
|
40
|
-
"Bash(git rm:*)",
|
|
41
|
-
"Bash(git ls-tree:*)",
|
|
42
|
-
"Bash(node bin/create-project.js:*)",
|
|
43
|
-
"Bash(node:*)",
|
|
44
|
-
"WebFetch(domain:martinfowler.com)",
|
|
45
|
-
"Bash(test:*)",
|
|
46
|
-
"WebFetch(domain:www.agileconnection.com)",
|
|
47
|
-
"Bash(git log:*)",
|
|
48
|
-
"Bash(git mv:*)",
|
|
49
|
-
"Bash(gh pr create:*)",
|
|
50
|
-
"Bash(xargs git branch -D)",
|
|
51
|
-
"Bash(ls:*)",
|
|
52
|
-
"Bash(git clone:*)",
|
|
53
|
-
"WebFetch(domain:support.atlassian.com)",
|
|
54
|
-
"WebFetch(domain:community.atlassian.com)",
|
|
55
|
-
"WebFetch(domain:www.velir.com)",
|
|
56
|
-
"WebFetch(domain:scottspence.com)",
|
|
57
|
-
"WebFetch(domain:arxiv.org)",
|
|
58
|
-
"WebFetch(domain:dl.acm.org)",
|
|
59
|
-
"Bash(gh issue create:*)",
|
|
60
|
-
"Bash(git fetch:*)",
|
|
61
|
-
"Bash(git diff:*)",
|
|
62
|
-
"Bash(fi)",
|
|
63
|
-
"Bash(done)",
|
|
64
|
-
"WebFetch(domain:www.npmjs.com)",
|
|
65
|
-
"Bash(npm pack:*)",
|
|
66
|
-
"Bash(npm view:*)",
|
|
67
|
-
"Bash(npx:*)",
|
|
68
|
-
"WebFetch(domain:zenn.dev)",
|
|
69
|
-
"Bash(npm version:*)",
|
|
70
|
-
"Bash(xargs -I {} sh -c 'echo \"\"\"\"=== {} ===\"\"\"\" && head -60 \"\"\"\"{}\"\"\"\"')",
|
|
71
|
-
"Bash(npm run lang:status:*)",
|
|
72
|
-
"Bash(npm run lang:en:*)",
|
|
73
|
-
"Bash(gh pr list:*)",
|
|
74
|
-
"Bash(xargs:*)",
|
|
75
|
-
"Bash(npm pkg:*)",
|
|
76
|
-
"Bash(head:*)",
|
|
77
|
-
"Bash(for agent in acceptance-test-generator code-reviewer design-sync document-reviewer integration-test-reviewer prd-creator quality-fixer quality-fixer-frontend requirement-analyzer rule-advisor task-decomposer task-executor task-executor-frontend technical-designer technical-designer-frontend work-planner)",
|
|
78
|
-
"Bash(do)",
|
|
79
|
-
"Bash(echo:*)",
|
|
80
|
-
"Bash(while read skill)",
|
|
81
|
-
"Bash(do if [ -f \".claude/skills-en/$skill/SKILL.md\" ])",
|
|
82
|
-
"Bash(then echo \"✅ $skill\" else echo \"❌ $skill \\(NOT FOUND\\)\" fi done)",
|
|
83
|
-
"Bash(for agent in acceptance-test-generator document-reviewer)",
|
|
84
|
-
"Bash(__NEW_LINE__ echo \"\")",
|
|
85
|
-
"WebFetch(domain:docs.anthropic.com)",
|
|
86
|
-
"Bash(git tag:*)",
|
|
87
|
-
"Bash(npm run build:*)",
|
|
88
|
-
"Bash(npm run check:*)"
|
|
89
|
-
],
|
|
90
|
-
"deny": [],
|
|
91
|
-
"ask": [],
|
|
92
|
-
"defaultMode": "acceptEdits"
|
|
93
|
-
}
|
|
94
|
-
}
|
|
@@ -1,246 +0,0 @@
|
|
|
1
|
-
---
|
|
2
|
-
name: coding-standards
|
|
3
|
-
description: 保守性、可読性、品質のための言語非依存コーディング原則。機能実装、リファクタリング、コードレビュー時に使用。
|
|
4
|
-
---
|
|
5
|
-
|
|
6
|
-
# 普遍的コーディング規約
|
|
7
|
-
|
|
8
|
-
## 技術的アンチパターン(赤信号パターン)
|
|
9
|
-
|
|
10
|
-
以下のパターンを検出したら即座に停止し、設計を見直すこと:
|
|
11
|
-
|
|
12
|
-
### コード品質のアンチパターン
|
|
13
|
-
1. **同じようなコードを3回以上書いた** - Rule of Threeに違反
|
|
14
|
-
2. **単一ファイルに複数の責務が混在** - 単一責任原則(SRP)違反
|
|
15
|
-
3. **同じ内容を複数ファイルで定義** - DRY原則違反
|
|
16
|
-
4. **依存関係を確認せずに変更** - 予期しない影響の可能性
|
|
17
|
-
5. **コメントアウトでコード無効化** - バージョン管理を活用すべき
|
|
18
|
-
6. **エラーの握りつぶし** - 問題の隠蔽は技術的負債
|
|
19
|
-
7. **型アサーション(as)の多用** - 型安全性の放棄
|
|
20
|
-
|
|
21
|
-
### 設計のアンチパターン
|
|
22
|
-
- **「一旦動くように」という思考** - 技術的負債の蓄積
|
|
23
|
-
- **継ぎ足し実装** - 既存コードへの無計画な追加
|
|
24
|
-
- **不確実技術の楽観的実装** - 未知要素を「たぶん動く」前提で設計
|
|
25
|
-
- **対処療法的修正** - 根本原因を解決しない表面的な修正
|
|
26
|
-
- **無計画な大規模変更** - 段階的アプローチの欠如
|
|
27
|
-
|
|
28
|
-
## 基本原則
|
|
29
|
-
|
|
30
|
-
- **積極的なリファクタリング** - 技術的負債を防ぎ、健全性を維持
|
|
31
|
-
- **使われない「念のため」のコード禁止** - YAGNI原則(Kent Beck)に反する
|
|
32
|
-
|
|
33
|
-
## コメント記述ルール
|
|
34
|
-
|
|
35
|
-
- **機能説明重視**: コードが「何をするか」を記述
|
|
36
|
-
- **履歴情報禁止**: 開発履歴は記載しない
|
|
37
|
-
- **タイムレス**: いつ読んでも有効な内容のみ記述
|
|
38
|
-
- **簡潔性**: 必要最小限の説明にとどめる
|
|
39
|
-
|
|
40
|
-
## エラーハンドリングの基本原則
|
|
41
|
-
|
|
42
|
-
### Fail-Fast原則
|
|
43
|
-
エラー時は速やかに失敗させ、不正な状態での処理継続を防ぐ。エラーの握りつぶしは禁止。
|
|
44
|
-
|
|
45
|
-
詳細な実装方法(Result型、カスタムエラークラス、層別エラー処理など)は各言語・フレームワークのルールを参照。
|
|
46
|
-
|
|
47
|
-
## Rule of Three - コード重複の判断基準
|
|
48
|
-
|
|
49
|
-
Martin Fowler「Refactoring」に基づく重複コードの扱い方:
|
|
50
|
-
|
|
51
|
-
| 重複回数 | 対応 | 理由 |
|
|
52
|
-
|---------|------|------|
|
|
53
|
-
| 1回目 | インライン実装 | 将来の変化が予測できない |
|
|
54
|
-
| 2回目 | 将来の統合を意識 | パターンが見え始める |
|
|
55
|
-
| 3回目 | 共通化実施 | パターンが確立された |
|
|
56
|
-
|
|
57
|
-
### 共通化の判断基準
|
|
58
|
-
|
|
59
|
-
**共通化すべきケース**
|
|
60
|
-
- ビジネスロジックの重複
|
|
61
|
-
- 複雑な処理アルゴリズム
|
|
62
|
-
- 一括変更が必要になる可能性が高い箇所
|
|
63
|
-
- バリデーションルール
|
|
64
|
-
|
|
65
|
-
**共通化を避けるべきケース**
|
|
66
|
-
- 偶然の一致(たまたま同じコード)
|
|
67
|
-
- 将来異なる方向に進化する可能性
|
|
68
|
-
- 共通化により可読性が著しく低下
|
|
69
|
-
- テストコード内の簡単なヘルパー
|
|
70
|
-
|
|
71
|
-
## よくある失敗パターンと回避方法
|
|
72
|
-
|
|
73
|
-
### パターン1: エラー修正の連鎖
|
|
74
|
-
**症状**: エラーを修正すると新しいエラーが発生
|
|
75
|
-
**原因**: 根本原因を理解せずに表面的な修正
|
|
76
|
-
**回避方法**: 5 Whysで根本原因を特定してから修正
|
|
77
|
-
|
|
78
|
-
### パターン2: 型安全性の放棄
|
|
79
|
-
**症状**: any型やasの多用
|
|
80
|
-
**原因**: 型エラーを回避したい衝動
|
|
81
|
-
**回避方法**: unknown型と型ガードで安全に処理
|
|
82
|
-
|
|
83
|
-
### パターン3: テスト不足での実装
|
|
84
|
-
**症状**: 実装後にバグ多発
|
|
85
|
-
**原因**: Red-Green-Refactorプロセスの無視
|
|
86
|
-
**回避方法**: 必ず失敗するテストから開始
|
|
87
|
-
|
|
88
|
-
### パターン4: 技術的不確実性の無視
|
|
89
|
-
**症状**: 新技術導入時の想定外エラー多発
|
|
90
|
-
**原因**: 事前調査なしで「公式ドキュメント通りなら動くはず」
|
|
91
|
-
**回避方法**:
|
|
92
|
-
- タスクファイル冒頭に確実性評価を記載
|
|
93
|
-
- 確実性lowの場合、最初に最小限の動作確認コードを作成
|
|
94
|
-
|
|
95
|
-
### パターン5: 既存コード調査不足
|
|
96
|
-
**症状**: 重複実装、アーキテクチャ不整合、結合時の障害
|
|
97
|
-
**原因**: 実装前の既存コード理解不足
|
|
98
|
-
**回避方法**:
|
|
99
|
-
- 実装前に類似機能の存在を必ず検索(同じドメイン、責務、設定パターンをキーワードに)
|
|
100
|
-
- 類似機能を発見 → その実装を使用する(新規実装は行わない)
|
|
101
|
-
- 類似機能が技術的負債 → ADRで改善提案を作成してから実装
|
|
102
|
-
- 類似機能が存在しない → 既存の設計思想に沿って新規実装
|
|
103
|
-
- すべての判断と根拠をDesign Docの「既存コードベース分析」セクションに記録
|
|
104
|
-
|
|
105
|
-
## デバッグ手法
|
|
106
|
-
|
|
107
|
-
### 1. エラー分析手順
|
|
108
|
-
1. エラーメッセージ(最初の行)を正確に読む
|
|
109
|
-
2. スタックトレースの最初と最後に注目
|
|
110
|
-
3. 自分のコードが現れる最初の行を特定
|
|
111
|
-
|
|
112
|
-
### 2. 5 Whys - 根本原因分析
|
|
113
|
-
```
|
|
114
|
-
症状: TypeScriptのビルドエラー
|
|
115
|
-
Why1: 型定義が一致しない → Why2: インターフェースが更新された
|
|
116
|
-
Why3: 依存関係の変更 → Why4: パッケージ更新の影響
|
|
117
|
-
Why5: 破壊的変更を含むメジャーバージョンアップ
|
|
118
|
-
根本原因: package.jsonでのバージョン指定が不適切
|
|
119
|
-
```
|
|
120
|
-
|
|
121
|
-
### 3. 最小再現コード
|
|
122
|
-
問題を切り分けるため、最小限のコードで再現を試みる:
|
|
123
|
-
- 関連のない部分を削除
|
|
124
|
-
- モックで外部依存を置き換え
|
|
125
|
-
- 問題が再現する最小構成を作成
|
|
126
|
-
|
|
127
|
-
## 型安全性の基礎
|
|
128
|
-
|
|
129
|
-
**型安全の原則**: `unknown`型と型ガードを使用する。`any`型は型チェックを無効化し、実行時エラーの原因となる。
|
|
130
|
-
|
|
131
|
-
**any型の代替手段(優先順位順)**
|
|
132
|
-
1. **unknown型 + 型ガード**: 外部入力の検証に使用
|
|
133
|
-
2. **ジェネリクス**: 型の柔軟性が必要な場合
|
|
134
|
-
3. **ユニオン型・インターセクション型**: 複数の型の組み合わせ
|
|
135
|
-
4. **型アサーション(最終手段)**: 型が確実な場合のみ
|
|
136
|
-
|
|
137
|
-
**型ガードの実装パターン**
|
|
138
|
-
```typescript
|
|
139
|
-
function isUser(value: unknown): value is User {
|
|
140
|
-
return typeof value === 'object' && value !== null && 'id' in value && 'name' in value
|
|
141
|
-
}
|
|
142
|
-
```
|
|
143
|
-
|
|
144
|
-
**型の複雑性管理**
|
|
145
|
-
- フィールド数: 20個まで(超えたら責務で分割、外部API型は例外)
|
|
146
|
-
- オプショナル率: 30%まで(超えたら必須/任意で分離)
|
|
147
|
-
- ネスト深さ: 3階層まで(超えたらフラット化)
|
|
148
|
-
- 型アサーション: 3回以上使用したら設計見直し
|
|
149
|
-
- **外部API型の扱い**: 制約を緩和し、実態に合わせて定義(内部では適切に変換)
|
|
150
|
-
|
|
151
|
-
## リファクタリング手法
|
|
152
|
-
|
|
153
|
-
**基本方針**
|
|
154
|
-
- 小さなステップ: 段階的改善により、常に動作する状態を維持
|
|
155
|
-
- 安全な変更: 一度に変更する範囲を最小限に抑制
|
|
156
|
-
- 動作保証: 既存の動作を変えないことを確認しながら進める
|
|
157
|
-
|
|
158
|
-
**実施手順**: 現状把握 → 段階的変更 → 動作確認 → 最終検証
|
|
159
|
-
|
|
160
|
-
**優先順位**: 重複コード削除 > 長大な関数分割 > 複雑な条件分岐簡素化 > 型安全性向上
|
|
161
|
-
|
|
162
|
-
## 実装作業の完全性担保
|
|
163
|
-
|
|
164
|
-
### 影響範囲調査の必須手順
|
|
165
|
-
|
|
166
|
-
**完了定義**: 以下3段階すべての完了
|
|
167
|
-
|
|
168
|
-
#### 1. 検索(Discovery)
|
|
169
|
-
```bash
|
|
170
|
-
Grep -n "TargetClass\|TargetMethod" -o content
|
|
171
|
-
Grep -n "DependencyClass" -o content
|
|
172
|
-
Grep -n "targetData\|SetData\|UpdateData" -o content
|
|
173
|
-
```
|
|
174
|
-
|
|
175
|
-
#### 2. 読解(Understanding)
|
|
176
|
-
**必須**: 発見した全ファイルを読み込み、作業に必要な部分をコンテキストに含める:
|
|
177
|
-
- 呼び出し元の目的と文脈
|
|
178
|
-
- 依存関係の方向
|
|
179
|
-
- データフロー: 生成→変更→参照
|
|
180
|
-
|
|
181
|
-
#### 3. 特定(Identification)
|
|
182
|
-
影響範囲の構造化報告(必須):
|
|
183
|
-
```
|
|
184
|
-
## 影響範囲分析
|
|
185
|
-
### 直接影響: ClassA、ClassB(理由明記)
|
|
186
|
-
### 間接影響: SystemX、PrefabY(連携経路明記)
|
|
187
|
-
### 処理フロー: 入力→処理1→処理2→出力
|
|
188
|
-
```
|
|
189
|
-
|
|
190
|
-
**重要**: 検索のみで完了とせず、3段階すべてを実行すること
|
|
191
|
-
|
|
192
|
-
### 未使用コード削除ルール
|
|
193
|
-
|
|
194
|
-
未使用コード検出時 → 使用予定?
|
|
195
|
-
- Yes → 即実装(保留禁止)
|
|
196
|
-
- No → 即削除(Git履歴に残る)
|
|
197
|
-
|
|
198
|
-
対象: コード・ドキュメント・設定ファイル
|
|
199
|
-
|
|
200
|
-
## Red-Green-Refactorプロセス(テストファースト開発)
|
|
201
|
-
|
|
202
|
-
**推奨原則**: コード変更は必ずテストから始める
|
|
203
|
-
|
|
204
|
-
**開発ステップ**:
|
|
205
|
-
1. **Red**: 期待する動作のテストを書く(失敗する)
|
|
206
|
-
2. **Green**: 最小限の実装でテストを通す
|
|
207
|
-
3. **Refactor**: テストが通る状態を維持しながらコード改善
|
|
208
|
-
|
|
209
|
-
**NGケース(テストファースト不要)**:
|
|
210
|
-
- 純粋な設定ファイル変更(.env、config等)
|
|
211
|
-
- ドキュメントのみの更新(README、コメント等)
|
|
212
|
-
- 緊急本番障害対応(ただし事後テスト必須)
|
|
213
|
-
|
|
214
|
-
## テスト設計原則
|
|
215
|
-
|
|
216
|
-
### テストケースの構造
|
|
217
|
-
- テストは「準備(Arrange)」「実行(Act)」「検証(Assert)」の3段階で構成
|
|
218
|
-
- 各テストの目的が明確に分かる命名
|
|
219
|
-
- 1つのテストケースでは1つの振る舞いのみを検証
|
|
220
|
-
|
|
221
|
-
### テストデータ管理
|
|
222
|
-
- テストデータは専用ディレクトリで管理
|
|
223
|
-
- 環境変数はテスト用の値を定義
|
|
224
|
-
- 機密情報は必ずモック化
|
|
225
|
-
- テストデータは最小限に保ち、テストケースの検証目的に直接関連するデータのみ使用
|
|
226
|
-
|
|
227
|
-
### モックとスタブの使用方針
|
|
228
|
-
|
|
229
|
-
**推奨: 単体テストでの外部依存モック化**
|
|
230
|
-
- メリット: テストの独立性と再現性を確保
|
|
231
|
-
- 実践: DB、API、ファイルシステム等の外部依存をモック化
|
|
232
|
-
|
|
233
|
-
**避けるべき: 単体テストでの実際の外部接続**
|
|
234
|
-
- 理由: テスト速度が遅くなり、環境依存の問題が発生するため
|
|
235
|
-
|
|
236
|
-
### テスト失敗時の対応判断基準
|
|
237
|
-
|
|
238
|
-
**テストを修正**: 間違った期待値、存在しない機能参照、実装詳細への依存、テストのためだけの実装
|
|
239
|
-
**実装を修正**: 妥当な仕様、ビジネスロジック、重要なエッジケース
|
|
240
|
-
**判断に迷ったら**: ユーザーに確認
|
|
241
|
-
|
|
242
|
-
## テストの粒度原則
|
|
243
|
-
|
|
244
|
-
### 原則:観測可能な振る舞いのみ
|
|
245
|
-
**テスト対象**:公開API、戻り値、例外、外部呼び出し、永続化された状態
|
|
246
|
-
**テスト対象外**:privateメソッド、内部状態、アルゴリズム詳細
|