@sk8metal/michi-cli 0.8.4 → 0.8.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/CHANGELOG.md +38 -0
- package/README.md +42 -0
- 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/README.md +1 -0
- package/docs/user-guide/guides/multi-repo-guide.md +113 -0
- package/package.json +1 -1
- package/scripts/copy-static-assets.js +61 -4
- package/templates/claude/commands/michi_multi_repo/spec-design.md +296 -0
- package/templates/claude/commands/michi_multi_repo/spec-init.md +228 -0
- package/templates/claude/commands/michi_multi_repo/spec-requirements.md +198 -0
- package/templates/multi-repo/overview/architecture.md +81 -0
- package/templates/multi-repo/overview/requirements.md +42 -0
- package/templates/multi-repo/spec.json +20 -0
|
@@ -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 | 初版作成 | - |
|
package/docs/README.md
CHANGED
|
@@ -25,6 +25,7 @@ Michiを使った開発の実践的なガイドです。
|
|
|
25
25
|
|------------|------|
|
|
26
26
|
| [ワークフローガイド](./guides/workflow.md) ⭐ | AI開発フローの詳細 |
|
|
27
27
|
| [フェーズ自動化ガイド](./guides/phase-automation.md) ⭐ | Confluence/JIRA自動作成 |
|
|
28
|
+
| [Multi-Repo管理ガイド](./guides/multi-repo-guide.md) | マイクロサービス等複数リポジトリの統合管理、AI支援初期化・要件定義・設計 |
|
|
28
29
|
| [マルチプロジェクト管理](./guides/multi-project.md) | 複数プロジェクトの同時管理 |
|
|
29
30
|
| [カスタマイズガイド](./guides/customization.md) | Confluence/JIRA階層構造のカスタマイズ |
|
|
30
31
|
|
|
@@ -906,6 +906,119 @@ michi config:validate
|
|
|
906
906
|
|
|
907
907
|
**A**: 現在、削除用のコマンドはありません。`.michi/config.json` を直接編集して該当プロジェクトを削除してください。将来のバージョンで削除コマンドを追加予定です。
|
|
908
908
|
|
|
909
|
+
## AI支援要件定義・設計
|
|
910
|
+
|
|
911
|
+
Multi-Repoプロジェクトでは、AI支援による要件定義・設計書の自動生成が可能です。
|
|
912
|
+
|
|
913
|
+
### 前提条件
|
|
914
|
+
|
|
915
|
+
- プロジェクトが初期化されていること(`/michi_multi_repo:spec-init` または `michi multi-repo:init`)
|
|
916
|
+
- 1つ以上のリポジトリが登録されていること(`michi multi-repo:add-repo`)
|
|
917
|
+
|
|
918
|
+
### 6. AIプロジェクト初期化(NEW)
|
|
919
|
+
|
|
920
|
+
Multi-Repoプロジェクトを AI支援で初期化します。`michi multi-repo:init` の代替コマンドです。
|
|
921
|
+
|
|
922
|
+
```bash
|
|
923
|
+
/michi_multi_repo:spec-init "<プロジェクト説明>" --jira <JIRA_KEY> --confluence-space <SPACE>
|
|
924
|
+
```
|
|
925
|
+
|
|
926
|
+
**例**:
|
|
927
|
+
```bash
|
|
928
|
+
/michi_multi_repo:spec-init "マイクロサービスアーキテクチャでECサイトを構築" --jira MSV --confluence-space MSV
|
|
929
|
+
```
|
|
930
|
+
|
|
931
|
+
**機能**:
|
|
932
|
+
- プロジェクト説明からプロジェクト名を自動生成
|
|
933
|
+
- ディレクトリ構造を作成(`docs/michi/{project}/`)
|
|
934
|
+
- メタデータファイル(`spec.json`)を作成
|
|
935
|
+
- `.michi/config.json` の `multiRepoProjects` に登録
|
|
936
|
+
- 初期テンプレートファイルを生成
|
|
937
|
+
|
|
938
|
+
**出力**:
|
|
939
|
+
- `docs/michi/{project}/spec.json` - メタデータ(phase: initialized)
|
|
940
|
+
- `docs/michi/{project}/overview/requirements.md` - 要件定義書(初期化済み)
|
|
941
|
+
- `docs/michi/{project}/overview/architecture.md` - 設計書(テンプレート)
|
|
942
|
+
- `.michi/config.json` - multiRepoProjects に追加
|
|
943
|
+
|
|
944
|
+
**`michi multi-repo:init` との違い**:
|
|
945
|
+
- プロジェクト説明を入力して自動的にプロジェクト名を生成
|
|
946
|
+
- spec.json でメタデータ管理(phase、承認状態等)
|
|
947
|
+
- AIコマンドで一貫したワークフローを実現
|
|
948
|
+
|
|
949
|
+
### 7. AI要件定義書の生成
|
|
950
|
+
|
|
951
|
+
プロジェクトの要件定義書をAI支援で自動生成します。
|
|
952
|
+
|
|
953
|
+
```bash
|
|
954
|
+
/michi_multi_repo:spec-requirements <project-name>
|
|
955
|
+
```
|
|
956
|
+
|
|
957
|
+
**例**:
|
|
958
|
+
```bash
|
|
959
|
+
/michi_multi_repo:spec-requirements my-microservices
|
|
960
|
+
```
|
|
961
|
+
|
|
962
|
+
**生成される内容**:
|
|
963
|
+
- プロジェクト概要
|
|
964
|
+
- サービス構成(登録リポジトリ一覧、依存関係図)
|
|
965
|
+
- インターフェース要件(API契約、イベント契約)
|
|
966
|
+
- 機能要件(EARS形式)
|
|
967
|
+
- 非機能要件(パフォーマンス、セキュリティ等)
|
|
968
|
+
|
|
969
|
+
**出力先**: `docs/michi/{project}/overview/requirements.md`
|
|
970
|
+
|
|
971
|
+
### 8. AI設計書の生成
|
|
972
|
+
|
|
973
|
+
プロジェクトの技術設計書をAI支援で自動生成します。
|
|
974
|
+
|
|
975
|
+
```bash
|
|
976
|
+
/michi_multi_repo:spec-design <project-name> [-y]
|
|
977
|
+
```
|
|
978
|
+
|
|
979
|
+
**例**:
|
|
980
|
+
```bash
|
|
981
|
+
/michi_multi_repo:spec-design my-microservices
|
|
982
|
+
```
|
|
983
|
+
|
|
984
|
+
**生成される内容**:
|
|
985
|
+
- システム全体図(C4モデル)
|
|
986
|
+
- サービス横断アーキテクチャ
|
|
987
|
+
- サービス間通信設計
|
|
988
|
+
- 共有コンポーネント
|
|
989
|
+
- デプロイメントアーキテクチャ
|
|
990
|
+
- データフロー図
|
|
991
|
+
|
|
992
|
+
**出力先**: `docs/michi/{project}/overview/architecture.md`
|
|
993
|
+
|
|
994
|
+
**オプション**:
|
|
995
|
+
- `-y`: 既存ファイルの上書きを自動承認
|
|
996
|
+
|
|
997
|
+
### ワークフロー例(AIコマンド使用)
|
|
998
|
+
|
|
999
|
+
```bash
|
|
1000
|
+
# 1. AI初期化(NEW - michi multi-repo:init の代替)
|
|
1001
|
+
/michi_multi_repo:spec-init "マイクロサービスアーキテクチャでECサイトを構築" --jira MSV --confluence-space MSV
|
|
1002
|
+
|
|
1003
|
+
# 2. リポジトリ登録
|
|
1004
|
+
michi multi-repo:add-repo my-microservices --name frontend --url https://github.com/myorg/frontend --branch main
|
|
1005
|
+
michi multi-repo:add-repo my-microservices --name backend --url https://github.com/myorg/backend --branch main
|
|
1006
|
+
michi multi-repo:add-repo my-microservices --name database --url https://github.com/myorg/db-schema --branch main
|
|
1007
|
+
|
|
1008
|
+
# 3. AI要件定義書生成(NEW)
|
|
1009
|
+
/michi_multi_repo:spec-requirements my-microservices
|
|
1010
|
+
|
|
1011
|
+
# 4. AI設計書生成(NEW)
|
|
1012
|
+
/michi_multi_repo:spec-design my-microservices
|
|
1013
|
+
|
|
1014
|
+
# 5. Confluence同期
|
|
1015
|
+
michi multi-repo:confluence-sync my-microservices --doc-type requirements
|
|
1016
|
+
michi multi-repo:confluence-sync my-microservices --doc-type architecture
|
|
1017
|
+
|
|
1018
|
+
# 6. CI結果確認
|
|
1019
|
+
michi multi-repo:ci-status my-microservices
|
|
1020
|
+
```
|
|
1021
|
+
|
|
909
1022
|
## 関連ドキュメント
|
|
910
1023
|
|
|
911
1024
|
- [ワークフローガイド](./workflow.md): Michiの全体的な開発ワークフロー
|
package/package.json
CHANGED
|
@@ -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.');
|
|
@@ -0,0 +1,296 @@
|
|
|
1
|
+
---
|
|
2
|
+
description: Multi-Repoプロジェクトの設計書をAI支援で生成
|
|
3
|
+
allowed-tools: Bash, Glob, Grep, LS, Read, Write, Edit, MultiEdit, Update, WebSearch, WebFetch
|
|
4
|
+
argument-hint: <project-name> [-y]
|
|
5
|
+
---
|
|
6
|
+
|
|
7
|
+
# Multi-Repo Design Generator
|
|
8
|
+
|
|
9
|
+
<background_information>
|
|
10
|
+
- **Mission**: Multi-Repoプロジェクトの包括的な技術設計書を生成
|
|
11
|
+
- **Success Criteria**:
|
|
12
|
+
- 全サービスのアーキテクチャを統合
|
|
13
|
+
- サービス間通信の設計を明確化
|
|
14
|
+
- 各サービスの技術スタックを反映
|
|
15
|
+
- C4モデルに基づいた視覚的な設計図を含む
|
|
16
|
+
</background_information>
|
|
17
|
+
|
|
18
|
+
<instructions>
|
|
19
|
+
## Core Task
|
|
20
|
+
Multi-Repoプロジェクト **$1** の技術設計書を生成します。
|
|
21
|
+
|
|
22
|
+
## Execution Steps
|
|
23
|
+
|
|
24
|
+
### Step 1: コンテキスト読み込み
|
|
25
|
+
1. `.michi/config.json` からプロジェクト情報取得
|
|
26
|
+
- プロジェクト名、JIRAキー、Confluenceスペース
|
|
27
|
+
- 登録リポジトリ一覧
|
|
28
|
+
2. `docs/michi/$1/overview/requirements.md` から要件読み込み
|
|
29
|
+
- 要件定義書が存在しない場合は、先に `/michi_multi_repo:spec-requirements $1` の実行を促す
|
|
30
|
+
3. `.kiro/settings/rules/design-principles.md` から設計原則取得(存在する場合)
|
|
31
|
+
4. `.kiro/settings/templates/specs/design.md` から構造参照(存在する場合)
|
|
32
|
+
|
|
33
|
+
### Step 2: Discovery & Analysis
|
|
34
|
+
|
|
35
|
+
**Multi-Repo固有の分析**:
|
|
36
|
+
|
|
37
|
+
1. **各リポジトリの技術スタック調査**
|
|
38
|
+
- package.json / build.gradle / composer.json / requirements.txt
|
|
39
|
+
- 使用フレームワーク、ライブラリバージョン
|
|
40
|
+
- 依存関係の分析
|
|
41
|
+
|
|
42
|
+
2. **サービス間通信パターンの特定**
|
|
43
|
+
- REST API / GraphQL / gRPC
|
|
44
|
+
- メッセージキュー / イベントバス(Kafka、RabbitMQ等)
|
|
45
|
+
- 同期通信 vs 非同期通信
|
|
46
|
+
|
|
47
|
+
3. **共有コンポーネントの識別**
|
|
48
|
+
- 共通ライブラリ
|
|
49
|
+
- 共有データモデル
|
|
50
|
+
- 共通インフラストラクチャ(ログ、監視、認証等)
|
|
51
|
+
|
|
52
|
+
4. **データフローの分析**
|
|
53
|
+
- サービス間のデータ連携
|
|
54
|
+
- データの永続化方式
|
|
55
|
+
- キャッシュ戦略
|
|
56
|
+
|
|
57
|
+
### Step 3: 設計書生成
|
|
58
|
+
|
|
59
|
+
以下のセクションを含む設計書を生成します:
|
|
60
|
+
|
|
61
|
+
1. **システム全体図**
|
|
62
|
+
- C4モデル - システムコンテキスト図(Mermaid)
|
|
63
|
+
- 全サービスの配置とフロー
|
|
64
|
+
- 外部システムとの連携
|
|
65
|
+
|
|
66
|
+
2. **サービス横断アーキテクチャ**
|
|
67
|
+
- マイクロサービス構成図(C4モデル推奨)
|
|
68
|
+
- サービス間API契約定義
|
|
69
|
+
- イベントスキーマ定義
|
|
70
|
+
- データフロー図
|
|
71
|
+
|
|
72
|
+
3. **各サービスの設計**
|
|
73
|
+
- コンポーネント図
|
|
74
|
+
- インターフェース定義
|
|
75
|
+
- データモデル
|
|
76
|
+
- 主要クラス/モジュール構造
|
|
77
|
+
|
|
78
|
+
4. **セキュリティ設計**
|
|
79
|
+
- 認証・認可の連携(OAuth2、JWT等)
|
|
80
|
+
- 通信暗号化(TLS、mTLS)
|
|
81
|
+
- シークレット管理
|
|
82
|
+
|
|
83
|
+
5. **デプロイメントアーキテクチャ**
|
|
84
|
+
- インフラストラクチャ構成(Kubernetes、Docker等)
|
|
85
|
+
- ネットワーク設計
|
|
86
|
+
- スケーリング戦略
|
|
87
|
+
|
|
88
|
+
6. **データモデル**
|
|
89
|
+
- サービス横断のデータフロー
|
|
90
|
+
- データベーススキーマ(サービスごと)
|
|
91
|
+
- データ整合性の保証方法
|
|
92
|
+
|
|
93
|
+
### Step 4: ファイル保存
|
|
94
|
+
- 出力先: `docs/michi/$1/overview/architecture.md`
|
|
95
|
+
- 既存ファイルがある場合は、上書き確認(`-y` フラグで自動承認)
|
|
96
|
+
|
|
97
|
+
### Step 5: メタデータ更新(spec.json)
|
|
98
|
+
- `docs/michi/$1/spec.json` を読み込み
|
|
99
|
+
- phase を `"design-generated"` に更新
|
|
100
|
+
- `approvals.design.generated` を `true` に更新
|
|
101
|
+
- `updated_at` を現在のISO 8601タイムスタンプに更新
|
|
102
|
+
- spec.json を保存
|
|
103
|
+
|
|
104
|
+
## Multi-Repo固有セクション
|
|
105
|
+
|
|
106
|
+
設計書に以下のセクションを必ず含めること:
|
|
107
|
+
|
|
108
|
+
```markdown
|
|
109
|
+
## サービス横断アーキテクチャ
|
|
110
|
+
|
|
111
|
+
### C4モデル - システムコンテキスト図
|
|
112
|
+
|
|
113
|
+
\`\`\`mermaid
|
|
114
|
+
C4Context
|
|
115
|
+
title System Context Diagram
|
|
116
|
+
|
|
117
|
+
Person(user, "User", "エンドユーザー")
|
|
118
|
+
System(frontend, "Frontend Service", "Webアプリケーション")
|
|
119
|
+
System(backend, "Backend Service", "APIサーバー")
|
|
120
|
+
System_Ext(external_api, "External API", "外部サービス")
|
|
121
|
+
|
|
122
|
+
Rel(user, frontend, "Uses", "HTTPS")
|
|
123
|
+
Rel(frontend, backend, "API calls", "REST/HTTPS")
|
|
124
|
+
Rel(backend, external_api, "Integrates", "REST/HTTPS")
|
|
125
|
+
\`\`\`
|
|
126
|
+
|
|
127
|
+
### サービス間通信
|
|
128
|
+
|
|
129
|
+
| 呼び出し元 | 呼び出し先 | 方式 | プロトコル | 用途 |
|
|
130
|
+
|-----------|-----------|------|-----------|------|
|
|
131
|
+
| Frontend | API Gateway | 同期 | REST/HTTPS | ユーザーリクエスト処理 |
|
|
132
|
+
| API Gateway | Auth Service | 同期 | gRPC | 認証・認可 |
|
|
133
|
+
| User Service | Notification Service | 非同期 | Kafka | ユーザー作成イベント通知 |
|
|
134
|
+
|
|
135
|
+
### 共有コンポーネント
|
|
136
|
+
|
|
137
|
+
**共通ライブラリ**:
|
|
138
|
+
- `@org/shared-types`: TypeScript型定義(全サービスで共有)
|
|
139
|
+
- `@org/logger`: 統一ログライブラリ
|
|
140
|
+
|
|
141
|
+
**共通インフラ**:
|
|
142
|
+
- Elasticsearch: ログ集約
|
|
143
|
+
- Prometheus + Grafana: メトリクス監視
|
|
144
|
+
- Keycloak: 統合認証基盤
|
|
145
|
+
|
|
146
|
+
### デプロイメントアーキテクチャ
|
|
147
|
+
|
|
148
|
+
\`\`\`mermaid
|
|
149
|
+
graph TB
|
|
150
|
+
subgraph "Production Kubernetes Cluster"
|
|
151
|
+
LB[Load Balancer]
|
|
152
|
+
FE1[Frontend Pod 1]
|
|
153
|
+
FE2[Frontend Pod 2]
|
|
154
|
+
BE1[Backend Pod 1]
|
|
155
|
+
BE2[Backend Pod 2]
|
|
156
|
+
DB[(PostgreSQL)]
|
|
157
|
+
|
|
158
|
+
LB --> FE1
|
|
159
|
+
LB --> FE2
|
|
160
|
+
FE1 --> BE1
|
|
161
|
+
FE2 --> BE2
|
|
162
|
+
BE1 --> DB
|
|
163
|
+
BE2 --> DB
|
|
164
|
+
end
|
|
165
|
+
\`\`\`
|
|
166
|
+
|
|
167
|
+
### データフロー
|
|
168
|
+
|
|
169
|
+
\`\`\`mermaid
|
|
170
|
+
sequenceDiagram
|
|
171
|
+
participant User
|
|
172
|
+
participant Frontend
|
|
173
|
+
participant API Gateway
|
|
174
|
+
participant Auth Service
|
|
175
|
+
participant User Service
|
|
176
|
+
participant Database
|
|
177
|
+
|
|
178
|
+
User->>Frontend: リクエスト
|
|
179
|
+
Frontend->>API Gateway: API呼び出し
|
|
180
|
+
API Gateway->>Auth Service: トークン検証
|
|
181
|
+
Auth Service-->>API Gateway: 検証成功
|
|
182
|
+
API Gateway->>User Service: ユーザー情報取得
|
|
183
|
+
User Service->>Database: クエリ実行
|
|
184
|
+
Database-->>User Service: データ返却
|
|
185
|
+
User Service-->>API Gateway: レスポンス
|
|
186
|
+
API Gateway-->>Frontend: レスポンス
|
|
187
|
+
Frontend-->>User: 表示
|
|
188
|
+
\`\`\`
|
|
189
|
+
```
|
|
190
|
+
|
|
191
|
+
## Important Constraints
|
|
192
|
+
- 実装詳細ではなく、アーキテクチャ設計に焦点を当てる
|
|
193
|
+
- サービス間の境界とインターフェースを明確にする
|
|
194
|
+
- 技術選定の理由を記述する
|
|
195
|
+
- スケーラビリティとパフォーマンスを考慮
|
|
196
|
+
- セキュリティ要件を設計に反映
|
|
197
|
+
|
|
198
|
+
</instructions>
|
|
199
|
+
|
|
200
|
+
## Tool Guidance
|
|
201
|
+
- **Read first**: プロジェクト設定、要件定義書、設計原則、テンプレートを読み込み
|
|
202
|
+
- **Glob/Grep**: 各リポジトリの技術スタック調査(ローカルクローンがある場合)
|
|
203
|
+
- **Write last**: 設計書を最後に保存
|
|
204
|
+
- **WebSearch/WebFetch**: 最新の設計パターンやベストプラクティスが必要な場合のみ使用
|
|
205
|
+
|
|
206
|
+
## Output Description
|
|
207
|
+
以下の情報を出力してください:
|
|
208
|
+
|
|
209
|
+
1. **生成された設計書のパス**: `docs/michi/{project}/overview/architecture.md`
|
|
210
|
+
2. **分析したリポジトリの一覧**: サービス名と技術スタックの要約
|
|
211
|
+
3. **次のステップ**:
|
|
212
|
+
- 設計書の確認
|
|
213
|
+
- Confluence同期
|
|
214
|
+
- 各リポジトリでの個別実装
|
|
215
|
+
|
|
216
|
+
**出力形式**:
|
|
217
|
+
```markdown
|
|
218
|
+
## 設計書生成完了
|
|
219
|
+
|
|
220
|
+
### 出力ファイル
|
|
221
|
+
`docs/michi/{project}/overview/architecture.md`
|
|
222
|
+
|
|
223
|
+
### 分析したサービス
|
|
224
|
+
- **Frontend**: React + TypeScript(3リポジトリ依存)
|
|
225
|
+
- **Backend**: Node.js + Express(2リポジトリ依存)
|
|
226
|
+
- **Auth Service**: Go + gRPC(独立)
|
|
227
|
+
|
|
228
|
+
### アーキテクチャ概要
|
|
229
|
+
- **通信方式**: REST API(同期)、Kafka(非同期イベント)
|
|
230
|
+
- **データベース**: PostgreSQL(サービスごとにDB分離)
|
|
231
|
+
- **デプロイ**: Kubernetes(Pod自動スケーリング)
|
|
232
|
+
|
|
233
|
+
### 次のステップ
|
|
234
|
+
1. 設計書を確認: `docs/michi/{project}/overview/architecture.md`
|
|
235
|
+
2. Confluenceに同期: `michi multi-repo:confluence-sync {project} --doc-type architecture`
|
|
236
|
+
3. 各リポジトリで実装を開始:
|
|
237
|
+
- `/kiro:spec-init` で個別仕様を作成
|
|
238
|
+
- または直接実装を開始
|
|
239
|
+
```
|
|
240
|
+
|
|
241
|
+
## Safety & Fallback
|
|
242
|
+
|
|
243
|
+
### Error Scenarios
|
|
244
|
+
- **要件定義書未作成**:
|
|
245
|
+
```
|
|
246
|
+
エラー: 要件定義書が見つかりません: `docs/michi/{project}/overview/requirements.md`
|
|
247
|
+
|
|
248
|
+
先に要件定義書を生成してください:
|
|
249
|
+
/michi_multi_repo:spec-requirements {project}
|
|
250
|
+
```
|
|
251
|
+
|
|
252
|
+
- **プロジェクト未登録**:
|
|
253
|
+
```
|
|
254
|
+
エラー: プロジェクト '{project}' が見つかりません。
|
|
255
|
+
|
|
256
|
+
次のコマンドでプロジェクトを初期化してください:
|
|
257
|
+
michi multi-repo:init {project} --jira {JIRA_KEY} --confluence-space {SPACE}
|
|
258
|
+
```
|
|
259
|
+
|
|
260
|
+
- **リポジトリアクセス不可**:
|
|
261
|
+
```
|
|
262
|
+
警告: 一部のリポジトリのローカルクローンがありません。
|
|
263
|
+
|
|
264
|
+
設定情報(URL、ブランチ)から推測して設計書を生成します。
|
|
265
|
+
より詳細な設計が必要な場合は、リポジトリをクローンしてから再実行してください。
|
|
266
|
+
```
|
|
267
|
+
|
|
268
|
+
- **既存ファイル存在(`-y` フラグなし)**:
|
|
269
|
+
```
|
|
270
|
+
警告: 既存の設計書が存在します: `docs/michi/{project}/overview/architecture.md`
|
|
271
|
+
|
|
272
|
+
上書きしてもよろしいですか? (y/n)
|
|
273
|
+
または `-y` フラグを使用して自動承認できます。
|
|
274
|
+
```
|
|
275
|
+
|
|
276
|
+
### Fallback Strategy
|
|
277
|
+
- **設計原則ファイル不在**: 基本的な設計原則(SOLID、DRY等)を適用
|
|
278
|
+
- **技術スタック不明**: README や設定ファイルから推測、または "未指定" として記載
|
|
279
|
+
- **依存関係不明**: 基本的なクライアント-サーバー構成を仮定
|
|
280
|
+
- **テンプレート不在**: インラインで基本構造を使用
|
|
281
|
+
|
|
282
|
+
### Next Phase: Implementation
|
|
283
|
+
|
|
284
|
+
**設計書承認後**:
|
|
285
|
+
1. 設計書を確認: `docs/michi/{project}/overview/architecture.md`
|
|
286
|
+
2. Confluenceに同期: `michi multi-repo:confluence-sync {project} --doc-type architecture`
|
|
287
|
+
3. **各リポジトリで個別実装**:
|
|
288
|
+
- リポジトリごとに `/kiro:spec-init` で仕様作成
|
|
289
|
+
- または直接実装を開始
|
|
290
|
+
4. **CI/CD設定**: `michi multi-repo:ci-status {project}` でCI結果を監視
|
|
291
|
+
|
|
292
|
+
**修正が必要な場合**:
|
|
293
|
+
- フィードバックを提供し、`/michi_multi_repo:spec-design $1` を再実行
|
|
294
|
+
- `-y` フラグで自動上書き可能
|
|
295
|
+
|
|
296
|
+
think hard
|