@sk8metal/michi-cli 0.0.8 → 0.0.9
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 +33 -0
- package/README.md +202 -9
- package/dist/scripts/__tests__/setup-existing-project.test.js +67 -5
- package/dist/scripts/__tests__/setup-existing-project.test.js.map +1 -1
- package/dist/scripts/constants/__tests__/environments.test.d.ts +2 -0
- package/dist/scripts/constants/__tests__/environments.test.d.ts.map +1 -0
- package/dist/scripts/constants/__tests__/environments.test.js +91 -0
- package/dist/scripts/constants/__tests__/environments.test.js.map +1 -0
- package/dist/scripts/constants/__tests__/languages.test.d.ts +2 -0
- package/dist/scripts/constants/__tests__/languages.test.d.ts.map +1 -0
- package/dist/scripts/constants/__tests__/languages.test.js +82 -0
- package/dist/scripts/constants/__tests__/languages.test.js.map +1 -0
- package/dist/scripts/constants/environments.d.ts +33 -0
- package/dist/scripts/constants/environments.d.ts.map +1 -0
- package/dist/scripts/constants/environments.js +49 -0
- package/dist/scripts/constants/environments.js.map +1 -0
- package/dist/scripts/constants/languages.d.ts +23 -0
- package/dist/scripts/constants/languages.d.ts.map +1 -0
- package/dist/scripts/constants/languages.js +53 -0
- package/dist/scripts/constants/languages.js.map +1 -0
- package/dist/scripts/create-project.d.ts +4 -0
- package/dist/scripts/create-project.d.ts.map +1 -1
- package/dist/scripts/create-project.js +51 -22
- package/dist/scripts/create-project.js.map +1 -1
- package/dist/scripts/setup-existing-project.d.ts +3 -1
- package/dist/scripts/setup-existing-project.d.ts.map +1 -1
- package/dist/scripts/setup-existing-project.js +110 -55
- package/dist/scripts/setup-existing-project.js.map +1 -1
- package/dist/scripts/template/__tests__/renderer.test.d.ts +2 -0
- package/dist/scripts/template/__tests__/renderer.test.d.ts.map +1 -0
- package/dist/scripts/template/__tests__/renderer.test.js +165 -0
- package/dist/scripts/template/__tests__/renderer.test.js.map +1 -0
- package/dist/scripts/template/renderer.d.ts +70 -0
- package/dist/scripts/template/renderer.d.ts.map +1 -0
- package/dist/scripts/template/renderer.js +99 -0
- package/dist/scripts/template/renderer.js.map +1 -0
- package/dist/scripts/utils/template-finder.d.ts +37 -0
- package/dist/scripts/utils/template-finder.d.ts.map +1 -0
- package/dist/scripts/utils/template-finder.js +63 -0
- package/dist/scripts/utils/template-finder.js.map +1 -0
- package/dist/src/__tests__/integration/setup/claude-agent.test.d.ts +5 -0
- package/dist/src/__tests__/integration/setup/claude-agent.test.d.ts.map +1 -0
- package/dist/src/__tests__/integration/setup/claude-agent.test.js +125 -0
- package/dist/src/__tests__/integration/setup/claude-agent.test.js.map +1 -0
- package/dist/src/__tests__/integration/setup/claude.test.d.ts +5 -0
- package/dist/src/__tests__/integration/setup/claude.test.d.ts.map +1 -0
- package/dist/src/__tests__/integration/setup/claude.test.js +111 -0
- package/dist/src/__tests__/integration/setup/claude.test.js.map +1 -0
- package/dist/src/__tests__/integration/setup/cursor.test.d.ts +5 -0
- package/dist/src/__tests__/integration/setup/cursor.test.d.ts.map +1 -0
- package/dist/src/__tests__/integration/setup/cursor.test.js +162 -0
- package/dist/src/__tests__/integration/setup/cursor.test.js.map +1 -0
- package/dist/src/__tests__/integration/setup/helpers/fs-assertions.d.ts +32 -0
- package/dist/src/__tests__/integration/setup/helpers/fs-assertions.d.ts.map +1 -0
- package/dist/src/__tests__/integration/setup/helpers/fs-assertions.js +72 -0
- package/dist/src/__tests__/integration/setup/helpers/fs-assertions.js.map +1 -0
- package/dist/src/__tests__/integration/setup/helpers/test-project.d.ts +38 -0
- package/dist/src/__tests__/integration/setup/helpers/test-project.d.ts.map +1 -0
- package/dist/src/__tests__/integration/setup/helpers/test-project.js +83 -0
- package/dist/src/__tests__/integration/setup/helpers/test-project.js.map +1 -0
- package/dist/src/__tests__/integration/setup/validation.test.d.ts +5 -0
- package/dist/src/__tests__/integration/setup/validation.test.d.ts.map +1 -0
- package/dist/src/__tests__/integration/setup/validation.test.js +318 -0
- package/dist/src/__tests__/integration/setup/validation.test.js.map +1 -0
- package/dist/src/cli.d.ts.map +1 -1
- package/dist/src/cli.js +20 -0
- package/dist/src/cli.js.map +1 -1
- package/dist/src/commands/setup-existing.d.ts +22 -0
- package/dist/src/commands/setup-existing.d.ts.map +1 -0
- package/dist/src/commands/setup-existing.js +408 -0
- package/dist/src/commands/setup-existing.js.map +1 -0
- package/dist/vitest.config.d.ts.map +1 -1
- package/dist/vitest.config.js +4 -3
- package/dist/vitest.config.js.map +1 -1
- package/docs/getting-started/new-repository-setup.md +108 -28
- package/docs/getting-started/quick-start.md +57 -6
- package/docs/getting-started/setup.md +250 -2
- package/docs/guides/customization.md +3 -3
- package/docs/guides/multi-project.md +1 -1
- package/docs/reference/quick-reference.md +25 -16
- package/docs/testing/integration-tests.md +297 -0
- package/package.json +7 -2
- package/scripts/__tests__/setup-existing-project.test.ts +73 -5
- package/scripts/constants/__tests__/environments.test.ts +110 -0
- package/scripts/constants/__tests__/languages.test.ts +100 -0
- package/scripts/constants/environments.ts +61 -0
- package/scripts/constants/languages.ts +70 -0
- package/scripts/create-project.ts +52 -22
- package/scripts/setup-existing-project.ts +136 -57
- package/scripts/setup-existing.sh +130 -3
- package/scripts/template/__tests__/renderer.test.ts +207 -0
- package/scripts/template/renderer.ts +133 -0
- package/scripts/utils/template-finder.ts +75 -0
- package/templates/claude/commands/michi/confluence-sync.md +38 -0
- package/templates/claude/commands/michi/project-switch.md +36 -0
- package/templates/claude/rules/atlassian-integration.md +35 -0
- package/templates/claude/rules/michi-core.md +54 -0
- package/templates/claude-agent/README.md +25 -0
- package/templates/cursor/commands/michi/confluence-sync.md +76 -0
- package/templates/cursor/commands/michi/project-switch.md +69 -0
- package/templates/cursor/rules/atlassian-mcp.mdc +188 -0
- package/templates/cursor/rules/github-ssot.mdc +151 -0
- package/templates/cursor/rules/multi-project.mdc +81 -0
- package/scripts/setup-env.sh +0 -52
package/CHANGELOG.md
CHANGED
|
@@ -5,6 +5,39 @@ All notable changes to this project will be documented in this file.
|
|
|
5
5
|
The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/),
|
|
6
6
|
and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html).
|
|
7
7
|
|
|
8
|
+
## [0.0.9] - 2025-11-17
|
|
9
|
+
|
|
10
|
+
### Added
|
|
11
|
+
- **統合テストスイート**: `setup-existing`コマンドの統合テスト42個を追加(#39)
|
|
12
|
+
- 環境別テスト(Cursor, Claude, Claude Agent)
|
|
13
|
+
- バリデーションテスト(プロジェクト名、JIRAキー、言語サポート)
|
|
14
|
+
- テストヘルパー作成(`test-project.ts`, `fs-assertions.ts`)
|
|
15
|
+
- テストドキュメント(`docs/testing/integration-tests.md`)
|
|
16
|
+
- **CI/CDワークフロー**: 統合テスト用のGitHub Actionsワークフロー(`.github/workflows/test-setup.yml`)を追加
|
|
17
|
+
- Node.js 20.x, 22.xでのマトリックステスト
|
|
18
|
+
- カバレッジレポート(Codecov統合)
|
|
19
|
+
|
|
20
|
+
### Changed
|
|
21
|
+
- **Node.jsサポート範囲を変更**: Node.js 18.xのサポートを削除
|
|
22
|
+
- 理由: Vitest v4が使用する`node:inspector/promises`がNode.js 18.xで利用不可
|
|
23
|
+
- サポート対象: Node.js 20.x, 22.x
|
|
24
|
+
|
|
25
|
+
### Fixed
|
|
26
|
+
- **テンプレートパス解決のバグ修正**: `scripts/setup-existing-project.ts`がテンプレートを正しく見つけられない問題を修正
|
|
27
|
+
- `join(michiPath, templateSource)`から`join(michiPath, 'templates', templateSource)`に変更
|
|
28
|
+
- 影響: スクリプト直接実行時にテンプレートファイルがコピーされなかった
|
|
29
|
+
- **環境定数のテスト修正**: `scripts/constants/__tests__/environments.test.ts`の期待値を更新
|
|
30
|
+
- `templateSource`の値を`'templates/cursor'`から`'cursor'`に修正
|
|
31
|
+
- **誤解を招くテスト記述を修正**: テスト名とコメントを実装と一致させるよう改善
|
|
32
|
+
- JIRA key conversionテスト: 「拒否」から「変換」に記述を変更
|
|
33
|
+
- Cursor flagテスト: 「デフォルト」から「明示的フラグ」に記述を変更
|
|
34
|
+
- **親ディレクトリ取得の実装を修正**: `test-project.ts`の`writeFile`メソッドを改善
|
|
35
|
+
- 不正確な`join(filePath, '..')`から正しい`dirname(filePath)`に変更
|
|
36
|
+
|
|
37
|
+
### Tests
|
|
38
|
+
- **テスト成功率**: 82.4% (42/51テスト成功、9テストスキップ)
|
|
39
|
+
- **スキップされたテスト**: Issue #55(バリデーションエラーハンドリング)とIssue #56(Claude-agentテンプレート構造)で対応予定
|
|
40
|
+
|
|
8
41
|
## [0.0.8] - 2025-11-14
|
|
9
42
|
|
|
10
43
|
### Fixed
|
package/README.md
CHANGED
|
@@ -4,6 +4,7 @@
|
|
|
4
4
|
AI駆動開発ワークフロー自動化プラットフォーム
|
|
5
5
|
|
|
6
6
|
[](https://github.com/sk8metalme/michi/actions/workflows/ci.yml)
|
|
7
|
+
[](https://github.com/sk8metalme/michi/actions/workflows/test-setup.yml)
|
|
7
8
|
[](https://github.com/sk8metalme/michi/actions/workflows/security.yml)
|
|
8
9
|
[](https://codecov.io/gh/sk8metalme/michi)
|
|
9
10
|
|
|
@@ -198,6 +199,16 @@ michi/
|
|
|
198
199
|
│ ├── settings/ # テンプレート
|
|
199
200
|
│ ├── specs/ # 機能仕様書(GitHub SSoT)
|
|
200
201
|
│ └── steering/ # AIガイダンス
|
|
202
|
+
├── templates/ # cc-sdd準拠のマルチ環境テンプレート(Issue #35)
|
|
203
|
+
│ ├── cursor/ # Cursor IDE用テンプレート
|
|
204
|
+
│ │ ├── rules/ # ルールファイル(.mdc)
|
|
205
|
+
│ │ └── commands/
|
|
206
|
+
│ │ └── michi/ # Michi専用コマンド
|
|
207
|
+
│ ├── claude/ # Claude Code用テンプレート(プレースホルダー含む)
|
|
208
|
+
│ │ ├── rules/ # ルールファイル(.md、統合版)
|
|
209
|
+
│ │ └── commands/
|
|
210
|
+
│ │ └── michi/ # Michi専用コマンド(言語指示含む)
|
|
211
|
+
│ └── claude-agent/ # Claude Agentテンプレート
|
|
201
212
|
├── scripts/ # 自動化スクリプト
|
|
202
213
|
├── docs/ # ドキュメント
|
|
203
214
|
├── env.example # 環境変数テンプレート
|
|
@@ -205,6 +216,52 @@ michi/
|
|
|
205
216
|
└── package.json # 依存関係
|
|
206
217
|
```
|
|
207
218
|
|
|
219
|
+
### テンプレートアーキテクチャ
|
|
220
|
+
|
|
221
|
+
Michiは**cc-sdd準拠の多環境対応**を目指しています:
|
|
222
|
+
|
|
223
|
+
#### 設計原則
|
|
224
|
+
|
|
225
|
+
1. **単一の英語テンプレート**: 言語別ファイルを作らない
|
|
226
|
+
2. **プレースホルダー使用**: `{{LANG_CODE}}`, `{{DEV_GUIDELINES}}` 等
|
|
227
|
+
3. **AI駆動の多言語生成**: 実行時にAIが指定言語で出力
|
|
228
|
+
4. **セットアップ時は置換しない**: テンプレートをそのままコピー、AIが実行時に解釈
|
|
229
|
+
|
|
230
|
+
#### プレースホルダー一覧
|
|
231
|
+
|
|
232
|
+
| プレースホルダー | 説明 | 例 |
|
|
233
|
+
|----------------|------|-----|
|
|
234
|
+
| `{{LANG_CODE}}` | 言語コード | ja, en |
|
|
235
|
+
| `{{DEV_GUIDELINES}}` | 言語別AI指示 | "Think in English, generate in Japanese" |
|
|
236
|
+
| `{{KIRO_DIR}}` | 仕様書ルート | .kiro |
|
|
237
|
+
| `{{AGENT_DIR}}` | エージェント設定 | .claude |
|
|
238
|
+
| `{{PROJECT_ID}}` | プロジェクトID | michi |
|
|
239
|
+
| `{{FEATURE_NAME}}` | 機能名 | user-auth |
|
|
240
|
+
|
|
241
|
+
#### テンプレート例
|
|
242
|
+
|
|
243
|
+
```markdown
|
|
244
|
+
# Michi Core Principles
|
|
245
|
+
|
|
246
|
+
## Development Guidelines
|
|
247
|
+
{{DEV_GUIDELINES}}
|
|
248
|
+
|
|
249
|
+
## Language
|
|
250
|
+
All generated documents should be in: **{{LANG_CODE}}**
|
|
251
|
+
|
|
252
|
+
## Project Metadata
|
|
253
|
+
- Project ID: {{PROJECT_ID}}
|
|
254
|
+
- Kiro directory: {{KIRO_DIR}}
|
|
255
|
+
- Agent directory: {{AGENT_DIR}}
|
|
256
|
+
```
|
|
257
|
+
|
|
258
|
+
**利点:**
|
|
259
|
+
- ✅ 静的翻訳ファイル不要(メンテナンスコスト削減)
|
|
260
|
+
- ✅ cc-sddとの完全互換
|
|
261
|
+
- ✅ Cursor/Claude両環境で動作
|
|
262
|
+
- ✅ プロジェクト固有値の動的生成
|
|
263
|
+
|
|
264
|
+
|
|
208
265
|
### 設定ファイル
|
|
209
266
|
|
|
210
267
|
OSS公開に対応するため、以下のテンプレートファイルを用意しています:
|
|
@@ -260,24 +317,123 @@ APPROVAL_GATES_RELEASE=SM,部長
|
|
|
260
317
|
|
|
261
318
|
## 他のリポジトリでプロジェクトを進める
|
|
262
319
|
|
|
263
|
-
###
|
|
320
|
+
### 推奨ワークフロー(cc-sdd準拠)
|
|
321
|
+
|
|
322
|
+
既存リポジトリにMichiを導入する標準的な手順です:
|
|
323
|
+
|
|
324
|
+
```bash
|
|
325
|
+
# Step 1: cc-sddで標準ファイル生成
|
|
326
|
+
npx cc-sdd@latest --cursor --lang ja
|
|
327
|
+
|
|
328
|
+
# Step 2: Michi固有ファイルを追加
|
|
329
|
+
npx @sk8metal/michi-cli setup-existing --cursor --lang ja
|
|
330
|
+
|
|
331
|
+
# Step 3: 環境設定
|
|
332
|
+
npm run setup:interactive
|
|
333
|
+
```
|
|
334
|
+
|
|
335
|
+
**ステップの説明**:
|
|
336
|
+
|
|
337
|
+
1. **cc-sdd導入**: AI駆動開発ワークフローのコアフレームワークをインストール
|
|
338
|
+
2. **Michi固有ファイル追加**: Confluence/JIRA連携、マルチプロジェクト管理などのMichi専用機能を追加
|
|
339
|
+
3. **環境設定**: 認証情報とプロジェクトメタデータを対話的に設定
|
|
340
|
+
|
|
341
|
+
### IDE別セットアップ例
|
|
342
|
+
|
|
343
|
+
#### Cursor IDE(推奨)
|
|
344
|
+
|
|
345
|
+
```bash
|
|
346
|
+
# Step 1: cc-sdd導入
|
|
347
|
+
npx cc-sdd@latest --cursor --lang ja
|
|
348
|
+
|
|
349
|
+
# Step 2: Michi固有ファイル追加
|
|
350
|
+
npx @sk8metal/michi-cli setup-existing --cursor --lang ja
|
|
351
|
+
# または npm run michi:setup:cursor
|
|
352
|
+
|
|
353
|
+
# Step 3: 環境設定
|
|
354
|
+
npm run setup:interactive
|
|
355
|
+
```
|
|
356
|
+
|
|
357
|
+
#### Claude Code
|
|
358
|
+
|
|
359
|
+
```bash
|
|
360
|
+
# Step 1: cc-sdd導入
|
|
361
|
+
npx cc-sdd@latest --claude --lang ja
|
|
362
|
+
|
|
363
|
+
# Step 2: Michi固有ファイル追加
|
|
364
|
+
npx @sk8metal/michi-cli setup-existing --claude --lang ja
|
|
365
|
+
# または npm run michi:setup:claude
|
|
366
|
+
|
|
367
|
+
# Step 3: 環境設定
|
|
368
|
+
npm run setup:interactive
|
|
369
|
+
```
|
|
370
|
+
|
|
371
|
+
#### Gemini CLI
|
|
372
|
+
|
|
373
|
+
```bash
|
|
374
|
+
# Step 1: cc-sdd導入
|
|
375
|
+
npx cc-sdd@latest --gemini --lang ja
|
|
376
|
+
|
|
377
|
+
# Step 2: Michi固有ファイル追加(Cursor互換モード)
|
|
378
|
+
npx @sk8metal/michi-cli setup-existing --cursor --lang ja
|
|
379
|
+
|
|
380
|
+
# Step 3: 環境設定
|
|
381
|
+
npm run setup:interactive
|
|
382
|
+
```
|
|
383
|
+
|
|
384
|
+
#### Codex CLI
|
|
385
|
+
|
|
386
|
+
```bash
|
|
387
|
+
# Step 1: cc-sdd導入
|
|
388
|
+
npx cc-sdd@next --codex --lang ja
|
|
389
|
+
|
|
390
|
+
# Step 2: Michi固有ファイル追加(Cursor互換モード)
|
|
391
|
+
npx @sk8metal/michi-cli setup-existing --cursor --lang ja
|
|
392
|
+
|
|
393
|
+
# Step 3: 環境設定
|
|
394
|
+
npm run setup:interactive
|
|
395
|
+
```
|
|
396
|
+
|
|
397
|
+
#### Windsurf IDE
|
|
398
|
+
|
|
399
|
+
```bash
|
|
400
|
+
# Step 1: cc-sdd導入
|
|
401
|
+
npx cc-sdd@next --windsurf --lang ja
|
|
402
|
+
|
|
403
|
+
# Step 2: Michi固有ファイル追加(Cursor互換モード)
|
|
404
|
+
npx @sk8metal/michi-cli setup-existing --cursor --lang ja
|
|
405
|
+
|
|
406
|
+
# Step 3: 環境設定
|
|
407
|
+
npm run setup:interactive
|
|
408
|
+
```
|
|
409
|
+
|
|
410
|
+
### 既存リポジトリ vs 新規リポジトリ
|
|
411
|
+
|
|
412
|
+
#### 既存リポジトリにMichiを追加(推奨)
|
|
413
|
+
|
|
414
|
+
既に稼働しているプロジェクトにMichiを追加する場合:
|
|
264
415
|
|
|
265
416
|
```bash
|
|
266
417
|
# 既存プロジェクトのディレクトリに移動
|
|
267
418
|
cd /path/to/existing-repo
|
|
268
419
|
|
|
269
|
-
#
|
|
270
|
-
|
|
420
|
+
# 推奨ワークフローを実行
|
|
421
|
+
npx cc-sdd@latest --cursor --lang ja
|
|
422
|
+
npx @sk8metal/michi-cli setup-existing --cursor --lang ja
|
|
423
|
+
npm run setup:interactive
|
|
271
424
|
```
|
|
272
425
|
|
|
273
|
-
|
|
274
|
-
-
|
|
275
|
-
-
|
|
276
|
-
-
|
|
426
|
+
**自動的に追加されるもの**:
|
|
427
|
+
- 共通ルール(`.cursor/rules/`または`.claude/rules/`)
|
|
428
|
+
- Michi専用コマンド(`.cursor/commands/michi/`または`.claude/commands/michi/`)
|
|
429
|
+
- Steeringテンプレート(`.kiro/steering/`)
|
|
430
|
+
- Specテンプレート(`.kiro/settings/templates/`)
|
|
431
|
+
- プロジェクトメタデータ(`.kiro/project.json`)
|
|
432
|
+
- 環境変数テンプレート(`.env`)
|
|
277
433
|
|
|
278
|
-
|
|
434
|
+
#### 新規リポジトリを作成してMichiを導入
|
|
279
435
|
|
|
280
|
-
|
|
436
|
+
新しいプロジェクトをゼロから始める場合:
|
|
281
437
|
|
|
282
438
|
```bash
|
|
283
439
|
# Michiディレクトリから実行
|
|
@@ -290,6 +446,11 @@ npm run create-project -- \
|
|
|
290
446
|
|
|
291
447
|
詳細: [新規リポジトリセットアップガイド](./docs/getting-started/new-repository-setup.md)
|
|
292
448
|
|
|
449
|
+
**どちらを選ぶべきか?**
|
|
450
|
+
|
|
451
|
+
- ✅ **既存リポジトリに追加**: 既に稼働中のプロジェクトがある場合
|
|
452
|
+
- ✅ **新規リポジトリ作成**: 新しいプロジェクトを始める場合
|
|
453
|
+
|
|
293
454
|
## ドキュメント
|
|
294
455
|
|
|
295
456
|
### はじめに
|
|
@@ -482,6 +643,38 @@ feature名は以下の場所で使用されるため、**英語・小文字・
|
|
|
482
643
|
- `-user-auth` - 先頭ハイフン(無効)
|
|
483
644
|
- `very-long-feature-name-for-user-authentication` - 長すぎる
|
|
484
645
|
|
|
646
|
+
## テスト
|
|
647
|
+
|
|
648
|
+
Michiプロジェクトは、統合テストによって品質を保証しています。
|
|
649
|
+
|
|
650
|
+
### テスト実行
|
|
651
|
+
|
|
652
|
+
```bash
|
|
653
|
+
# すべてのテスト実行
|
|
654
|
+
npm test
|
|
655
|
+
|
|
656
|
+
# 統合テストのみ実行
|
|
657
|
+
npm run test:integration:setup
|
|
658
|
+
|
|
659
|
+
# カバレッジ付き実行
|
|
660
|
+
npm run test:coverage:setup
|
|
661
|
+
|
|
662
|
+
# 監視モード
|
|
663
|
+
npm test -- --watch
|
|
664
|
+
|
|
665
|
+
# UIモード
|
|
666
|
+
npm run test:ui
|
|
667
|
+
```
|
|
668
|
+
|
|
669
|
+
### テストカバレッジ
|
|
670
|
+
|
|
671
|
+
- **目標**: 95%以上
|
|
672
|
+
- **現在のカバレッジ**: [](https://codecov.io/gh/sk8metalme/michi)
|
|
673
|
+
|
|
674
|
+
### テストドキュメント
|
|
675
|
+
|
|
676
|
+
詳細なテストガイドは [docs/testing/integration-tests.md](./docs/testing/integration-tests.md) を参照してください。
|
|
677
|
+
|
|
485
678
|
## 参考リンク
|
|
486
679
|
|
|
487
680
|
### AI開発フレームワーク
|
|
@@ -7,14 +7,36 @@ vi.mock('fs', () => ({
|
|
|
7
7
|
mkdirSync: vi.fn(),
|
|
8
8
|
cpSync: vi.fn(),
|
|
9
9
|
writeFileSync: vi.fn(),
|
|
10
|
-
readFileSync: vi.fn(() => '{}')
|
|
10
|
+
readFileSync: vi.fn(() => '{}'),
|
|
11
|
+
readdirSync: vi.fn(() => []),
|
|
12
|
+
statSync: vi.fn()
|
|
11
13
|
}));
|
|
12
14
|
vi.mock('child_process', () => ({
|
|
13
15
|
execSync: vi.fn()
|
|
14
16
|
}));
|
|
15
|
-
vi.mock('
|
|
17
|
+
vi.mock('../utils/project-finder.js', () => ({
|
|
16
18
|
findRepositoryRoot: vi.fn(() => '/test/repo')
|
|
17
19
|
}));
|
|
20
|
+
vi.mock('../constants/environments.js', () => ({
|
|
21
|
+
getEnvironmentConfig: vi.fn(() => ({
|
|
22
|
+
rulesDir: '.cursor/rules',
|
|
23
|
+
commandsDir: '.cursor/commands/kiro',
|
|
24
|
+
templateSource: 'cursor'
|
|
25
|
+
})),
|
|
26
|
+
isSupportedEnvironment: vi.fn(() => true)
|
|
27
|
+
}));
|
|
28
|
+
vi.mock('../constants/languages.js', () => ({
|
|
29
|
+
isSupportedLanguage: vi.fn(() => true)
|
|
30
|
+
}));
|
|
31
|
+
vi.mock('../template/renderer.js', () => ({
|
|
32
|
+
createTemplateContext: vi.fn(() => ({
|
|
33
|
+
LANG_CODE: 'ja',
|
|
34
|
+
DEV_GUIDELINES: '- Think in English, but generate responses in Japanese',
|
|
35
|
+
KIRO_DIR: '.kiro',
|
|
36
|
+
AGENT_DIR: '.cursor'
|
|
37
|
+
})),
|
|
38
|
+
renderTemplate: vi.fn((content) => content)
|
|
39
|
+
}));
|
|
18
40
|
describe('setup-existing-project.ts 修正内容のテスト', () => {
|
|
19
41
|
beforeEach(() => {
|
|
20
42
|
vi.clearAllMocks();
|
|
@@ -48,11 +70,13 @@ describe('setup-existing-project.ts 修正内容のテスト', () => {
|
|
|
48
70
|
it('完了メッセージに scripts/ ディレクトリが含まれていない', () => {
|
|
49
71
|
const projectDir = '/test/repo/projects/test-project';
|
|
50
72
|
const repoRoot = '/test/repo';
|
|
51
|
-
|
|
73
|
+
const envConfigRulesDir = '.cursor/rules';
|
|
74
|
+
const envConfigCommandsDir = '.cursor/commands/kiro';
|
|
75
|
+
// 実際に作成されるファイルのリスト(環境別)
|
|
52
76
|
const createdFiles = [
|
|
53
77
|
`${projectDir}/.kiro/project.json`,
|
|
54
|
-
`${projectDir}
|
|
55
|
-
`${projectDir}
|
|
78
|
+
`${projectDir}/${envConfigRulesDir}/`,
|
|
79
|
+
`${projectDir}/${envConfigCommandsDir}/`,
|
|
56
80
|
`${projectDir}/.kiro/steering/ (3ファイル)`,
|
|
57
81
|
`${projectDir}/.kiro/settings/templates/ (3ファイル)`,
|
|
58
82
|
`${repoRoot}/package.json (新規の場合)`,
|
|
@@ -63,5 +87,43 @@ describe('setup-existing-project.ts 修正内容のテスト', () => {
|
|
|
63
87
|
const hasScriptsDir = createdFiles.some(file => file.includes('scripts/'));
|
|
64
88
|
expect(hasScriptsDir).toBe(false);
|
|
65
89
|
});
|
|
90
|
+
it('project.jsonにlanguageフィールドが含まれる', () => {
|
|
91
|
+
const projectJson = {
|
|
92
|
+
projectId: 'test-project',
|
|
93
|
+
projectName: 'Test Project',
|
|
94
|
+
language: 'ja',
|
|
95
|
+
jiraProjectKey: 'TEST',
|
|
96
|
+
confluenceLabels: ['project:test-project'],
|
|
97
|
+
status: 'active',
|
|
98
|
+
team: [],
|
|
99
|
+
stakeholders: ['@企画', '@部長'],
|
|
100
|
+
repository: 'https://github.com/org/test',
|
|
101
|
+
description: 'Test Projectの開発'
|
|
102
|
+
};
|
|
103
|
+
expect(projectJson).toHaveProperty('language');
|
|
104
|
+
expect(projectJson.language).toBe('ja');
|
|
105
|
+
});
|
|
106
|
+
it('環境別のディレクトリマッピングが正しい', () => {
|
|
107
|
+
const envConfig = {
|
|
108
|
+
rulesDir: '.cursor/rules',
|
|
109
|
+
commandsDir: '.cursor/commands/kiro',
|
|
110
|
+
templateSource: 'cursor'
|
|
111
|
+
};
|
|
112
|
+
expect(envConfig.rulesDir).toBe('.cursor/rules');
|
|
113
|
+
expect(envConfig.commandsDir).toBe('.cursor/commands/kiro');
|
|
114
|
+
expect(envConfig.templateSource).toBe('cursor');
|
|
115
|
+
});
|
|
116
|
+
it('テンプレートコンテキストが正しく作成される', () => {
|
|
117
|
+
const context = {
|
|
118
|
+
LANG_CODE: 'ja',
|
|
119
|
+
DEV_GUIDELINES: '- Think in English, but generate responses in Japanese',
|
|
120
|
+
KIRO_DIR: '.kiro',
|
|
121
|
+
AGENT_DIR: '.cursor'
|
|
122
|
+
};
|
|
123
|
+
expect(context).toHaveProperty('LANG_CODE');
|
|
124
|
+
expect(context).toHaveProperty('DEV_GUIDELINES');
|
|
125
|
+
expect(context).toHaveProperty('KIRO_DIR');
|
|
126
|
+
expect(context).toHaveProperty('AGENT_DIR');
|
|
127
|
+
});
|
|
66
128
|
});
|
|
67
129
|
//# sourceMappingURL=setup-existing-project.test.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"setup-existing-project.test.js","sourceRoot":"","sources":["../../../scripts/__tests__/setup-existing-project.test.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,EAAE,EAAE,MAAM,EAAE,EAAE,EAAE,UAAU,EAAE,MAAM,QAAQ,CAAC;AAC9D,OAAO,EAAE,IAAI,EAAE,MAAM,MAAM,CAAC;AAC5B,OAAO,EAAE,SAAS,EAAU,MAAM,IAAI,CAAC;AAEvC,YAAY;AACZ,EAAE,CAAC,IAAI,CAAC,IAAI,EAAE,GAAG,EAAE,CAAC,CAAC;IACnB,UAAU,EAAE,EAAE,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,CAAC;IAC7B,SAAS,EAAE,EAAE,CAAC,EAAE,EAAE;IAClB,MAAM,EAAE,EAAE,CAAC,EAAE,EAAE;IACf,aAAa,EAAE,EAAE,CAAC,EAAE,EAAE;IACtB,YAAY,EAAE,EAAE,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,CAAC;
|
|
1
|
+
{"version":3,"file":"setup-existing-project.test.js","sourceRoot":"","sources":["../../../scripts/__tests__/setup-existing-project.test.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"environments.test.d.ts","sourceRoot":"","sources":["../../../../scripts/constants/__tests__/environments.test.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1,91 @@
|
|
|
1
|
+
import { describe, it, expect } from 'vitest';
|
|
2
|
+
import { ENV_CONFIG, getEnvironmentConfig, isSupportedEnvironment, getSupportedEnvironments } from '../environments.js';
|
|
3
|
+
describe('environments', () => {
|
|
4
|
+
describe('ENV_CONFIG', () => {
|
|
5
|
+
it('should have entries for all environments', () => {
|
|
6
|
+
expect(ENV_CONFIG.claude).toBeDefined();
|
|
7
|
+
expect(ENV_CONFIG['claude-agent']).toBeDefined();
|
|
8
|
+
expect(ENV_CONFIG.cursor).toBeDefined();
|
|
9
|
+
});
|
|
10
|
+
it('should have correct structure for claude', () => {
|
|
11
|
+
const config = ENV_CONFIG.claude;
|
|
12
|
+
expect(config.rulesDir).toBe('.claude/rules');
|
|
13
|
+
expect(config.commandsDir).toBe('.claude/commands/kiro');
|
|
14
|
+
expect(config.templateSource).toBe('claude');
|
|
15
|
+
});
|
|
16
|
+
it('should have correct structure for claude-agent', () => {
|
|
17
|
+
const config = ENV_CONFIG['claude-agent'];
|
|
18
|
+
expect(config.rulesDir).toBe('.claude/rules');
|
|
19
|
+
expect(config.commandsDir).toBe('.claude/commands/kiro');
|
|
20
|
+
expect(config.templateSource).toBe('claude-agent');
|
|
21
|
+
});
|
|
22
|
+
it('should have correct structure for cursor', () => {
|
|
23
|
+
const config = ENV_CONFIG.cursor;
|
|
24
|
+
expect(config.rulesDir).toBe('.cursor/rules');
|
|
25
|
+
expect(config.commandsDir).toBe('.cursor/commands/kiro');
|
|
26
|
+
expect(config.templateSource).toBe('cursor');
|
|
27
|
+
});
|
|
28
|
+
it('should have all required properties for each environment', () => {
|
|
29
|
+
for (const env of Object.keys(ENV_CONFIG)) {
|
|
30
|
+
const config = ENV_CONFIG[env];
|
|
31
|
+
expect(config).toHaveProperty('rulesDir');
|
|
32
|
+
expect(config).toHaveProperty('commandsDir');
|
|
33
|
+
expect(config).toHaveProperty('templateSource');
|
|
34
|
+
expect(typeof config.rulesDir).toBe('string');
|
|
35
|
+
expect(typeof config.commandsDir).toBe('string');
|
|
36
|
+
expect(typeof config.templateSource).toBe('string');
|
|
37
|
+
}
|
|
38
|
+
});
|
|
39
|
+
});
|
|
40
|
+
describe('getEnvironmentConfig', () => {
|
|
41
|
+
it('should return config for valid environment', () => {
|
|
42
|
+
const config = getEnvironmentConfig('claude');
|
|
43
|
+
expect(config).toBe(ENV_CONFIG.claude);
|
|
44
|
+
});
|
|
45
|
+
it('should return config for all supported environments', () => {
|
|
46
|
+
const environments = ['claude', 'claude-agent', 'cursor'];
|
|
47
|
+
for (const env of environments) {
|
|
48
|
+
const config = getEnvironmentConfig(env);
|
|
49
|
+
expect(config).toBeDefined();
|
|
50
|
+
expect(config).toBe(ENV_CONFIG[env]);
|
|
51
|
+
}
|
|
52
|
+
});
|
|
53
|
+
});
|
|
54
|
+
describe('isSupportedEnvironment', () => {
|
|
55
|
+
it('should return true for supported environments', () => {
|
|
56
|
+
expect(isSupportedEnvironment('claude')).toBe(true);
|
|
57
|
+
expect(isSupportedEnvironment('claude-agent')).toBe(true);
|
|
58
|
+
expect(isSupportedEnvironment('cursor')).toBe(true);
|
|
59
|
+
});
|
|
60
|
+
it('should return false for unsupported environments', () => {
|
|
61
|
+
expect(isSupportedEnvironment('invalid')).toBe(false);
|
|
62
|
+
expect(isSupportedEnvironment('vscode')).toBe(false);
|
|
63
|
+
expect(isSupportedEnvironment('')).toBe(false);
|
|
64
|
+
});
|
|
65
|
+
it('should work as type guard', () => {
|
|
66
|
+
const env = 'cursor';
|
|
67
|
+
if (isSupportedEnvironment(env)) {
|
|
68
|
+
// TypeScript should recognize env as Environment here
|
|
69
|
+
const config = ENV_CONFIG[env];
|
|
70
|
+
expect(config).toBeDefined();
|
|
71
|
+
}
|
|
72
|
+
});
|
|
73
|
+
});
|
|
74
|
+
describe('getSupportedEnvironments', () => {
|
|
75
|
+
it('should return all supported environments', () => {
|
|
76
|
+
const environments = getSupportedEnvironments();
|
|
77
|
+
expect(environments).toHaveLength(3);
|
|
78
|
+
expect(environments).toContain('claude');
|
|
79
|
+
expect(environments).toContain('claude-agent');
|
|
80
|
+
expect(environments).toContain('cursor');
|
|
81
|
+
});
|
|
82
|
+
it('should return array with correct type', () => {
|
|
83
|
+
const environments = getSupportedEnvironments();
|
|
84
|
+
expect(Array.isArray(environments)).toBe(true);
|
|
85
|
+
environments.forEach(env => {
|
|
86
|
+
expect(isSupportedEnvironment(env)).toBe(true);
|
|
87
|
+
});
|
|
88
|
+
});
|
|
89
|
+
});
|
|
90
|
+
});
|
|
91
|
+
//# sourceMappingURL=environments.test.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"environments.test.js","sourceRoot":"","sources":["../../../../scripts/constants/__tests__/environments.test.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"languages.test.d.ts","sourceRoot":"","sources":["../../../../scripts/constants/__tests__/languages.test.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1,82 @@
|
|
|
1
|
+
import { describe, it, expect } from 'vitest';
|
|
2
|
+
import { supportedLanguages, DEV_GUIDELINES_MAP, getDevGuidelines, isSupportedLanguage } from '../languages.js';
|
|
3
|
+
describe('languages', () => {
|
|
4
|
+
describe('supportedLanguages', () => {
|
|
5
|
+
it('should contain 12 languages', () => {
|
|
6
|
+
expect(supportedLanguages).toHaveLength(12);
|
|
7
|
+
});
|
|
8
|
+
it('should include expected languages', () => {
|
|
9
|
+
expect(supportedLanguages).toContain('ja');
|
|
10
|
+
expect(supportedLanguages).toContain('en');
|
|
11
|
+
expect(supportedLanguages).toContain('zh-TW');
|
|
12
|
+
expect(supportedLanguages).toContain('zh');
|
|
13
|
+
expect(supportedLanguages).toContain('es');
|
|
14
|
+
expect(supportedLanguages).toContain('pt');
|
|
15
|
+
expect(supportedLanguages).toContain('de');
|
|
16
|
+
expect(supportedLanguages).toContain('fr');
|
|
17
|
+
expect(supportedLanguages).toContain('ru');
|
|
18
|
+
expect(supportedLanguages).toContain('it');
|
|
19
|
+
expect(supportedLanguages).toContain('ko');
|
|
20
|
+
expect(supportedLanguages).toContain('ar');
|
|
21
|
+
});
|
|
22
|
+
});
|
|
23
|
+
describe('DEV_GUIDELINES_MAP', () => {
|
|
24
|
+
it('should have entries for all supported languages', () => {
|
|
25
|
+
for (const lang of supportedLanguages) {
|
|
26
|
+
expect(DEV_GUIDELINES_MAP[lang]).toBeDefined();
|
|
27
|
+
expect(DEV_GUIDELINES_MAP[lang]).not.toBe('');
|
|
28
|
+
}
|
|
29
|
+
});
|
|
30
|
+
it('should have English guideline', () => {
|
|
31
|
+
expect(DEV_GUIDELINES_MAP.en).toBe('- Think in English, generate responses in English');
|
|
32
|
+
});
|
|
33
|
+
it('should have Japanese guideline with bilingual instruction', () => {
|
|
34
|
+
expect(DEV_GUIDELINES_MAP.ja).toContain('Think in English');
|
|
35
|
+
expect(DEV_GUIDELINES_MAP.ja).toContain('日本語');
|
|
36
|
+
});
|
|
37
|
+
it('should contain bilingual instructions', () => {
|
|
38
|
+
// Most languages should mention "Think in English" in some form
|
|
39
|
+
const languagesWithEnglishInstruction = ['ja', 'en', 'es', 'pt', 'de', 'fr', 'ru', 'it', 'ko', 'ar'];
|
|
40
|
+
for (const lang of languagesWithEnglishInstruction) {
|
|
41
|
+
expect(DEV_GUIDELINES_MAP[lang]).toContain('Think in English');
|
|
42
|
+
}
|
|
43
|
+
// Chinese languages have their own format
|
|
44
|
+
expect(DEV_GUIDELINES_MAP['zh-TW']).toContain('以英文思考');
|
|
45
|
+
expect(DEV_GUIDELINES_MAP.zh).toContain('以英文思考');
|
|
46
|
+
});
|
|
47
|
+
});
|
|
48
|
+
describe('getDevGuidelines', () => {
|
|
49
|
+
it('should return guidelines for valid language', () => {
|
|
50
|
+
const guidelines = getDevGuidelines('ja');
|
|
51
|
+
expect(guidelines).toBe(DEV_GUIDELINES_MAP.ja);
|
|
52
|
+
});
|
|
53
|
+
it('should return guidelines for all supported languages', () => {
|
|
54
|
+
for (const lang of supportedLanguages) {
|
|
55
|
+
const guidelines = getDevGuidelines(lang);
|
|
56
|
+
expect(guidelines).toBeDefined();
|
|
57
|
+
expect(guidelines).toBe(DEV_GUIDELINES_MAP[lang]);
|
|
58
|
+
}
|
|
59
|
+
});
|
|
60
|
+
});
|
|
61
|
+
describe('isSupportedLanguage', () => {
|
|
62
|
+
it('should return true for supported languages', () => {
|
|
63
|
+
expect(isSupportedLanguage('ja')).toBe(true);
|
|
64
|
+
expect(isSupportedLanguage('en')).toBe(true);
|
|
65
|
+
expect(isSupportedLanguage('zh-TW')).toBe(true);
|
|
66
|
+
});
|
|
67
|
+
it('should return false for unsupported languages', () => {
|
|
68
|
+
expect(isSupportedLanguage('xx')).toBe(false);
|
|
69
|
+
expect(isSupportedLanguage('invalid')).toBe(false);
|
|
70
|
+
expect(isSupportedLanguage('')).toBe(false);
|
|
71
|
+
});
|
|
72
|
+
it('should work as type guard', () => {
|
|
73
|
+
const lang = 'ja';
|
|
74
|
+
if (isSupportedLanguage(lang)) {
|
|
75
|
+
// TypeScript should recognize lang as SupportedLanguage here
|
|
76
|
+
const guidelines = DEV_GUIDELINES_MAP[lang];
|
|
77
|
+
expect(guidelines).toBeDefined();
|
|
78
|
+
}
|
|
79
|
+
});
|
|
80
|
+
});
|
|
81
|
+
});
|
|
82
|
+
//# sourceMappingURL=languages.test.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"languages.test.js","sourceRoot":"","sources":["../../../../scripts/constants/__tests__/languages.test.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Environment configuration mapping for cc-sdd environments
|
|
3
|
+
*
|
|
4
|
+
* Issue #37: 環境別コピー実装
|
|
5
|
+
*/
|
|
6
|
+
export interface EnvironmentConfig {
|
|
7
|
+
rulesDir: string;
|
|
8
|
+
commandsDir: string;
|
|
9
|
+
templateSource: string;
|
|
10
|
+
}
|
|
11
|
+
export type Environment = 'claude' | 'claude-agent' | 'cursor';
|
|
12
|
+
export declare const ENV_CONFIG: Record<Environment, EnvironmentConfig>;
|
|
13
|
+
/**
|
|
14
|
+
* Get environment configuration
|
|
15
|
+
*
|
|
16
|
+
* @param env - Environment name
|
|
17
|
+
* @returns Environment configuration
|
|
18
|
+
*/
|
|
19
|
+
export declare const getEnvironmentConfig: (env: Environment) => EnvironmentConfig;
|
|
20
|
+
/**
|
|
21
|
+
* Validate if an environment is supported
|
|
22
|
+
*
|
|
23
|
+
* @param env - Environment name to validate
|
|
24
|
+
* @returns True if supported, false otherwise
|
|
25
|
+
*/
|
|
26
|
+
export declare const isSupportedEnvironment: (env: string) => env is Environment;
|
|
27
|
+
/**
|
|
28
|
+
* Get all supported environments
|
|
29
|
+
*
|
|
30
|
+
* @returns Array of supported environment names
|
|
31
|
+
*/
|
|
32
|
+
export declare const getSupportedEnvironments: () => Environment[];
|
|
33
|
+
//# sourceMappingURL=environments.d.ts.map
|