@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.
- package/CHANGELOG.md +35 -0
- package/README.md +4 -3
- package/dist/scripts/constants/environments.js +3 -3
- package/dist/scripts/constants/environments.js.map +1 -1
- package/dist/templates/multi-repo/docs/ci-status.md +51 -0
- package/dist/templates/multi-repo/docs/release-notes.md +99 -0
- package/dist/templates/multi-repo/overview/architecture.md +183 -0
- package/dist/templates/multi-repo/overview/requirements.md +110 -0
- package/dist/templates/multi-repo/overview/sequence.md +79 -0
- package/dist/templates/multi-repo/spec.json +20 -0
- package/dist/templates/multi-repo/steering/multi-repo.md +74 -0
- package/dist/templates/multi-repo/tests/strategy.md +89 -0
- package/docs/michi-development/testing/manual-verification-other-tools.md +10 -8
- package/docs/user-guide/getting-started/new-repository-setup.md +4 -3
- package/docs/user-guide/guides/migration-guide.md +138 -0
- package/docs/user-guide/guides/multi-repo-guide.md +130 -10
- package/package.json +1 -1
- package/scripts/constants/__tests__/environments.test.ts +3 -3
- package/scripts/constants/environments.ts +3 -3
- package/scripts/copy-static-assets.js +61 -4
- package/templates/claude/commands/{michi_multi_repo → michi-multi-repo}/spec-design.md +3 -3
- package/templates/claude/commands/{michi_multi_repo → michi-multi-repo}/spec-init.md +6 -6
- package/templates/claude/commands/{michi_multi_repo → michi-multi-repo}/spec-requirements.md +2 -2
|
@@ -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/
|
|
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
|
|
411
|
-
│ ├── kiro-spec-
|
|
412
|
-
│ ├── kiro-spec-
|
|
413
|
-
│ ├── kiro-spec-
|
|
414
|
-
│ ├──
|
|
415
|
-
│
|
|
416
|
-
│ └── 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
|
-
|
|
264
|
-
cp $MICHI_PATH/.cursor/commands/
|
|
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
|
-
- プロジェクトが初期化されていること(`/
|
|
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
|
-
/
|
|
1043
|
+
/michi-multi-repo:spec-init "<プロジェクト説明>" --jira <JIRA_KEY> --confluence-space <SPACE>
|
|
924
1044
|
```
|
|
925
1045
|
|
|
926
1046
|
**例**:
|
|
927
1047
|
```bash
|
|
928
|
-
/
|
|
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
|
-
/
|
|
1074
|
+
/michi-multi-repo:spec-requirements <project-name>
|
|
955
1075
|
```
|
|
956
1076
|
|
|
957
1077
|
**例**:
|
|
958
1078
|
```bash
|
|
959
|
-
/
|
|
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
|
-
/
|
|
1096
|
+
/michi-multi-repo:spec-design <project-name> [-y]
|
|
977
1097
|
```
|
|
978
1098
|
|
|
979
1099
|
**例**:
|
|
980
1100
|
```bash
|
|
981
|
-
/
|
|
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
|
-
/
|
|
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
|
-
/
|
|
1129
|
+
/michi-multi-repo:spec-requirements my-microservices
|
|
1010
1130
|
|
|
1011
1131
|
# 4. AI設計書生成(NEW)
|
|
1012
|
-
/
|
|
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
|
@@ -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
|
|
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
|
|
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
|
|
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
|
|
24
|
+
commandsDir: '.claude/commands',
|
|
25
25
|
templateSource: 'claude',
|
|
26
26
|
},
|
|
27
27
|
'claude-agent': {
|
|
28
28
|
rulesDir: '.claude/agents',
|
|
29
|
-
commandsDir: '.claude/commands
|
|
29
|
+
commandsDir: '.claude/commands',
|
|
30
30
|
templateSource: 'claude-agent',
|
|
31
31
|
},
|
|
32
32
|
cursor: {
|
|
33
33
|
rulesDir: '.cursor/rules',
|
|
34
|
-
commandsDir: '.cursor/commands
|
|
34
|
+
commandsDir: '.cursor/commands',
|
|
35
35
|
templateSource: 'cursor',
|
|
36
36
|
},
|
|
37
37
|
gemini: {
|
|
@@ -1,10 +1,10 @@
|
|
|
1
1
|
/**
|
|
2
|
-
* ビルド時に静的アセット(JSON
|
|
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.');
|