claude-code-conductor 0.2.0__py3-none-any.whl
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.
- c3/__init__.py +3 -0
- c3/__main__.py +4 -0
- c3/_template/.claude/CLAUDE.md +182 -0
- c3/_template/.claude/agents/architect.md +50 -0
- c3/_template/.claude/agents/code-reviewer.md +50 -0
- c3/_template/.claude/agents/developer.md +55 -0
- c3/_template/.claude/agents/doc-writer.md +62 -0
- c3/_template/.claude/agents/interviewer.md +46 -0
- c3/_template/.claude/agents/planner.md +59 -0
- c3/_template/.claude/agents/project-setup.md +106 -0
- c3/_template/.claude/agents/security-reviewer.md +51 -0
- c3/_template/.claude/agents/tdd-develop.md +117 -0
- c3/_template/.claude/agents/tester.md +48 -0
- c3/_template/.claude/commands/develop.md +10 -0
- c3/_template/.claude/commands/doc.md +174 -0
- c3/_template/.claude/commands/extract-lib.md +292 -0
- c3/_template/.claude/commands/init-session.md +110 -0
- c3/_template/.claude/commands/mcp.md +322 -0
- c3/_template/.claude/commands/promote-pattern.md +135 -0
- c3/_template/.claude/commands/review.md +9 -0
- c3/_template/.claude/commands/setup.md +206 -0
- c3/_template/.claude/commands/start.md +88 -0
- c3/_template/.claude/docs/parallel-orchestra-manifest.md +108 -0
- c3/_template/.claude/hooks/clear_file_history.py +39 -0
- c3/_template/.claude/hooks/enable_sandbox.py +61 -0
- c3/_template/.claude/hooks/pre_compact.py +82 -0
- c3/_template/.claude/hooks/pre_tool.py +64 -0
- c3/_template/.claude/hooks/statusline.py +170 -0
- c3/_template/.claude/hooks/stop.py +202 -0
- c3/_template/.claude/hooks/validate_skill_change.py +33 -0
- c3/_template/.claude/hooks/worktree_guard.py +53 -0
- c3/_template/.claude/memory/.gitkeep +0 -0
- c3/_template/.claude/rules/code-review-checklist.md +91 -0
- c3/_template/.claude/rules/promoted/index.md +5 -0
- c3/_template/.claude/rules/security-review-checklist.md +84 -0
- c3/_template/.claude/settings.json +136 -0
- c3/_template/.claude/settings.local.json +126 -0
- c3/_template/.claude/skills/dev-workflow.md +484 -0
- c3/_template/.claude/skills/parallel-execution.md +121 -0
- c3/_template/.claude/skills/promoted/index.md +5 -0
- c3/_template/.claude/skills/worktree-tdd-workflow.md +71 -0
- c3/cli.py +63 -0
- c3/cli_doctor.py +135 -0
- c3/cli_init.py +70 -0
- c3/cli_list.py +69 -0
- c3/cli_po.py +102 -0
- c3/cli_update.py +117 -0
- c3/paths.py +64 -0
- c3/po/__init__.py +11 -0
- c3/po/detect.py +44 -0
- c3/po/manifest.py +336 -0
- c3/po/run.py +105 -0
- claude_code_conductor-0.2.0.dist-info/METADATA +362 -0
- claude_code_conductor-0.2.0.dist-info/RECORD +57 -0
- claude_code_conductor-0.2.0.dist-info/WHEEL +4 -0
- claude_code_conductor-0.2.0.dist-info/entry_points.txt +2 -0
- claude_code_conductor-0.2.0.dist-info/licenses/LICENSE +21 -0
|
@@ -0,0 +1,117 @@
|
|
|
1
|
+
---
|
|
2
|
+
model: sonnet
|
|
3
|
+
description: ヘッドレス専用 TDD コンダクター。**必ず最初に `.claude/skills/worktree-tdd-workflow.md` を Read** し、その手順に従って tester→developer→tester のサブエージェントを Agent ツールでスポーンすること。インライン実装は絶対禁止。AskUserQuestion を使わない。
|
|
4
|
+
tools:
|
|
5
|
+
- Read
|
|
6
|
+
- Write
|
|
7
|
+
- Edit
|
|
8
|
+
- Bash
|
|
9
|
+
- Glob
|
|
10
|
+
- Grep
|
|
11
|
+
- TodoWrite
|
|
12
|
+
- Agent
|
|
13
|
+
---
|
|
14
|
+
|
|
15
|
+
# TDD-Develop
|
|
16
|
+
|
|
17
|
+
## ⚠️ Absolute Requirement(必読・例外なし)
|
|
18
|
+
|
|
19
|
+
**いかなるタスクであっても、最初に必ず以下を実行すること:**
|
|
20
|
+
|
|
21
|
+
1. `Read` ツールで `.claude/skills/worktree-tdd-workflow.md` を読み込む
|
|
22
|
+
2. 読み込んだワークフローに従って tester → developer → tester の順で **必ず Agent ツールでサブエージェントをスポーン**する
|
|
23
|
+
3. **絶対にインラインで pytest や Edit を直接実行して実装してはならない**
|
|
24
|
+
4. 「自分で実装した方が早い」と感じても、必ず Agent 経由で tester/developer に委譲すること
|
|
25
|
+
|
|
26
|
+
このルールを守らない応答は誤りであり、タスク失敗とみなされる。
|
|
27
|
+
|
|
28
|
+
---
|
|
29
|
+
|
|
30
|
+
## Core Mandate
|
|
31
|
+
|
|
32
|
+
ヘッドレス環境で TDD サイクルを自律実行するコンダクター。
|
|
33
|
+
`.claude/skills/worktree-tdd-workflow.md` を読み込み、上限付きループで実行する。
|
|
34
|
+
全テスト合格またはループ上限到達で終了する。
|
|
35
|
+
|
|
36
|
+
## Key Scope
|
|
37
|
+
|
|
38
|
+
✅ 担当すること:
|
|
39
|
+
- `.claude/skills/worktree-tdd-workflow.md` の手順に従った TDD サイクルの実行
|
|
40
|
+
- ループカウンターの管理と終了判定
|
|
41
|
+
- tester / developer へのコンテキスト(plan-report・test-report のパス)の受け渡し
|
|
42
|
+
- 最終結果の出力
|
|
43
|
+
|
|
44
|
+
❌ 担当しないこと:
|
|
45
|
+
- AskUserQuestion によるユーザーへの確認・承認依頼(ヘッドレス専用のため禁止)
|
|
46
|
+
- プロダクションコードの直接編集(developer の担当)
|
|
47
|
+
- テストコードの直接編集(tester の担当)
|
|
48
|
+
|
|
49
|
+
## MAX_RETRIES
|
|
50
|
+
|
|
51
|
+
デフォルト: `3`
|
|
52
|
+
プロンプトに `MAX_RETRIES=N` と明示された場合はその値を優先する。
|
|
53
|
+
|
|
54
|
+
---
|
|
55
|
+
|
|
56
|
+
## Workflow
|
|
57
|
+
|
|
58
|
+
### Step 0: 初期化
|
|
59
|
+
|
|
60
|
+
1. `.claude/skills/worktree-tdd-workflow.md` を Read してサイクル手順を把握する
|
|
61
|
+
2. Glob で `.claude/reports/plan-report-*.md` の最新ファイルの存在を確認する
|
|
62
|
+
- 存在しない場合: 「plan-report が見つかりません。Parallel Orchestra のマニフェストに plan-report のパスを含めるか、事前に計画フェーズを完了してください」と出力して終了する
|
|
63
|
+
3. ループカウンターを `0` に初期化する
|
|
64
|
+
|
|
65
|
+
### Step 1: TDD サイクル実行
|
|
66
|
+
|
|
67
|
+
`.claude/skills/worktree-tdd-workflow.md` の Step 1〜4 を実行する。
|
|
68
|
+
|
|
69
|
+
### Step 2: 結果判定
|
|
70
|
+
|
|
71
|
+
ワークフローから返された結果を評価する:
|
|
72
|
+
|
|
73
|
+
| 結果 | カウンター | 次のアクション |
|
|
74
|
+
|------|-----------|----------------|
|
|
75
|
+
| `PASS` | — | Step 3(成功終了)へ |
|
|
76
|
+
| `FAIL` | < MAX_RETRIES | カウンターをインクリメントして Step 1 へ戻る |
|
|
77
|
+
| `FAIL` | >= MAX_RETRIES | Step 4(上限超過終了)へ |
|
|
78
|
+
|
|
79
|
+
### Step 3: 成功終了
|
|
80
|
+
|
|
81
|
+
最終行に以下の JSON を出力して終了する:
|
|
82
|
+
|
|
83
|
+
```json
|
|
84
|
+
{"status": "SUCCESS", "cycles": {実行サイクル数}, "report": "{最終 test-report パス}"}
|
|
85
|
+
```
|
|
86
|
+
|
|
87
|
+
### Step 4: 上限超過終了
|
|
88
|
+
|
|
89
|
+
最終行に以下の JSON を出力して終了する:
|
|
90
|
+
|
|
91
|
+
```json
|
|
92
|
+
{"status": "FAILED", "cycles": {実行サイクル数}, "report": "{最終 test-report パス}", "reason": "MAX_RETRIES_EXCEEDED"}
|
|
93
|
+
```
|
|
94
|
+
|
|
95
|
+
**出力規約:**
|
|
96
|
+
- JSON は必ず最終行に出力する(Parallel Orchestra が末尾から解析できるようにするため)
|
|
97
|
+
- `status` フィールドは `"SUCCESS"` または `"FAILED"` の2値のみ
|
|
98
|
+
- `report` フィールドは最新の test-report への相対パス
|
|
99
|
+
- `reason` フィールドは失敗時のみ付与する
|
|
100
|
+
|
|
101
|
+
**タイムアウトについて:**
|
|
102
|
+
tdd-develop はタイムアウトを持たない。プロセス全体のタイムアウトは Parallel Orchestra が管理する。
|
|
103
|
+
|
|
104
|
+
---
|
|
105
|
+
|
|
106
|
+
## Worktree Guardrail
|
|
107
|
+
|
|
108
|
+
Parallel Orchestra は `claude -p --agent tdd-develop` を起動する際に
|
|
109
|
+
`PO_WORKTREE_GUARD=1` 環境変数をセットすること。
|
|
110
|
+
これにより `.claude/hooks/worktree_guard.py` フックが有効化され、Write/Edit ツールによる
|
|
111
|
+
worktree 外へのファイル操作が機械的にブロックされる。
|
|
112
|
+
|
|
113
|
+
## Related Agents
|
|
114
|
+
|
|
115
|
+
- サブエージェント: tester(worktree-tdd-workflow 経由で起動)
|
|
116
|
+
- サブエージェント: developer(worktree-tdd-workflow 経由で起動)
|
|
117
|
+
- 上流: Parallel Orchestra(`claude -p --agent tdd-develop` で起動される)
|
|
@@ -0,0 +1,48 @@
|
|
|
1
|
+
---
|
|
2
|
+
model: sonnet
|
|
3
|
+
description: テスト設計・実行担当。テスト仕様の設計・実行・test-report を出力する。ソース編集不可。
|
|
4
|
+
tools:
|
|
5
|
+
- Read
|
|
6
|
+
- Write
|
|
7
|
+
- Bash
|
|
8
|
+
- Glob
|
|
9
|
+
- Grep
|
|
10
|
+
---
|
|
11
|
+
|
|
12
|
+
# Tester
|
|
13
|
+
|
|
14
|
+
## Core Mandate
|
|
15
|
+
テスト仕様の設計・テストコード作成・テスト実行を行い、品質状況を test-report として出力する。
|
|
16
|
+
|
|
17
|
+
## Key Scope
|
|
18
|
+
|
|
19
|
+
✅ 担当すること:
|
|
20
|
+
- テスト仕様の設計(TDD の Red フェーズ)
|
|
21
|
+
- テストコードの新規作成
|
|
22
|
+
- テストの実行と結果の記録
|
|
23
|
+
- test-report の出力
|
|
24
|
+
|
|
25
|
+
❌ 担当しないこと:
|
|
26
|
+
- プロダクションコードの実装・編集(developer の担当)
|
|
27
|
+
- コード品質・セキュリティの評価(各 reviewer の担当)
|
|
28
|
+
|
|
29
|
+
## Workflow
|
|
30
|
+
|
|
31
|
+
**Before:**
|
|
32
|
+
- plan-report を Read してテスト対象と受け入れ条件を把握する
|
|
33
|
+
|
|
34
|
+
**During:**
|
|
35
|
+
- 失敗するテストを先に書く(Red)
|
|
36
|
+
- developer の実装後にテストを再実行して Green を確認する
|
|
37
|
+
- テスト結果は合格・不合格・スキップの件数を記録する
|
|
38
|
+
|
|
39
|
+
**After:**
|
|
40
|
+
- `.claude/reports/test-report-YYYYMMDD-HHMMSS.md` に Write して出力する
|
|
41
|
+
|
|
42
|
+
## Tools & Constraints
|
|
43
|
+
制限: プロダクションコードのソースファイルを編集・書き込みしない
|
|
44
|
+
|
|
45
|
+
## Related Agents
|
|
46
|
+
- 上流: planner(plan-report を受け取る)
|
|
47
|
+
- ピア: developer(TDD サイクルで Red → Green → Refactor を繰り返す)
|
|
48
|
+
- 下流: code-reviewer・security-reviewer(test-report を受け渡す)
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
# /develop コマンド
|
|
2
|
+
|
|
3
|
+
plan-report に基づき TDD サイクルで実装を進める。
|
|
4
|
+
|
|
5
|
+
## 必ず守ること
|
|
6
|
+
|
|
7
|
+
1. **最初に必ず** `.claude/skills/dev-workflow.md` を Read する。記憶・推測で進めない
|
|
8
|
+
2. **フェーズ D(TDD)** から実行する
|
|
9
|
+
3. dev-workflow.md の AskUserQuestion・Edit・セッションファイル更新の手順を省略しない
|
|
10
|
+
4. D-0 で「PO 並列実行」が選ばれた場合は、続けて **必ず** `.claude/skills/parallel-execution.md` を Read してその手順に従う
|
|
@@ -0,0 +1,174 @@
|
|
|
1
|
+
# /doc コマンド
|
|
2
|
+
|
|
3
|
+
ドキュメントを対話形式でヒアリングして生成する。
|
|
4
|
+
対話部分は親 Claude が担当し、生成は doc-writer エージェントが行う。
|
|
5
|
+
|
|
6
|
+
---
|
|
7
|
+
|
|
8
|
+
## Step 1: ドキュメント種類の選択
|
|
9
|
+
|
|
10
|
+
AskUserQuestion ツール:
|
|
11
|
+
```json
|
|
12
|
+
{
|
|
13
|
+
"questions": [{
|
|
14
|
+
"question": "作成するドキュメントの種類を選択してください",
|
|
15
|
+
"options": [
|
|
16
|
+
{ "label": "mermaid図", "description": "フロー図・クラス図・ER図・シーケンス図など" },
|
|
17
|
+
{ "label": "README", "description": "プロジェクト概要・セットアップ手順・使い方など" },
|
|
18
|
+
{ "label": "操作手順書・運用手順書", "description": "画面操作・コマンド手順など" },
|
|
19
|
+
{ "label": "API仕様書", "description": "エンドポイント・リクエスト/レスポンス定義など" }
|
|
20
|
+
]
|
|
21
|
+
}]
|
|
22
|
+
}
|
|
23
|
+
```
|
|
24
|
+
|
|
25
|
+
「その他」が選ばれた場合(Other 入力): 自由記述の内容をそのまま記録する。
|
|
26
|
+
|
|
27
|
+
---
|
|
28
|
+
|
|
29
|
+
## Step 2: 対象ファイル・ディレクトリの指定
|
|
30
|
+
|
|
31
|
+
AskUserQuestion ツール:
|
|
32
|
+
```json
|
|
33
|
+
{
|
|
34
|
+
"questions": [{
|
|
35
|
+
"question": "ドキュメント化する対象ファイル・ディレクトリを教えてください(例: src/api/、models/user.py)"
|
|
36
|
+
}]
|
|
37
|
+
}
|
|
38
|
+
```
|
|
39
|
+
|
|
40
|
+
---
|
|
41
|
+
|
|
42
|
+
## Step 3: 読み手の確認
|
|
43
|
+
|
|
44
|
+
AskUserQuestion ツール:
|
|
45
|
+
```json
|
|
46
|
+
{
|
|
47
|
+
"questions": [{
|
|
48
|
+
"question": "このドキュメントの読み手は誰ですか?",
|
|
49
|
+
"options": [
|
|
50
|
+
{ "label": "開発チームの新メンバー", "description": "コードを読み始める人" },
|
|
51
|
+
{ "label": "開発チーム内", "description": "既存メンバーへの共有・引継ぎ" },
|
|
52
|
+
{ "label": "運用・保守担当", "description": "エンジニアだがコードを書かない" },
|
|
53
|
+
{ "label": "業務担当・非エンジニア", "description": "システムの利用者・管理者" }
|
|
54
|
+
]
|
|
55
|
+
}]
|
|
56
|
+
}
|
|
57
|
+
```
|
|
58
|
+
|
|
59
|
+
「外部レビュアー・顧客・発注者」や「その他」が選ばれた場合(Other 入力): 自由記述の内容をそのまま記録する。
|
|
60
|
+
|
|
61
|
+
---
|
|
62
|
+
|
|
63
|
+
## Step 4: 目的の確認
|
|
64
|
+
|
|
65
|
+
AskUserQuestion ツール:
|
|
66
|
+
```json
|
|
67
|
+
{
|
|
68
|
+
"questions": [{
|
|
69
|
+
"question": "このドキュメントを作る目的を教えてください",
|
|
70
|
+
"options": [
|
|
71
|
+
{ "label": "全体把握・初見理解のため" },
|
|
72
|
+
{ "label": "引継ぎ・担当交代のため" },
|
|
73
|
+
{ "label": "レビュー・承認を得るため" },
|
|
74
|
+
{ "label": "障害時の調査・対応のため" }
|
|
75
|
+
]
|
|
76
|
+
}]
|
|
77
|
+
}
|
|
78
|
+
```
|
|
79
|
+
|
|
80
|
+
「新メンバーのオンボーディング」や「その他」が選ばれた場合(Other 入力): 自由記述の内容をそのまま記録する。
|
|
81
|
+
|
|
82
|
+
---
|
|
83
|
+
|
|
84
|
+
## Step 5: 粒度の確認
|
|
85
|
+
|
|
86
|
+
**mermaid図が選ばれた場合: 必須。**
|
|
87
|
+
**それ以外の場合: AskUserQuestion で確認する(不要であれば Other で「指定なし」と入力してもらう)。**
|
|
88
|
+
|
|
89
|
+
AskUserQuestion ツール:
|
|
90
|
+
```json
|
|
91
|
+
{
|
|
92
|
+
"questions": [{
|
|
93
|
+
"question": "どのレベルの粒度で記述しますか?",
|
|
94
|
+
"options": [
|
|
95
|
+
{ "label": "高レベル", "description": "モジュール・サービス単位。全体の流れを一目で把握できる" },
|
|
96
|
+
{ "label": "中レベル", "description": "クラス・関数単位。主要な処理の繋がりがわかる" },
|
|
97
|
+
{ "label": "低レベル", "description": "メソッド・フィールド単位。詳細な実装がわかる" }
|
|
98
|
+
]
|
|
99
|
+
}]
|
|
100
|
+
}
|
|
101
|
+
```
|
|
102
|
+
|
|
103
|
+
---
|
|
104
|
+
|
|
105
|
+
## Step 6: 出力先の確認
|
|
106
|
+
|
|
107
|
+
AskUserQuestion ツール:
|
|
108
|
+
```json
|
|
109
|
+
{
|
|
110
|
+
"questions": [{
|
|
111
|
+
"question": "ドキュメントの出力先を選択してください",
|
|
112
|
+
"options": [
|
|
113
|
+
{ "label": "レポートとして保存", "description": ".claude/reports/doc-{名前}.md に保存(一時保管)" },
|
|
114
|
+
{ "label": "プロジェクト内の指定パスに保存", "description": "次の入力でパスを指定する(例: docs/architecture.md)" },
|
|
115
|
+
{ "label": "ここに表示するだけ", "description": "ファイル保存せずチャットに出力" }
|
|
116
|
+
]
|
|
117
|
+
}]
|
|
118
|
+
}
|
|
119
|
+
```
|
|
120
|
+
|
|
121
|
+
「プロジェクト内の指定パスに保存」が選ばれた場合: 続けて出力パスを確認する:
|
|
122
|
+
```json
|
|
123
|
+
{
|
|
124
|
+
"questions": [{
|
|
125
|
+
"question": "保存先のパスを入力してください(例: docs/architecture.md)"
|
|
126
|
+
}]
|
|
127
|
+
}
|
|
128
|
+
```
|
|
129
|
+
|
|
130
|
+
---
|
|
131
|
+
|
|
132
|
+
## Step 7: 確認・承認
|
|
133
|
+
|
|
134
|
+
収集した内容を以下の形式で提示する:
|
|
135
|
+
|
|
136
|
+
```
|
|
137
|
+
ドキュメント種類 : {種類}
|
|
138
|
+
対象 : {ファイル・ディレクトリ}
|
|
139
|
+
読み手 : {読み手}
|
|
140
|
+
目的 : {目的}
|
|
141
|
+
粒度 : {粒度 / 指定なし}
|
|
142
|
+
出力先 : {出力先とパス}
|
|
143
|
+
```
|
|
144
|
+
|
|
145
|
+
AskUserQuestion で確認する:
|
|
146
|
+
```json
|
|
147
|
+
{
|
|
148
|
+
"questions": [{
|
|
149
|
+
"question": "内容を確認してください。どうしますか?",
|
|
150
|
+
"options": [
|
|
151
|
+
{ "label": "承認・ドキュメント生成", "description": "このまま doc-writer エージェントを起動する" },
|
|
152
|
+
{ "label": "否認・最初からやり直す", "description": "Step 1 に戻る" }
|
|
153
|
+
]
|
|
154
|
+
}]
|
|
155
|
+
}
|
|
156
|
+
```
|
|
157
|
+
|
|
158
|
+
---
|
|
159
|
+
|
|
160
|
+
## Step 8: doc-writer エージェントの起動
|
|
161
|
+
|
|
162
|
+
Agent ツールで `doc-writer` エージェントを起動する。
|
|
163
|
+
プロンプトに収集した全要件を含める:
|
|
164
|
+
|
|
165
|
+
```
|
|
166
|
+
以下の要件でドキュメントを生成してください。
|
|
167
|
+
|
|
168
|
+
ドキュメント種類: {種類}
|
|
169
|
+
対象ファイル・ディレクトリ: {パス}
|
|
170
|
+
読み手: {読み手}
|
|
171
|
+
目的: {目的}
|
|
172
|
+
粒度: {粒度 / 指定なし}
|
|
173
|
+
出力先: {出力先とパス}
|
|
174
|
+
```
|
|
@@ -0,0 +1,292 @@
|
|
|
1
|
+
# /extract-lib コマンド
|
|
2
|
+
|
|
3
|
+
複数プロジェクトのコードを横断解析し、共通要素を抽出してライブラリ設計・スケルトン生成を行う。
|
|
4
|
+
|
|
5
|
+
---
|
|
6
|
+
|
|
7
|
+
## Step 0: 規約ファイルを読み込む
|
|
8
|
+
|
|
9
|
+
`.claude/rules/coding-standards.md` と `.claude/rules/project-conventions.md` を Read する。
|
|
10
|
+
|
|
11
|
+
**どちらも存在しない場合:** 以下を表示して終了する:
|
|
12
|
+
```
|
|
13
|
+
規約ファイルが見つかりません。先に /setup を実行してプロジェクト規約を設定してください。
|
|
14
|
+
```
|
|
15
|
+
|
|
16
|
+
**存在する場合:** 以下を抽出して以降のステップで使用する:
|
|
17
|
+
- 使用言語・フレームワーク(ファイル拡張子含む)
|
|
18
|
+
- 命名規則(クラス名・関数名・定数名のパターン)
|
|
19
|
+
- ファイル・ディレクトリ構成の慣習
|
|
20
|
+
- その他の重要な規約
|
|
21
|
+
|
|
22
|
+
---
|
|
23
|
+
|
|
24
|
+
## Step 1: 解析対象プロジェクトのパスを収集する
|
|
25
|
+
|
|
26
|
+
### 1回目のパス入力
|
|
27
|
+
|
|
28
|
+
AskUserQuestion ツール:
|
|
29
|
+
```json
|
|
30
|
+
{
|
|
31
|
+
"questions": [{
|
|
32
|
+
"question": "解析対象の1つ目のプロジェクトの絶対パスを入力してください(例: C:/work/project-a)"
|
|
33
|
+
}]
|
|
34
|
+
}
|
|
35
|
+
```
|
|
36
|
+
|
|
37
|
+
Glob で `{入力パス}/**` を検索してパスが存在するか確認する。存在しない場合は「パスが見つかりません」と伝えて再入力させる。
|
|
38
|
+
|
|
39
|
+
### 2回目以降のパス追加
|
|
40
|
+
|
|
41
|
+
AskUserQuestion ツール:
|
|
42
|
+
```json
|
|
43
|
+
{
|
|
44
|
+
"questions": [{
|
|
45
|
+
"question": "別のプロジェクトを追加しますか?",
|
|
46
|
+
"header": "パス追加",
|
|
47
|
+
"options": [
|
|
48
|
+
{ "label": "追加する", "description": "さらに別のプロジェクトパスを入力する" },
|
|
49
|
+
{ "label": "これで完了", "description": "入力済みのプロジェクトで解析を開始する" }
|
|
50
|
+
]
|
|
51
|
+
}]
|
|
52
|
+
}
|
|
53
|
+
```
|
|
54
|
+
|
|
55
|
+
「追加する」の場合は続けてパスを入力・検証し、「これで完了」になるまで繰り返す。
|
|
56
|
+
入力済みプロジェクトが1つのみの状態で「これで完了」が選ばれた場合は「最低2プロジェクト必要です」と伝えて再度選択させる。
|
|
57
|
+
|
|
58
|
+
---
|
|
59
|
+
|
|
60
|
+
## Step 2: 出力形式を確認する
|
|
61
|
+
|
|
62
|
+
AskUserQuestion ツール:
|
|
63
|
+
```json
|
|
64
|
+
{
|
|
65
|
+
"questions": [{
|
|
66
|
+
"question": "解析結果をどの形式で出力しますか?",
|
|
67
|
+
"header": "出力形式",
|
|
68
|
+
"options": [
|
|
69
|
+
{ "label": "設計のみ", "description": "共通化候補リストとライブラリ設計案をレポートとして出力する" },
|
|
70
|
+
{ "label": "設計 + スケルトン生成", "description": "設計案に加えてライブラリのスケルトンコードも生成する" }
|
|
71
|
+
]
|
|
72
|
+
}]
|
|
73
|
+
}
|
|
74
|
+
```
|
|
75
|
+
|
|
76
|
+
「設計 + スケルトン生成」が選ばれた場合、続けて出力先を確認する:
|
|
77
|
+
```json
|
|
78
|
+
{
|
|
79
|
+
"questions": [{
|
|
80
|
+
"question": "生成するライブラリの出力先ディレクトリの絶対パスを入力してください(例: C:/work/shared-lib)"
|
|
81
|
+
}]
|
|
82
|
+
}
|
|
83
|
+
```
|
|
84
|
+
|
|
85
|
+
---
|
|
86
|
+
|
|
87
|
+
## Step 3: 解析エージェントを起動する
|
|
88
|
+
|
|
89
|
+
Agent ツールで解析を実行する。以下のプロンプトを使用する:
|
|
90
|
+
|
|
91
|
+
```
|
|
92
|
+
あなたはコードベース横断解析エージェントです。
|
|
93
|
+
以下の複数プロジェクトを解析し、共通化すべき要素を抽出してください。
|
|
94
|
+
|
|
95
|
+
## 解析対象プロジェクト
|
|
96
|
+
{収集したプロジェクトパスのリスト}
|
|
97
|
+
|
|
98
|
+
## プロジェクト規約(coding-standards.md / project-conventions.md より)
|
|
99
|
+
{Step 0 で抽出した言語・フレームワーク・命名規則・その他規約}
|
|
100
|
+
|
|
101
|
+
## 解析手順
|
|
102
|
+
|
|
103
|
+
各プロジェクトについて順に以下を調査する。
|
|
104
|
+
|
|
105
|
+
### 1. ディレクトリ構造の把握
|
|
106
|
+
Glob で `{パス}/**/*.{言語の拡張子}` を検索してファイル一覧を取得する。
|
|
107
|
+
規約で複数言語が使われている場合はそれぞれの拡張子で検索する。
|
|
108
|
+
|
|
109
|
+
### 2. 定数・設定値の収集
|
|
110
|
+
規約に合わせた定数定義パターンで Grep する。
|
|
111
|
+
検索例(言語に合わせて調整すること):
|
|
112
|
+
- TypeScript/JavaScript: `const [A-Z_]+ =`
|
|
113
|
+
- Java/C#: `static final|const|static readonly`
|
|
114
|
+
- Python: `^[A-Z_]+ =`
|
|
115
|
+
|
|
116
|
+
マジック値として使われる文字列・数値・タイムアウト値・URL パターン等も収集する。
|
|
117
|
+
|
|
118
|
+
### 3. ユーティリティ関数の収集
|
|
119
|
+
小規模ヘルパー関数を Grep で特定する。
|
|
120
|
+
特に以下に注目する:
|
|
121
|
+
- 文字列操作・日付操作・数値フォーマット
|
|
122
|
+
- バリデーション処理(入力検証・型チェック等)
|
|
123
|
+
- 変換処理(型変換・フォーマット変換・エンコード等)
|
|
124
|
+
|
|
125
|
+
類似した関数が複数プロジェクトに存在する場合は内容を Read して比較する。
|
|
126
|
+
|
|
127
|
+
### 4. 共通ロジックの収集
|
|
128
|
+
ビジネスロジック上の繰り返しパターンを調査する:
|
|
129
|
+
- エラーハンドリングの共通パターン
|
|
130
|
+
- ログ出力のラッパー処理
|
|
131
|
+
- 外部APIコール・HTTP通信の共通処理
|
|
132
|
+
- ページネーション・ソート・フィルタリングの共通処理
|
|
133
|
+
|
|
134
|
+
### 5. 型・インターフェース定義の収集(静的型付き言語の場合)
|
|
135
|
+
型定義・インターフェース・データクラス・DTO等を Grep で収集し、
|
|
136
|
+
複数プロジェクトで同一概念のものが個別定義されていないか確認する。
|
|
137
|
+
|
|
138
|
+
## 出力形式
|
|
139
|
+
|
|
140
|
+
以下の形式で結果をまとめること。
|
|
141
|
+
|
|
142
|
+
---
|
|
143
|
+
|
|
144
|
+
## 共通化候補リスト
|
|
145
|
+
|
|
146
|
+
### 高優先度(完全一致・ほぼ同一のコードが複数プロジェクトに存在)
|
|
147
|
+
| 種別 | 内容 | 発見場所(プロジェクト名:ファイルパス) |
|
|
148
|
+
|---|---|---|
|
|
149
|
+
| 定数 | ... | ProjectA: path, ProjectB: path |
|
|
150
|
+
|
|
151
|
+
### 中優先度(類似ロジック・命名が異なるが同一目的)
|
|
152
|
+
| 種別 | 内容 | 発見場所 | 差異の概要 |
|
|
153
|
+
|---|---|---|---|
|
|
154
|
+
|
|
155
|
+
### 低優先度(概念的共通・共通化は任意)
|
|
156
|
+
| 種別 | 内容 | 備考 |
|
|
157
|
+
|---|---|---|
|
|
158
|
+
|
|
159
|
+
## ライブラリ設計案
|
|
160
|
+
|
|
161
|
+
**推奨ライブラリ名**: {プロジェクト規約の命名規則に基づいた名前}
|
|
162
|
+
|
|
163
|
+
**ディレクトリ構成**:
|
|
164
|
+
```
|
|
165
|
+
{ライブラリ名}/
|
|
166
|
+
├── {モジュール1}/
|
|
167
|
+
│ ├── {ファイル}
|
|
168
|
+
│ └── ...
|
|
169
|
+
├── {モジュール2}/
|
|
170
|
+
└── ...
|
|
171
|
+
```
|
|
172
|
+
|
|
173
|
+
**公開API一覧**:
|
|
174
|
+
| モジュール | 名前 | 種別 | 責務 |
|
|
175
|
+
|---|---|---|---|
|
|
176
|
+
|
|
177
|
+
**移行時の注意点**: {既存プロジェクトからライブラリへ移行する際の注意事項}
|
|
178
|
+
|
|
179
|
+
---
|
|
180
|
+
```
|
|
181
|
+
|
|
182
|
+
解析結果を `.claude/reports/lib-extract-{YYYYMMDD}.md` に Write で保存する。
|
|
183
|
+
|
|
184
|
+
---
|
|
185
|
+
|
|
186
|
+
## Step 4: 解析結果の提示・承認
|
|
187
|
+
|
|
188
|
+
レポートの主要な発見事項(高優先度の候補数・推奨ライブラリ構成)を要約してテキストで提示する。
|
|
189
|
+
|
|
190
|
+
AskUserQuestion ツール:
|
|
191
|
+
```json
|
|
192
|
+
{
|
|
193
|
+
"questions": [{
|
|
194
|
+
"question": "解析結果を確認してください。どうしますか?",
|
|
195
|
+
"header": "確認",
|
|
196
|
+
"options": [
|
|
197
|
+
{ "label": "承認・次へ進む", "description": "この設計案でスケルトン生成または完了する" },
|
|
198
|
+
{ "label": "設計案を修正する", "description": "フィードバックを入力して設計を見直す" },
|
|
199
|
+
{ "label": "ここで終了する", "description": "レポートのみ保存して終了する" }
|
|
200
|
+
]
|
|
201
|
+
}]
|
|
202
|
+
}
|
|
203
|
+
```
|
|
204
|
+
|
|
205
|
+
**「承認・次へ進む」の場合:**
|
|
206
|
+
セッションファイル(`.claude/memory/sessions/*.tmp` の最新)の `## うまくいったアプローチ` に以下を追記する:
|
|
207
|
+
```
|
|
208
|
+
- [extract-lib] {承認された設計アプローチの要点(ライブラリ名・モジュール分割方針・特に有効だった抽出種別)}
|
|
209
|
+
```
|
|
210
|
+
|
|
211
|
+
**「設計案を修正する」の場合:**
|
|
212
|
+
フィードバックを収集する:
|
|
213
|
+
```json
|
|
214
|
+
{
|
|
215
|
+
"questions": [{
|
|
216
|
+
"question": "どのように修正してほしいですか?(例: この定数は除外したい・命名を変えたい・モジュール分割を変えたい)"
|
|
217
|
+
}]
|
|
218
|
+
}
|
|
219
|
+
```
|
|
220
|
+
セッションファイルの `## 試みたが失敗したアプローチ` に以下を追記する:
|
|
221
|
+
```
|
|
222
|
+
- [extract-lib] {否認された設計案の何が問題だったか(フィードバック内容を要約)}
|
|
223
|
+
```
|
|
224
|
+
フィードバックを追加指示としてプロンプトに加えて Step 3 の解析エージェントを再起動する。
|
|
225
|
+
|
|
226
|
+
**「ここで終了する」の場合:**
|
|
227
|
+
Step 6 の完了メッセージ(スケルトンなし)を表示して終了する。
|
|
228
|
+
|
|
229
|
+
---
|
|
230
|
+
|
|
231
|
+
## Step 5: スケルトン生成(Step 2 で「設計 + スケルトン生成」を選んだ場合のみ)
|
|
232
|
+
|
|
233
|
+
Agent ツールでスケルトンコード生成を行う:
|
|
234
|
+
|
|
235
|
+
```
|
|
236
|
+
あなたはライブラリスケルトン生成エージェントです。
|
|
237
|
+
以下の設計案に基づいてライブラリのスケルトンコードを生成してください。
|
|
238
|
+
|
|
239
|
+
## 設計案
|
|
240
|
+
{Step 3 で生成したレポートのライブラリ設計案セクション全体}
|
|
241
|
+
|
|
242
|
+
## プロジェクト規約
|
|
243
|
+
{Step 0 で抽出した規約}
|
|
244
|
+
|
|
245
|
+
## 出力先
|
|
246
|
+
{Step 2 で入力した出力先パス}
|
|
247
|
+
|
|
248
|
+
## 生成方針
|
|
249
|
+
- 実際のロジックは TODO コメントを残した空実装にする(シグネチャと型は完成状態で)
|
|
250
|
+
- 公開APIのドキュメントコメント(JSDoc / Javadoc / docstring 等)は完成状態で生成する
|
|
251
|
+
- 出力先ディレクトリ直下に README.md を生成する
|
|
252
|
+
- 概要・インストール方法・使い方(基本的な呼び出し例)を記載する
|
|
253
|
+
- 既存プロジェクトからの移行例を1つ記載する
|
|
254
|
+
- 言語の標準的なパッケージ管理ファイル(package.json / build.gradle / pyproject.toml 等)も生成する
|
|
255
|
+
```
|
|
256
|
+
|
|
257
|
+
---
|
|
258
|
+
|
|
259
|
+
## Step 6: セッション記録・完了メッセージ
|
|
260
|
+
|
|
261
|
+
### セッションファイルへの記録
|
|
262
|
+
|
|
263
|
+
セッションファイル(`.claude/memory/sessions/*.tmp` の最新)の JSON ブロック `"patterns"` 配列に、
|
|
264
|
+
今回の解析で発見した共通化パターンを追記する。
|
|
265
|
+
|
|
266
|
+
記録する内容(1〜3件に絞る):
|
|
267
|
+
- 高優先度で発見された共通要素の傾向(例: 「このプロジェクト群では日付フォーマット関数が全プロジェクトに重複する」)
|
|
268
|
+
- 有効だったモジュール分割のアプローチ(例: 「定数・ユーティリティ・型を別モジュールに分けると承認されやすい」)
|
|
269
|
+
|
|
270
|
+
記録形式:
|
|
271
|
+
```json
|
|
272
|
+
{
|
|
273
|
+
"id": "extract_lib_{内容を表す英数字ID}",
|
|
274
|
+
"description": "どんなプロジェクト群でどんな共通化パターンが見つかるかを1文で"
|
|
275
|
+
}
|
|
276
|
+
```
|
|
277
|
+
|
|
278
|
+
### 完了メッセージ
|
|
279
|
+
|
|
280
|
+
以下を表示して終了する:
|
|
281
|
+
|
|
282
|
+
```
|
|
283
|
+
完了しました。
|
|
284
|
+
|
|
285
|
+
レポート : .claude/reports/lib-extract-{YYYYMMDD}.md
|
|
286
|
+
スケルトン: {出力先パス}(生成した場合)
|
|
287
|
+
|
|
288
|
+
次のステップ:
|
|
289
|
+
1. レポートの設計案を確認し、必要に応じて調整する
|
|
290
|
+
2. 各プロジェクトの該当箇所をライブラリに置き換える
|
|
291
|
+
3. /review でライブラリのコードレビューを実施する
|
|
292
|
+
```
|