@sk8metal/michi-cli 0.8.5 → 0.8.7

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.
@@ -0,0 +1,74 @@
1
+ # {{PROJECT_NAME}} - Multi-Repo プロジェクトステアリング
2
+
3
+ ## プロジェクト情報
4
+
5
+ - **プロジェクト名**: {{PROJECT_NAME}}
6
+ - **JIRAキー**: {{JIRA_KEY}}
7
+ - **Confluenceスペース**: {{CONFLUENCE_SPACE}}
8
+ - **作成日時**: {{CREATED_AT}}
9
+
10
+ ## Multi-Repo 開発ガイドライン
11
+
12
+ ### リポジトリ管理方針
13
+
14
+ <!-- リポジトリ管理方針を記述してください -->
15
+
16
+ #### ブランチ戦略
17
+
18
+ - **main/master**: 本番環境相当(常にデプロイ可能な状態)
19
+ - **develop**: 開発環境(次回リリース予定の機能を統合)
20
+ - **feature/**: 機能開発用
21
+ - **bugfix/**: バグ修正用
22
+ - **hotfix/**: 緊急修正用
23
+
24
+ #### コミットメッセージ規約
25
+
26
+ - `feat:` 新機能
27
+ - `fix:` バグ修正
28
+ - `docs:` ドキュメント
29
+ - `style:` フォーマット
30
+ - `refactor:` リファクタリング
31
+ - `test:` テスト
32
+ - `chore:` その他
33
+
34
+ ### CI/CD パイプライン
35
+
36
+ #### Phase A: PR作成前の自動テスト
37
+
38
+ - 単体テスト実行
39
+ - Lint実行
40
+ - ビルド実行
41
+
42
+ #### Phase B: リリース準備テスト
43
+
44
+ - 統合テスト実行
45
+ - E2Eテスト実行
46
+ - パフォーマンステスト実行
47
+ - セキュリティテスト実行
48
+
49
+ ### コードレビュー基準
50
+
51
+ <!-- コードレビュー基準を記述してください -->
52
+
53
+ ### テスト戦略
54
+
55
+ <!-- テスト戦略を記述してください -->
56
+
57
+ ### セキュリティポリシー
58
+
59
+ <!-- セキュリティポリシーを記述してください -->
60
+
61
+ ### パフォーマンス要件
62
+
63
+ <!-- パフォーマンス要件を記述してください -->
64
+
65
+ ## リポジトリ一覧
66
+
67
+ <!-- このプロジェクトに属するリポジトリを記述してください -->
68
+ <!-- multi-repo:add-repo コマンドでリポジトリを追加できます -->
69
+
70
+ ## 変更履歴
71
+
72
+ | 日付 | バージョン | 変更内容 | 担当者 |
73
+ |------|-----------|---------|--------|
74
+ | {{CREATED_AT}} | 1.0.0 | 初版作成 | - |
@@ -0,0 +1,89 @@
1
+ # {{PROJECT_NAME}} - テスト戦略
2
+
3
+ ## プロジェクト情報
4
+
5
+ - **プロジェクト名**: {{PROJECT_NAME}}
6
+ - **JIRAキー**: {{JIRA_KEY}}
7
+ - **Confluenceスペース**: {{CONFLUENCE_SPACE}}
8
+ - **作成日時**: {{CREATED_AT}}
9
+
10
+ ## テスト戦略概要
11
+
12
+ このドキュメントは、{{PROJECT_NAME}}プロジェクトのテスト戦略を定義します。
13
+
14
+ ## テストタイプ
15
+
16
+ ### 単体テスト (Unit Test)
17
+
18
+ - **実行タイミング**: PR作成前(Phase A)
19
+ - **カバレッジ目標**: 95%以上
20
+ - **実行コマンド**: `npm test`
21
+ - **テストフレームワーク**: <!-- テストフレームワークを記述 -->
22
+
23
+ ### 統合テスト (Integration Test)
24
+
25
+ - **実行タイミング**: リリース準備時(Phase B)
26
+ - **カバレッジ目標**: 主要フローのカバー
27
+ - **実行コマンド**: `npm run test:integration`
28
+ - **テスト対象**: <!-- テスト対象を記述 -->
29
+
30
+ ### E2Eテスト (End-to-End Test)
31
+
32
+ - **実行タイミング**: リリース準備時(Phase B)
33
+ - **カバレッジ目標**: クリティカルユーザーフロー
34
+ - **実行コマンド**: `npm run test:e2e`
35
+ - **テストツール**: <!-- テストツールを記述 -->
36
+
37
+ ### パフォーマンステスト (Performance Test)
38
+
39
+ - **実行タイミング**: リリース準備時(Phase B)
40
+ - **目標**: <!-- パフォーマンス目標を記述 -->
41
+ - **実行コマンド**: `npm run test:performance`
42
+ - **測定項目**: レスポンスタイム、スループット、リソース使用量
43
+
44
+ ### セキュリティテスト (Security Test)
45
+
46
+ - **実行タイミング**: リリース準備時(Phase B)
47
+ - **テスト項目**:
48
+ - パストラバーサル攻撃
49
+ - 制御文字インジェクション
50
+ - コマンドインジェクション
51
+ - SQLインジェクション
52
+ - XSS攻撃
53
+ - **実行コマンド**: `npm run test:security`
54
+
55
+ ## Phase A: PR前自動テスト
56
+
57
+ PR作成前に自動実行されるテスト:
58
+
59
+ - [ ] 単体テスト
60
+ - [ ] Lint
61
+ - [ ] 型チェック
62
+ - [ ] ビルド
63
+
64
+ ## Phase B: リリース準備テスト
65
+
66
+ リリース前に手動実行するテスト:
67
+
68
+ - [ ] 統合テスト
69
+ - [ ] E2Eテスト
70
+ - [ ] パフォーマンステスト
71
+ - [ ] セキュリティテスト
72
+
73
+ ## テストデータ管理
74
+
75
+ <!-- テストデータ管理方針を記述してください -->
76
+
77
+ ## テスト環境
78
+
79
+ <!-- テスト環境を記述してください -->
80
+
81
+ ## 継続的改善
82
+
83
+ <!-- 継続的改善方針を記述してください -->
84
+
85
+ ## 変更履歴
86
+
87
+ | 日付 | バージョン | 変更内容 | 担当者 |
88
+ |------|-----------|---------|--------|
89
+ | {{CREATED_AT}} | 1.0.0 | 初版作成 | - |
@@ -83,7 +83,7 @@ npx tsx ~/Work/git/michi/src/cli.ts setup-existing --claude --lang ja
83
83
  実行後、Michiのコマンドが追加されることを確認:
84
84
 
85
85
  ```bash
86
- ls -la /tmp/michi-manual-test-claude-code/.claude/commands/kiro/michi
86
+ ls -la /tmp/michi-manual-test-claude-code/.claude/commands/michi
87
87
  # Michiのコマンドが追加されている:
88
88
  # michi-confluence-sync.md
89
89
  # michi-project-switch.md
@@ -407,13 +407,15 @@ npx tsx ~/Work/git/michi/src/cli.ts phase:run java-calculator-webapp phase-b
407
407
  ├── .claude/
408
408
  │ ├── CLAUDE.md
409
409
  │ └── commands/
410
- │ ├── kiro-spec-init.md (cc-sdd)
411
- │ ├── kiro-spec-requirements.md (cc-sdd)
412
- │ ├── kiro-spec-design.md (cc-sdd)
413
- │ ├── kiro-spec-tasks.md (cc-sdd)
414
- │ ├── ... (cc-sdd提供の他のコマンド)
415
- ├── michi-confluence-sync.md (Michi)
416
- │ └── michi-project-switch.md (Michi)
410
+ │ ├── kiro/ (cc-sdd)
411
+ ├── kiro-spec-init.md
412
+ ├── kiro-spec-requirements.md
413
+ ├── kiro-spec-design.md
414
+ ├── kiro-spec-tasks.md
415
+ │ └── ... (cc-sdd提供の他のコマンド)
416
+ │ └── michi/ (Michi)
417
+ │ ├── michi-confluence-sync.md
418
+ │ └── michi-project-switch.md
417
419
  └── .kiro/
418
420
  └── specs/
419
421
  └── java-calculator-webapp/
@@ -259,9 +259,10 @@ cp $MICHI_PATH/.cursor/rules/multi-project.mdc .cursor/rules/
259
259
  cp $MICHI_PATH/.cursor/rules/github-ssot.mdc .cursor/rules/
260
260
  cp $MICHI_PATH/.cursor/rules/atlassian-mcp.mdc .cursor/rules/
261
261
 
262
- # カスタムコマンドをコピー
263
- cp $MICHI_PATH/.cursor/commands/kiro/confluence-sync.md .cursor/commands/kiro/
264
- cp $MICHI_PATH/.cursor/commands/kiro/project-switch.md .cursor/commands/kiro/
262
+ # カスタムコマンドをコピー(v0.8.7以降の構造)
263
+ mkdir -p .cursor/commands/michi
264
+ cp $MICHI_PATH/.cursor/commands/michi/confluence-sync.md .cursor/commands/michi/
265
+ cp $MICHI_PATH/.cursor/commands/michi/project-switch.md .cursor/commands/michi/
265
266
 
266
267
  # Steeringテンプレートをコピー
267
268
  mkdir -p .kiro/steering
@@ -0,0 +1,138 @@
1
+ # Michi マイグレーションガイド
2
+
3
+ このドキュメントは、Michi の異なるバージョン間での移行手順を説明します。
4
+
5
+ ---
6
+
7
+ ## v0.8.6 → v0.8.7 (Unreleased)
8
+
9
+ ### 重要な変更点
10
+
11
+ #### 1. Multi-Repo AIコマンド名の変更
12
+
13
+ **変更内容**:
14
+ - `/michi_multi_repo:*` → `/michi-multi-repo:*`
15
+
16
+ **影響を受けるコマンド**:
17
+
18
+ | 旧コマンド | 新コマンド |
19
+ |-----------|-----------|
20
+ | `/michi_multi_repo:spec-init` | `/michi-multi-repo:spec-init` |
21
+ | `/michi_multi_repo:spec-requirements` | `/michi-multi-repo:spec-requirements` |
22
+ | `/michi_multi_repo:spec-design` | `/michi-multi-repo:spec-design` |
23
+
24
+ **移行手順**:
25
+ 1. スクリプトやドキュメントで `/michi_multi_repo:` を使用している箇所を `/michi-multi-repo:` に置換してください
26
+ 2. 特に以下のファイルを確認:
27
+ - プロジェクトの README.md
28
+ - 開発ドキュメント
29
+ - 自動化スクリプト
30
+
31
+ #### 2. コマンド配布先の修正
32
+
33
+ **変更内容**:
34
+ - `michi init` コマンドが作成するディレクトリ構造が変更されました
35
+
36
+ **変更前**:
37
+ ```
38
+ .claude/commands/kiro/
39
+ ├── kiro/ # 二重ネスト(バグ)
40
+ ├── michi/
41
+ └── michi_multi_repo/
42
+ ```
43
+
44
+ **変更後**:
45
+ ```
46
+ .claude/commands/
47
+ ├── kiro/ # 正しい階層
48
+ ├── michi/
49
+ └── michi-multi-repo/
50
+ ```
51
+
52
+ **移行手順**:
53
+
54
+ ##### 既存プロジェクトの場合
55
+
56
+ 1. **二重ネストディレクトリの削除**:
57
+ ```bash
58
+ # プロジェクトルートで実行
59
+ rm -rf .claude/commands/kiro/kiro
60
+ rm -rf .claude/commands/kiro/michi
61
+ rm -rf .claude/commands/kiro/michi_multi_repo
62
+ ```
63
+
64
+ 2. **新しい構造でコマンドを再配置**:
65
+ ```bash
66
+ # michi init を再実行(上書き確認なし)
67
+ michi init --claude
68
+ ```
69
+
70
+ 3. **確認**:
71
+ ```bash
72
+ ls -la .claude/commands/
73
+ # 以下が表示されること:
74
+ # - kiro/
75
+ # - michi/
76
+ # - michi-multi-repo/
77
+ ```
78
+
79
+ ##### 新規プロジェクトの場合
80
+
81
+ v0.8.7 以降では、`michi init` を実行すると自動的に正しい構造が作成されます。
82
+
83
+ ```bash
84
+ michi init --claude
85
+ ```
86
+
87
+ ### その他の変更点
88
+
89
+ #### `michi config:init` コマンドの参照を修正
90
+
91
+ **問題**:
92
+ - spec-init.md のエラーメッセージで `michi config:init` コマンドが参照されていましたが、このコマンドは実装されていませんでした
93
+
94
+ **修正内容**:
95
+ - `michi config:init` → `michi init`
96
+
97
+ **影響**:
98
+ - エラーメッセージで正しいコマンドが案内されるようになりました
99
+
100
+ ---
101
+
102
+ ## トラブルシューティング
103
+
104
+ ### Q1: 既存の `.claude/commands/kiro/kiro/` が残っている
105
+
106
+ **回答**: 手動で削除してください:
107
+ ```bash
108
+ rm -rf .claude/commands/kiro/kiro
109
+ ```
110
+
111
+ ### Q2: `/michi_multi_repo:*` コマンドが認識されなくなった
112
+
113
+ **回答**: v0.8.7 では `/michi-multi-repo:*` に変更されました。新しいコマンド名を使用してください。
114
+
115
+ ### Q3: `michi init` を実行してもコマンドがコピーされない
116
+
117
+ **回答**:
118
+ 1. Michi を最新版(v0.8.7以降)にアップデートしてください:
119
+ ```bash
120
+ npm install -g michi-cli@latest
121
+ ```
122
+
123
+ 2. 再度 `michi init --claude` を実行してください
124
+
125
+ ### Q4: 二重ネストディレクトリが残っているとどうなる?
126
+
127
+ **回答**:
128
+ - 機能的な問題はありませんが、混乱を招く可能性があります
129
+ - 新しい構造(`.claude/commands/kiro/`)が優先されます
130
+ - クリーンな状態にするため、削除を推奨します
131
+
132
+ ---
133
+
134
+ ## 参考リンク
135
+
136
+ - [Multi-Repo管理ガイド](multi-repo-guide.md)
137
+ - [CHANGELOG](../../../CHANGELOG.md)
138
+ - [README](../../../README.md)
@@ -71,6 +71,126 @@ ATLASSIAN_API_TOKEN=your_atlassian_api_token
71
71
  3. トークン名を入力して作成
72
72
  4. トークンをコピーして環境変数に設定
73
73
 
74
+ ### カスタムコマンド(スキル)の配布
75
+
76
+ Multi-Repo AI支援コマンドを使用するには、プロジェクトに `.claude/commands/` を配布する必要があります。
77
+
78
+ #### 初回セットアップ時
79
+
80
+ プロジェクトで初めて Michi を使用する場合、使用する環境に応じて以下のコマンドを実行してください:
81
+
82
+ ```bash
83
+ # Claude Code 環境の場合
84
+ michi init --claude
85
+
86
+ # Claude Code Subagents 環境の場合
87
+ michi init --claude-agent
88
+
89
+ # Cursor 環境の場合
90
+ michi init --cursor
91
+ ```
92
+
93
+ #### 環境オプションの選択
94
+
95
+ | オプション | 環境 | ルールディレクトリ | 用途 |
96
+ |-----------|------|-------------------|------|
97
+ | `--claude` | Claude Code | `.claude/rules/` | 通常の Claude Code 使用 |
98
+ | `--claude-agent` | Claude Code Subagents | `.claude/agents/` | Claude Code Subagents 使用 |
99
+ | `--cursor` | Cursor IDE | `.cursor/rules/` | Cursor IDE 使用 |
100
+
101
+ **注意**: どの環境でも、コマンドディレクトリは `.claude/commands/` に統一されています(v0.8.7以降)。
102
+
103
+ #### ディレクトリ構造
104
+
105
+ **Claude Code (`--claude`) の場合**:
106
+ ```
107
+ .claude/
108
+ ├── rules/ # Michi のルールファイル
109
+ └── commands/ # カスタムコマンド(スキル)
110
+ ├── kiro/ # kiro: 単一リポジトリ用コマンド
111
+ ├── michi/ # michi: Michi拡張コマンド
112
+ └── michi-multi-repo/ # Multi-Repo AI支援コマンド
113
+ ├── spec-init.md
114
+ ├── spec-requirements.md
115
+ └── spec-design.md
116
+ ```
117
+
118
+ **Claude Code Subagents (`--claude-agent`) の場合**:
119
+ ```
120
+ .claude/
121
+ ├── agents/ # Subagent 用ルールファイル
122
+ └── commands/ # カスタムコマンド(スキル)
123
+ ├── kiro/
124
+ ├── michi/
125
+ └── michi-multi-repo/
126
+ ```
127
+
128
+ **Cursor IDE (`--cursor`) の場合**:
129
+ ```
130
+ .cursor/
131
+ ├── rules/ # Cursor 用ルールファイル
132
+ └── commands/ # カスタムコマンド(スキル)
133
+ ├── kiro/
134
+ ├── michi/
135
+ └── michi-multi-repo/
136
+ ```
137
+
138
+ #### 既存プロジェクトへの追加
139
+
140
+ 既に `.claude/` や `.cursor/` ディレクトリが存在するプロジェクトの場合も、`michi init` を再実行することで、不足しているコマンドが追加されます:
141
+
142
+ ```bash
143
+ # 使用している環境に応じて選択
144
+ michi init --claude # Claude Code 環境
145
+ michi init --claude-agent # Claude Code Subagents 環境
146
+ michi init --cursor # Cursor 環境
147
+ ```
148
+
149
+ **注意**:
150
+ - 既存のファイルは上書きされます。カスタマイズしたファイルがある場合は、事前にバックアップを取ってください
151
+ - 環境オプション(`--claude`, `--claude-agent`, `--cursor`)は、初回セットアップ時と同じものを使用してください
152
+
153
+ #### コマンドが正しく配布されたか確認
154
+
155
+ 以下のコマンドで、`.claude/commands/` の構造を確認できます:
156
+
157
+ ```bash
158
+ ls -la .claude/commands/
159
+ # 以下が表示されること:
160
+ # - kiro/
161
+ # - michi/
162
+ # - michi-multi-repo/
163
+ ```
164
+
165
+ #### Multi-Repo AIコマンドの利用
166
+
167
+ 配布後、Claude Code で以下のコマンドが利用可能になります:
168
+
169
+ | コマンド | 説明 |
170
+ |---------|------|
171
+ | `/michi-multi-repo:spec-init` | プロジェクト初期化(プロジェクト説明から自動生成) |
172
+ | `/michi-multi-repo:spec-requirements` | 要件定義書の自動生成 |
173
+ | `/michi-multi-repo:spec-design` | 設計書の自動生成 |
174
+
175
+ **使用例**:
176
+ ```bash
177
+ # Chirper プロジェクトを初期化
178
+ /michi-multi-repo:spec-init "Twitter風SNSアプリケーション Chirper をオニオンアーキテクチャで構築" --jira PC --confluence-space MICHI
179
+ ```
180
+
181
+ #### トラブルシューティング
182
+
183
+ **Q: コマンドが認識されない**
184
+
185
+ A: 以下を確認してください:
186
+ 1. `.claude/commands/michi-multi-repo/` ディレクトリが存在するか
187
+ 2. `michi init --claude` を実行したか
188
+ 3. Claude Code を再起動してみる
189
+
190
+ **Q: 古いコマンド名 (`/michi_multi_repo:*`) を使っていた**
191
+
192
+ A: v0.8.7 以降では `/michi-multi-repo:*` に変更されました。詳細は [migration-guide.md](migration-guide.md) を参照してください。
193
+
74
194
  ## 基本的な使い方
75
195
 
76
196
  ### 1. プロジェクトの初期化
@@ -912,7 +1032,7 @@ Multi-Repoプロジェクトでは、AI支援による要件定義・設計書
912
1032
 
913
1033
  ### 前提条件
914
1034
 
915
- - プロジェクトが初期化されていること(`/michi_multi_repo:spec-init` または `michi multi-repo:init`)
1035
+ - プロジェクトが初期化されていること(`/michi-multi-repo:spec-init` または `michi multi-repo:init`)
916
1036
  - 1つ以上のリポジトリが登録されていること(`michi multi-repo:add-repo`)
917
1037
 
918
1038
  ### 6. AIプロジェクト初期化(NEW)
@@ -920,12 +1040,12 @@ Multi-Repoプロジェクトでは、AI支援による要件定義・設計書
920
1040
  Multi-Repoプロジェクトを AI支援で初期化します。`michi multi-repo:init` の代替コマンドです。
921
1041
 
922
1042
  ```bash
923
- /michi_multi_repo:spec-init "<プロジェクト説明>" --jira <JIRA_KEY> --confluence-space <SPACE>
1043
+ /michi-multi-repo:spec-init "<プロジェクト説明>" --jira <JIRA_KEY> --confluence-space <SPACE>
924
1044
  ```
925
1045
 
926
1046
  **例**:
927
1047
  ```bash
928
- /michi_multi_repo:spec-init "マイクロサービスアーキテクチャでECサイトを構築" --jira MSV --confluence-space MSV
1048
+ /michi-multi-repo:spec-init "マイクロサービスアーキテクチャでECサイトを構築" --jira MSV --confluence-space MSV
929
1049
  ```
930
1050
 
931
1051
  **機能**:
@@ -951,12 +1071,12 @@ Multi-Repoプロジェクトを AI支援で初期化します。`michi multi-rep
951
1071
  プロジェクトの要件定義書をAI支援で自動生成します。
952
1072
 
953
1073
  ```bash
954
- /michi_multi_repo:spec-requirements <project-name>
1074
+ /michi-multi-repo:spec-requirements <project-name>
955
1075
  ```
956
1076
 
957
1077
  **例**:
958
1078
  ```bash
959
- /michi_multi_repo:spec-requirements my-microservices
1079
+ /michi-multi-repo:spec-requirements my-microservices
960
1080
  ```
961
1081
 
962
1082
  **生成される内容**:
@@ -973,12 +1093,12 @@ Multi-Repoプロジェクトを AI支援で初期化します。`michi multi-rep
973
1093
  プロジェクトの技術設計書をAI支援で自動生成します。
974
1094
 
975
1095
  ```bash
976
- /michi_multi_repo:spec-design <project-name> [-y]
1096
+ /michi-multi-repo:spec-design <project-name> [-y]
977
1097
  ```
978
1098
 
979
1099
  **例**:
980
1100
  ```bash
981
- /michi_multi_repo:spec-design my-microservices
1101
+ /michi-multi-repo:spec-design my-microservices
982
1102
  ```
983
1103
 
984
1104
  **生成される内容**:
@@ -998,7 +1118,7 @@ Multi-Repoプロジェクトを AI支援で初期化します。`michi multi-rep
998
1118
 
999
1119
  ```bash
1000
1120
  # 1. AI初期化(NEW - michi multi-repo:init の代替)
1001
- /michi_multi_repo:spec-init "マイクロサービスアーキテクチャでECサイトを構築" --jira MSV --confluence-space MSV
1121
+ /michi-multi-repo:spec-init "マイクロサービスアーキテクチャでECサイトを構築" --jira MSV --confluence-space MSV
1002
1122
 
1003
1123
  # 2. リポジトリ登録
1004
1124
  michi multi-repo:add-repo my-microservices --name frontend --url https://github.com/myorg/frontend --branch main
@@ -1006,10 +1126,10 @@ michi multi-repo:add-repo my-microservices --name backend --url https://github.c
1006
1126
  michi multi-repo:add-repo my-microservices --name database --url https://github.com/myorg/db-schema --branch main
1007
1127
 
1008
1128
  # 3. AI要件定義書生成(NEW)
1009
- /michi_multi_repo:spec-requirements my-microservices
1129
+ /michi-multi-repo:spec-requirements my-microservices
1010
1130
 
1011
1131
  # 4. AI設計書生成(NEW)
1012
- /michi_multi_repo:spec-design my-microservices
1132
+ /michi-multi-repo:spec-design my-microservices
1013
1133
 
1014
1134
  # 5. Confluence同期
1015
1135
  michi multi-repo:confluence-sync my-microservices --doc-type requirements
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@sk8metal/michi-cli",
3
- "version": "0.8.5",
3
+ "version": "0.8.7",
4
4
  "description": "Managed Intelligent Comprehensive Hub for Integration - AI-driven development workflow automation",
5
5
  "license": "MIT",
6
6
  "type": "module",
@@ -22,21 +22,21 @@ describe('environments', () => {
22
22
  it('should have correct structure for claude', () => {
23
23
  const config = ENV_CONFIG.claude;
24
24
  expect(config.rulesDir).toBe('.claude/rules');
25
- expect(config.commandsDir).toBe('.claude/commands/kiro');
25
+ expect(config.commandsDir).toBe('.claude/commands');
26
26
  expect(config.templateSource).toBe('claude');
27
27
  });
28
28
 
29
29
  it('should have correct structure for claude-agent', () => {
30
30
  const config = ENV_CONFIG['claude-agent'];
31
31
  expect(config.rulesDir).toBe('.claude/agents');
32
- expect(config.commandsDir).toBe('.claude/commands/kiro');
32
+ expect(config.commandsDir).toBe('.claude/commands');
33
33
  expect(config.templateSource).toBe('claude-agent');
34
34
  });
35
35
 
36
36
  it('should have correct structure for cursor', () => {
37
37
  const config = ENV_CONFIG.cursor;
38
38
  expect(config.rulesDir).toBe('.cursor/rules');
39
- expect(config.commandsDir).toBe('.cursor/commands/kiro');
39
+ expect(config.commandsDir).toBe('.cursor/commands');
40
40
  expect(config.templateSource).toBe('cursor');
41
41
  });
42
42
 
@@ -21,17 +21,17 @@ export type Environment =
21
21
  export const ENV_CONFIG: Record<Environment, EnvironmentConfig> = {
22
22
  claude: {
23
23
  rulesDir: '.claude/rules',
24
- commandsDir: '.claude/commands/kiro',
24
+ commandsDir: '.claude/commands',
25
25
  templateSource: 'claude',
26
26
  },
27
27
  'claude-agent': {
28
28
  rulesDir: '.claude/agents',
29
- commandsDir: '.claude/commands/kiro',
29
+ commandsDir: '.claude/commands',
30
30
  templateSource: 'claude-agent',
31
31
  },
32
32
  cursor: {
33
33
  rulesDir: '.cursor/rules',
34
- commandsDir: '.cursor/commands/kiro',
34
+ commandsDir: '.cursor/commands',
35
35
  templateSource: 'cursor',
36
36
  },
37
37
  gemini: {
@@ -1,10 +1,10 @@
1
1
  /**
2
- * ビルド時に静的アセット(JSON等)をdistディレクトリにコピー
3
- * tscはTypeScriptのトランスパイルのみで、JSONファイルは自動コピーされないため
2
+ * ビルド時に静的アセット(JSON等、テンプレート)をdistディレクトリにコピー
3
+ * tscはTypeScriptのトランスパイルのみで、JSONやテンプレートファイルは自動コピーされないため
4
4
  */
5
5
 
6
- import { copyFileSync, mkdirSync, existsSync } from 'fs';
7
- import { dirname, resolve } from 'path';
6
+ import { copyFileSync, mkdirSync, existsSync, readdirSync, statSync } from 'fs';
7
+ import { dirname, resolve, join } from 'path';
8
8
  import { fileURLToPath } from 'url';
9
9
 
10
10
  const __dirname = dirname(fileURLToPath(import.meta.url));
@@ -37,6 +37,51 @@ function copyFile(src, dest) {
37
37
  }
38
38
  }
39
39
 
40
+ /**
41
+ * ディレクトリを再帰的にコピー
42
+ */
43
+ function copyDirectory(srcDir, destDir) {
44
+ const srcPath = resolve(projectRoot, srcDir);
45
+ const destPath = resolve(projectRoot, destDir);
46
+
47
+ if (!existsSync(srcPath)) {
48
+ console.error(`❌ Source directory not found: ${srcPath}`);
49
+ process.exit(1);
50
+ }
51
+
52
+ if (!statSync(srcPath).isDirectory()) {
53
+ console.error(`❌ Source is not a directory: ${srcPath}`);
54
+ process.exit(1);
55
+ }
56
+
57
+ // コピー先のディレクトリを作成
58
+ if (!existsSync(destPath)) {
59
+ mkdirSync(destPath, { recursive: true });
60
+ }
61
+
62
+ try {
63
+ const entries = readdirSync(srcPath, { withFileTypes: true });
64
+
65
+ for (const entry of entries) {
66
+ const srcEntryPath = join(srcPath, entry.name);
67
+ const destEntryPath = join(destPath, entry.name);
68
+
69
+ if (entry.isDirectory()) {
70
+ // ディレクトリの場合は再帰的にコピー
71
+ copyDirectory(srcEntryPath, destEntryPath);
72
+ } else {
73
+ // ファイルの場合はコピー
74
+ copyFileSync(srcEntryPath, destEntryPath);
75
+ console.log(`✅ Copied: ${entry.name}`);
76
+ }
77
+ }
78
+ console.log(`📁 Directory copied: ${srcDir} → ${destDir}`);
79
+ } catch (error) {
80
+ console.error(`❌ Failed to copy directory ${srcDir}:`, error.message);
81
+ process.exit(1);
82
+ }
83
+ }
84
+
40
85
  // コピー対象のファイル一覧
41
86
  const filesToCopy = [
42
87
  {
@@ -45,6 +90,18 @@ const filesToCopy = [
45
90
  }
46
91
  ];
47
92
 
93
+ // コピー対象のディレクトリ一覧
94
+ const directoriesToCopy = [
95
+ {
96
+ src: 'templates/multi-repo',
97
+ dest: 'dist/templates/multi-repo'
98
+ }
99
+ ];
100
+
48
101
  console.log('📦 Copying static assets...');
49
102
  filesToCopy.forEach(({ src, dest }) => copyFile(src, dest));
103
+
104
+ console.log('📁 Copying template directories...');
105
+ directoriesToCopy.forEach(({ src, dest }) => copyDirectory(src, dest));
106
+
50
107
  console.log('✅ All static assets copied successfully.');