@sk8metal/michi-cli 0.0.3 → 0.0.5

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.
Files changed (72) hide show
  1. package/CHANGELOG.md +38 -0
  2. package/README.md +25 -25
  3. package/dist/scripts/config/config-schema.d.ts +109 -600
  4. package/dist/scripts/config/config-schema.d.ts.map +1 -1
  5. package/dist/scripts/config/config-schema.js.map +1 -1
  6. package/dist/scripts/config-interactive.d.ts +1 -1
  7. package/dist/scripts/config-interactive.d.ts.map +1 -1
  8. package/dist/scripts/config-interactive.js +7 -7
  9. package/dist/scripts/config-interactive.js.map +1 -1
  10. package/dist/scripts/confluence-sync.js +5 -5
  11. package/dist/scripts/confluence-sync.js.map +1 -1
  12. package/dist/scripts/create-project.d.ts +2 -2
  13. package/dist/scripts/create-project.js +2 -2
  14. package/dist/scripts/create-project.js.map +1 -1
  15. package/dist/scripts/jira-sync.js +8 -8
  16. package/dist/scripts/jira-sync.js.map +1 -1
  17. package/dist/scripts/markdown-to-confluence.js +1 -1
  18. package/dist/scripts/markdown-to-confluence.js.map +1 -1
  19. package/dist/scripts/multi-project-estimate.js +1 -1
  20. package/dist/scripts/phase-runner.js.map +1 -1
  21. package/dist/scripts/pre-flight-check.js +1 -1
  22. package/dist/scripts/setup-existing-project.js.map +1 -1
  23. package/dist/scripts/utils/__tests__/config-loader.test.d.ts +5 -0
  24. package/dist/scripts/utils/__tests__/config-loader.test.d.ts.map +1 -0
  25. package/dist/scripts/utils/__tests__/config-loader.test.js +201 -0
  26. package/dist/scripts/utils/__tests__/config-loader.test.js.map +1 -0
  27. package/dist/scripts/utils/__tests__/config-validator.test.js +29 -16
  28. package/dist/scripts/utils/__tests__/config-validator.test.js.map +1 -1
  29. package/dist/scripts/utils/config-loader.d.ts +4 -0
  30. package/dist/scripts/utils/config-loader.d.ts.map +1 -1
  31. package/dist/scripts/utils/config-loader.js +24 -2
  32. package/dist/scripts/utils/config-loader.js.map +1 -1
  33. package/dist/scripts/utils/config-validator.d.ts.map +1 -1
  34. package/dist/scripts/utils/config-validator.js +50 -51
  35. package/dist/scripts/utils/config-validator.js.map +1 -1
  36. package/dist/scripts/utils/confluence-hierarchy.js +7 -7
  37. package/dist/scripts/utils/confluence-hierarchy.js.map +1 -1
  38. package/dist/scripts/validate-phase.js.map +1 -1
  39. package/dist/scripts/workflow-orchestrator.js.map +1 -1
  40. package/dist/src/cli.js +2 -2
  41. package/dist/src/cli.js.map +1 -1
  42. package/dist/vitest.config.d.ts.map +1 -1
  43. package/dist/vitest.config.js +8 -4
  44. package/dist/vitest.config.js.map +1 -1
  45. package/docs/config-reference.md +76 -197
  46. package/docs/customization-guide.md +61 -9
  47. package/docs/multi-project.md +157 -25
  48. package/docs/new-project-setup.md +36 -36
  49. package/docs/quick-reference.md +23 -20
  50. package/docs/release.md +365 -0
  51. package/docs/setup.md +5 -3
  52. package/env.example +3 -1
  53. package/package.json +15 -13
  54. package/scripts/config/config-schema.ts +5 -5
  55. package/scripts/config-interactive.ts +7 -6
  56. package/scripts/confluence-sync.ts +5 -5
  57. package/scripts/create-project.ts +21 -21
  58. package/scripts/jira-sync.ts +8 -8
  59. package/scripts/markdown-to-confluence.ts +1 -1
  60. package/scripts/multi-project-estimate.ts +1 -1
  61. package/scripts/phase-runner.ts +8 -8
  62. package/scripts/pre-flight-check.ts +1 -1
  63. package/scripts/setup-existing-project.ts +9 -9
  64. package/scripts/setup-existing.sh +1 -1
  65. package/scripts/utils/__tests__/config-loader.test.ts +254 -0
  66. package/scripts/utils/__tests__/config-validator.test.ts +32 -16
  67. package/scripts/utils/config-loader.ts +30 -2
  68. package/scripts/utils/config-validator.ts +51 -50
  69. package/scripts/utils/confluence-hierarchy.ts +51 -51
  70. package/scripts/validate-phase.ts +11 -11
  71. package/scripts/workflow-orchestrator.ts +27 -27
  72. package/docs/testing.md +0 -202
@@ -0,0 +1,365 @@
1
+ # リリース手順
2
+
3
+ このドキュメントでは、Michiプロジェクトのリリース手順を説明します。
4
+
5
+ ## 概要
6
+
7
+ Michiプロジェクトでは、GitHub Actionsを使用して自動リリースを行います。`v*`形式のGitタグを作成すると、自動的に以下が実行されます:
8
+
9
+ 1. テスト実行(`npm run test:run`)
10
+ 2. リント実行(`npm run lint`)
11
+ 3. 型チェック(`npm run type-check`)
12
+ 4. ビルド(`npm run build`)
13
+ 5. NPMパッケージ公開(`npm publish`)
14
+ 6. GitHub Release作成
15
+
16
+ 詳細は [`.github/workflows/release.yml`](../.github/workflows/release.yml) を参照してください。
17
+
18
+ ## リリース前のチェックリスト
19
+
20
+ リリースを実行する前に、以下を確認してください:
21
+
22
+ - [ ] すべてのテストが通過している(`npm run test:run`)
23
+ - [ ] リントエラーがない(`npm run lint`)
24
+ - [ ] 型チェックが成功している(`npm run type-check`)
25
+ - [ ] ビルドが成功する(`npm run build`)
26
+ - [ ] `package.json`のバージョン番号が正しい
27
+ - [ ] `CHANGELOG.md`が最新の状態である
28
+ - [ ] 未コミットの変更がない(`jj status`または`git status`で確認)
29
+ - [ ] NPM_TOKENがGitHub Secretsに設定されている(初回リリース時のみ確認)
30
+
31
+ ### NPM_TOKENの設定
32
+
33
+ 初回リリース時、またはNPM_TOKENが未設定の場合は、以下の手順で設定してください:
34
+
35
+ 1. NPMアカウントでAutomation Tokenを生成
36
+ - https://www.npmjs.com/settings/[your-username]/tokens にアクセス
37
+ - "Generate New Token" > "Automation" を選択
38
+ - トークンをコピー(一度しか表示されません)
39
+
40
+ 2. GitHub Secretsに追加
41
+ - リポジトリの Settings > Secrets and variables > Actions
42
+ - "New repository secret" をクリック
43
+ - Name: `NPM_TOKEN`
44
+ - Secret: コピーしたトークンを貼り付け
45
+ - "Add secret" をクリック
46
+
47
+ 詳細は [NPM_TOKEN設定ガイド](./tmp/npm-token-setup.md) を参照してください。
48
+
49
+ ## リリースワークフロー
50
+
51
+ リリースは**プルリク経由**で行います。
52
+
53
+ **メリット**:
54
+ - 変更内容をレビューできる
55
+ - CI/CDで自動チェックが実行される
56
+ - チーム内で変更を共有できる
57
+ - リリースとバージョン更新が独立している
58
+
59
+ **ワークフロー**:
60
+ 1. バージョン更新(package.json、CHANGELOG.md)
61
+ 2. プルリク作成
62
+ 3. レビュー・マージ
63
+ 4. タグ作成(GitHub UIまたはコマンドライン)
64
+ 5. 自動リリース実行
65
+
66
+ ## バージョン更新手順
67
+
68
+ ### Step 1: package.jsonのバージョン更新
69
+
70
+ `package.json`の`version`フィールドを更新します:
71
+
72
+ ```json
73
+ {
74
+ "name": "@sk8metal/michi-cli",
75
+ "version": "0.0.4", // 例: 0.0.3 → 0.0.4
76
+ ...
77
+ }
78
+ ```
79
+
80
+ **セマンティックバージョニング**に従ってバージョンを決定してください:
81
+ - **MAJOR** (x.0.0): 破壊的変更
82
+ - **MINOR** (0.x.0): 新機能追加(後方互換性あり)
83
+ - **PATCH** (0.0.x): バグ修正、ドキュメント更新
84
+
85
+ ### Step 2: CHANGELOG.mdの更新
86
+
87
+ `CHANGELOG.md`に新しいバージョンのエントリを追加します。
88
+
89
+ **形式**: [Keep a Changelog](https://keepachangelog.com/en/1.0.0/) に準拠
90
+
91
+ **例**:
92
+ ```markdown
93
+ ## [0.0.4] - 2025-11-13
94
+
95
+ ### Added
96
+ - 新機能の説明
97
+
98
+ ### Changed
99
+ - 変更内容の説明
100
+
101
+ ### Fixed
102
+ - バグ修正の説明
103
+
104
+ ### Dependencies
105
+ - Updated `package-name` from `^old-version` to `^new-version`
106
+ ```
107
+
108
+ **日付形式**: `YYYY-MM-DD`(ISO 8601形式)
109
+
110
+ ### Step 3: プルリクの作成
111
+
112
+ 変更をコミットしてプルリクを作成します:
113
+
114
+ ```bash
115
+ # 作業ディレクトリに移動
116
+ cd /Users/arigatatsuya/Work/git/michi
117
+
118
+ # 未コミット変更を確認
119
+ jj status
120
+ # または
121
+ git status
122
+
123
+ # 新しいブランチで作業開始(Jujutsuの場合)
124
+ jj new main
125
+ # または(Gitの場合)
126
+ git checkout -b release/v0.0.4
127
+
128
+ # 変更をコミット
129
+ jj commit -m "chore: bump version to 0.0.4"
130
+ # または
131
+ git add package.json CHANGELOG.md
132
+ git commit -m "chore: bump version to 0.0.4"
133
+
134
+ # ブックマーク作成(Jujutsuの場合)
135
+ jj bookmark create release/v0.0.4 -r '@-'
136
+
137
+ # プッシュ
138
+ jj git push --bookmark release/v0.0.4 --allow-new
139
+ # または
140
+ git push origin release/v0.0.4
141
+
142
+ # プルリク作成(GitHub CLIを使用)
143
+ gh pr create --head release/v0.0.4 --base main \
144
+ --title "chore: bump version to 0.0.4" \
145
+ --body "バージョンを0.0.3から0.0.4に更新します。
146
+
147
+ ## 変更内容
148
+ - package.jsonのバージョン更新
149
+ - CHANGELOG.mdに0.0.4のエントリを追加
150
+
151
+ ## リリース手順
152
+ このPRがマージされた後、GitHub UIまたはコマンドラインからタグを作成してリリースを実行してください。"
153
+ ```
154
+
155
+ ### Step 4: プルリクのレビュー・マージ
156
+
157
+ 1. CI/CDが成功することを確認
158
+ 2. 必要に応じてレビューを依頼
159
+ 3. マージを実行
160
+
161
+ **重要**: プルリクがマージされた後、mainブランチに変更が反映されてからタグを作成してください。
162
+
163
+ ## Gitタグの作成とプッシュ
164
+
165
+ プルリクがマージされた後、タグを作成してリリースを実行します。
166
+
167
+ ### 方法A: GitHub UIからタグを作成(推奨)
168
+
169
+ **手順**:
170
+
171
+ 1. **GitHubリポジトリのReleasesページにアクセス**
172
+ - リポジトリページで "Releases" をクリック
173
+ - または直接: `https://github.com/sk8metalme/michi/releases`
174
+
175
+ 2. **"Draft a new release" をクリック**
176
+ - または "Create a new release" をクリック
177
+
178
+ 3. **タグとリリース情報を入力**
179
+ - **Tag version**: `v0.0.4`(例)
180
+ - **Target**: `main`(デフォルト)
181
+ - **Release title**: `Release v0.0.4`(自動生成される)
182
+ - **Description**: CHANGELOG.mdの内容をコピー&ペースト
183
+
184
+ 4. **"Publish release" をクリック**
185
+ - これにより、タグが作成され、GitHub Actionsが自動的にリリース処理を開始します
186
+
187
+ **メリット**:
188
+ - リリースノートを同時に作成できる
189
+ - タグとリリースが1つの操作で完了
190
+ - 視覚的に確認しやすい
191
+
192
+ ### 方法B: コマンドラインからタグを作成
193
+
194
+ #### Jujutsu (jj) を使用する場合
195
+
196
+ ```bash
197
+ # 作業ディレクトリに移動
198
+ cd /Users/arigatatsuya/Work/git/michi
199
+
200
+ # リモートの最新状態を取得
201
+ jj git fetch
202
+
203
+ # mainブランチを最新に更新
204
+ jj bookmark set main -r 'main@origin'
205
+
206
+ # 最新のmainから作業開始
207
+ jj new main
208
+
209
+ # Gitタグを作成(jj経由でGitコマンドを実行)
210
+ git tag v0.0.4
211
+
212
+ # タグをプッシュ
213
+ git push origin v0.0.4
214
+ ```
215
+
216
+ **注意**: JujutsuはChange IDベースで管理するため、タグはGitコマンドで直接作成します。
217
+
218
+ #### Gitを使用する場合
219
+
220
+ ```bash
221
+ # 作業ディレクトリに移動
222
+ cd /Users/arigatatsuya/Work/git/michi
223
+
224
+ # mainブランチに切り替え
225
+ git checkout main
226
+
227
+ # 最新の状態を取得
228
+ git pull origin main
229
+
230
+ # タグを作成
231
+ git tag v0.0.4
232
+
233
+ # タグをプッシュ
234
+ git push origin v0.0.4
235
+ ```
236
+
237
+ **タグ名の形式**: `v` + バージョン番号(例: `v0.0.4`)
238
+
239
+ GitHub Actionsのリリースワークフローは`v*`形式のタグでトリガーされます。
240
+
241
+ ## 自動リリースの確認
242
+
243
+ タグをプッシュすると、GitHub Actionsが自動的にリリース処理を開始します。
244
+
245
+ ### 1. GitHub Actionsの実行状況を確認
246
+
247
+ 1. GitHubリポジトリのページにアクセス
248
+ 2. "Actions" タブをクリック
249
+ 3. "Release" ワークフローを確認
250
+ 4. 実行状況を監視
251
+
252
+ **URL例**: `https://github.com/sk8metalme/michi/actions/workflows/release.yml`
253
+
254
+ ### 2. 各ステップの確認
255
+
256
+ リリースワークフローは以下の順序で実行されます:
257
+
258
+ 1. ✅ **Checkout code** - コードのチェックアウト
259
+ 2. ✅ **Setup Node.js** - Node.js環境のセットアップ
260
+ 3. ✅ **Install dependencies** - 依存関係のインストール
261
+ 4. ✅ **Run tests** - テスト実行
262
+ 5. ✅ **Run lint** - リント実行
263
+ 6. ✅ **Run type check** - 型チェック
264
+ 7. ✅ **Build** - ビルド実行
265
+ 8. ✅ **Publish to NPM** - NPMパッケージ公開
266
+ 9. ✅ **Create GitHub Release** - GitHub Release作成
267
+
268
+ すべてのステップが成功することを確認してください。
269
+
270
+ ### 3. NPM公開の確認
271
+
272
+ NPMパッケージが正常に公開されたか確認します:
273
+
274
+ ```bash
275
+ # NPMパッケージの情報を確認
276
+ npm view @sk8metal/michi-cli version
277
+
278
+ # 最新バージョンが表示されることを確認
279
+ # 例: 0.0.4
280
+ ```
281
+
282
+ **NPMパッケージページ**: https://www.npmjs.com/package/@sk8metal/michi-cli
283
+
284
+ ### 4. GitHub Releaseの確認
285
+
286
+ GitHub Releaseが正常に作成されたか確認します:
287
+
288
+ 1. GitHubリポジトリの "Releases" ページにアクセス
289
+ 2. 最新のリリースが表示されることを確認
290
+ 3. リリースノートが正しく表示されることを確認
291
+
292
+ **URL例**: `https://github.com/sk8metalme/michi/releases`
293
+
294
+ ## トラブルシューティング
295
+
296
+ ### エラー1: NPM公開が失敗する
297
+
298
+ **症状**: "Publish to NPM" ステップでエラーが発生
299
+
300
+ **原因**:
301
+ - NPM_TOKENが未設定または無効
302
+ - パッケージ名が既に使用されている(通常は発生しない)
303
+ - バージョン番号が既に存在する
304
+
305
+ **対処法**:
306
+ 1. GitHub SecretsでNPM_TOKENが正しく設定されているか確認
307
+ 2. NPM_TOKENが有効期限内か確認(Automation Tokenは無期限)
308
+ 3. バージョン番号が既に存在しないか確認(`npm view @sk8metal/michi-cli versions`)
309
+
310
+ ### エラー2: テストが失敗する
311
+
312
+ **症状**: "Run tests" ステップでエラーが発生
313
+
314
+ **対処法**:
315
+ 1. ローカルでテストを実行して確認(`npm run test:run`)
316
+ 2. テストコードを修正
317
+ 3. 再度コミット・プッシュしてタグを作成
318
+
319
+ ### エラー3: ビルドが失敗する
320
+
321
+ **症状**: "Build" ステップでエラーが発生
322
+
323
+ **対処法**:
324
+ 1. ローカルでビルドを実行して確認(`npm run build`)
325
+ 2. TypeScriptのコンパイルエラーを修正
326
+ 3. 再度コミット・プッシュしてタグを作成
327
+
328
+ ### エラー4: タグが既に存在する
329
+
330
+ **症状**: `git tag v0.0.4` で "tag already exists" エラー
331
+
332
+ **対処法**:
333
+ 1. 既存のタグを削除(ローカル): `git tag -d v0.0.4`
334
+ 2. 既存のタグを削除(リモート): `git push origin --delete v0.0.4`
335
+ 3. 新しいタグを作成: `git tag v0.0.4`
336
+ 4. タグをプッシュ: `git push origin v0.0.4`
337
+
338
+ **注意**: 既にリリース済みのタグを削除する場合は、慎重に判断してください。
339
+
340
+ ### エラー5: GitHub Actionsが実行されない
341
+
342
+ **症状**: タグをプッシュしたが、GitHub Actionsが実行されない
343
+
344
+ **対処法**:
345
+ 1. タグ名が`v*`形式か確認(例: `v0.0.4`)
346
+ 2. GitHub Actionsが有効になっているか確認(Settings > Actions > General)
347
+ 3. ワークフローファイル(`.github/workflows/release.yml`)が正しいか確認
348
+
349
+ ## リリース後の確認事項
350
+
351
+ リリースが正常に完了したら、以下を確認してください:
352
+
353
+ - [ ] NPMパッケージが最新バージョンで公開されている
354
+ - [ ] GitHub Releaseが作成されている
355
+ - [ ] リリースノートが正しく表示されている
356
+ - [ ] パッケージが正常にインストールできる(`npm install -g @sk8metal/michi-cli`)
357
+
358
+ ## 参考リンク
359
+
360
+ - [GitHub Actions公式ドキュメント](https://docs.github.com/ja/actions)
361
+ - [NPM公開ガイド](https://docs.npmjs.com/packages-and-modules/contributing-packages-to-the-registry)
362
+ - [セマンティックバージョニング](https://semver.org/)
363
+ - [Keep a Changelog](https://keepachangelog.com/)
364
+ - [CI/CD整備計画](./tmp/cicd-plan.md)
365
+
package/docs/setup.md CHANGED
@@ -240,11 +240,13 @@ cp mcp.json.example ~/.cursor/mcp.json
240
240
 
241
241
  ## 6-2. プロジェクト固有設定ファイル(オプション)
242
242
 
243
- `.kiro/config.json` を作成することで、Confluence/JIRAの動作をカスタマイズできます。
243
+ `.michi/config.json` を作成することで、Confluence/JIRAの動作をカスタマイズできます。
244
244
 
245
245
  ### 設定ファイルの作成
246
246
 
247
- プロジェクトルートに `.kiro/config.json` を作成:
247
+ プロジェクトルートに `.michi/config.json` を作成:
248
+
249
+ **注意**: 以前は `.kiro/config.json` を使用していましたが、Michi専用の設定ファイルとして `.michi/config.json` に変更されました。
248
250
 
249
251
  ```json
250
252
  {
@@ -289,7 +291,7 @@ cp mcp.json.example ~/.cursor/mcp.json
289
291
  設定値は以下の優先順位で決定されます:
290
292
 
291
293
  1. **`spec.json`**: 機能固有の設定(最優先)
292
- 2. **`.kiro/config.json`**: プロジェクト固有の設定
294
+ 2. **`.michi/config.json`**: プロジェクト固有の設定
293
295
  3. **環境変数**: システム環境変数または`.env`ファイル
294
296
  4. **デフォルト値**: スキーマで定義されたデフォルト値
295
297
 
package/env.example CHANGED
@@ -19,6 +19,8 @@ JIRA_PROJECT_KEYS=PROJECT
19
19
  # JIRA Issue Type IDs(JIRAインスタンス固有の値 - 必須)
20
20
  # JIRA管理画面(Settings > Issues > Issue types)またはREST APIで確認してください
21
21
  # REST API: GET /rest/api/3/issuetype で取得可能
22
+ # 注意: 以下の値(10036, 10037)は例です。実際のJIRAインスタンスのIssue Type IDに置き換えてください
23
+ # 一般的にJIRAのIssue Type IDは5桁の数値(例: 10036, 10037)です
22
24
  JIRA_ISSUE_TYPE_STORY=10036
23
25
  JIRA_ISSUE_TYPE_SUBTASK=10037
24
26
 
@@ -27,7 +29,7 @@ ATLASSIAN_REQUEST_DELAY=500
27
29
 
28
30
  # Story Pointsカスタムフィールド(JIRAプロジェクト固有)
29
31
  # 環境変数 JIRA_STORY_POINTS_FIELD で設定可能(例: customfield_10016)
30
- JIRA_STORY_POINTS_FIELD=customfield_10016
32
+ JIRA_STORY_POINTS_FIELD=customfield_100
31
33
 
32
34
  # Epic Linkカスタムフィールド(JIRAプロジェクト固有)
33
35
  # 環境変数 JIRA_EPIC_LINK_FIELD で設定可能(例: customfield_10014)
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@sk8metal/michi-cli",
3
- "version": "0.0.3",
3
+ "version": "0.0.5",
4
4
  "description": "Managed Intelligent Comprehensive Hub for Integration - AI-driven development workflow automation",
5
5
  "license": "MIT",
6
6
  "type": "module",
@@ -9,7 +9,7 @@
9
9
  },
10
10
  "repository": {
11
11
  "type": "git",
12
- "url": "https://github.com/sk8metalme/michi.git"
12
+ "url": "git+https://github.com/sk8metalme/michi.git"
13
13
  },
14
14
  "homepage": "https://github.com/sk8metalme/michi#readme",
15
15
  "bugs": {
@@ -29,7 +29,7 @@
29
29
  "github"
30
30
  ],
31
31
  "bin": {
32
- "michi": "./dist/src/cli.js"
32
+ "michi": "dist/src/cli.js"
33
33
  },
34
34
  "files": [
35
35
  "dist",
@@ -70,29 +70,31 @@
70
70
  "type-check": "tsc --noEmit"
71
71
  },
72
72
  "dependencies": {
73
- "@octokit/rest": "^20.0.2",
73
+ "@octokit/rest": "^22.0.1",
74
74
  "axios": "^1.13.1",
75
75
  "commander": "^14.0.2",
76
76
  "dotenv": "^16.3.1",
77
77
  "exceljs": "^4.4.0",
78
- "googleapis": "^126.0.1",
78
+ "googleapis": "^166.0.0",
79
79
  "jira-client": "^8.2.2",
80
80
  "markdown-it": "^14.0.0",
81
81
  "turndown": "^7.1.2",
82
- "zod": "^3.22.4"
82
+ "zod": "^4.1.12"
83
83
  },
84
84
  "devDependencies": {
85
- "@types/markdown-it": "^13.0.7",
86
- "@types/node": "^20.10.6",
85
+ "@eslint/js": "^9.39.1",
86
+ "@types/markdown-it": "^14.1.2",
87
+ "@types/node": "^24.10.1",
87
88
  "@types/turndown": "^5.0.4",
88
- "@typescript-eslint/eslint-plugin": "^6.17.0",
89
- "@typescript-eslint/parser": "^6.17.0",
90
- "eslint": "^8.56.0",
89
+ "@typescript-eslint/eslint-plugin": "^8.46.4",
90
+ "@typescript-eslint/parser": "^8.46.4",
91
+ "eslint": "^9.39.1",
91
92
  "prettier": "^3.1.1",
92
93
  "tsx": "^4.7.0",
93
94
  "typescript": "^5.3.3",
94
- "vitest": "^1.1.1",
95
- "@vitest/coverage-v8": "^1.1.1"
95
+ "typescript-eslint": "^8.46.4",
96
+ "vitest": "^4.0.8",
97
+ "@vitest/coverage-v8": "^4.0.8"
96
98
  },
97
99
  "engines": {
98
100
  "node": ">=20.0.0",
@@ -86,11 +86,11 @@ export const JiraConfigSchema = z.object({
86
86
  createEpic: z.boolean().default(true),
87
87
  storyPoints: JiraStoryPointsSchema.default('auto'),
88
88
  autoLabels: z.array(z.string()).default(['{projectLabel}', '{featureName}', '{phaseLabel}']),
89
- issueTypes: z.object({
90
- epic: z.string().default('Epic'),
91
- story: z.string().nullish().default(null), // null | undefined | string
92
- subtask: z.string().nullish().default(null) // null | undefined | string
93
- }).optional(),
89
+ issueTypes: z.object({
90
+ epic: z.string().default('Epic'),
91
+ story: z.string().nullish().default(null), // null | undefined | string
92
+ subtask: z.string().nullish().default(null) // null | undefined | string
93
+ }).optional(),
94
94
  selectedPhases: z.array(z.string()).optional()
95
95
  });
96
96
 
@@ -1,6 +1,6 @@
1
1
  /**
2
2
  * 対話式設定ツール
3
- * .kiro/config.json を対話的に作成・更新
3
+ * .michi/config.json を対話的に作成・更新
4
4
  */
5
5
 
6
6
  import { readFileSync, writeFileSync, existsSync } from 'fs';
@@ -102,7 +102,7 @@ async function multiSelect(
102
102
  console.log(` ${checked} ${index + 1}. ${choice.label}`);
103
103
  });
104
104
 
105
- const answer = await question(rl, `\n選択してください(カンマ区切り、例: 1,2,3): `);
105
+ const answer = await question(rl, '\n選択してください(カンマ区切り、例: 1,2,3): ');
106
106
 
107
107
  if (!answer && defaults.length > 0) {
108
108
  return defaults;
@@ -204,13 +204,13 @@ async function getConfluenceConfig(rl: readline.Interface, projectMeta: any): Pr
204
204
 
205
205
  const parentTitle = await question(
206
206
  rl,
207
- `親ページのタイトル形式を入力してください(例: [{projectName}] {featureName}): `
207
+ '親ページのタイトル形式を入力してください(例: [{projectName}] {featureName}): '
208
208
  );
209
209
 
210
210
  if (parentTitle) {
211
211
  config.hierarchy.parentPageTitle = parentTitle;
212
212
  } else {
213
- config.hierarchy.parentPageTitle = `[{projectName}] {featureName}`;
213
+ config.hierarchy.parentPageTitle = '[{projectName}] {featureName}';
214
214
  }
215
215
 
216
216
  if (granularity === 'manual') {
@@ -373,7 +373,7 @@ async function main(): Promise<void> {
373
373
  try {
374
374
  console.log('🎨 Michi カスタマイズ設定ツール');
375
375
  console.log('='.repeat(60));
376
- console.log('このツールで .kiro/config.json を作成・更新できます。\n');
376
+ console.log('このツールで .michi/config.json を作成・更新できます。\n');
377
377
 
378
378
  // プロジェクトメタデータを読み込み
379
379
  let projectMeta;
@@ -387,7 +387,8 @@ async function main(): Promise<void> {
387
387
  }
388
388
 
389
389
  // 既存の設定ファイルを確認
390
- const configPath = resolve(process.cwd(), '.kiro/config.json');
390
+ const { getConfigPath } = await import('./utils/config-loader.js');
391
+ const configPath = getConfigPath();
391
392
  let existingConfig: any = null;
392
393
 
393
394
  if (existsSync(configPath)) {
@@ -10,7 +10,7 @@ import { config } from 'dotenv';
10
10
  import { loadProjectMeta, type ProjectMetadata } from './utils/project-meta.js';
11
11
  import { convertMarkdownToConfluence, createConfluencePage } from './markdown-to-confluence.js';
12
12
  import { validateFeatureNameOrThrow } from './utils/feature-name-validator.js';
13
- import { getConfig } from './utils/config-loader.js';
13
+ import { getConfig, getConfigPath } from './utils/config-loader.js';
14
14
  import { createPagesByGranularity } from './utils/confluence-hierarchy.js';
15
15
  import { validateForConfluenceSync } from './utils/config-validator.js';
16
16
 
@@ -107,7 +107,7 @@ class ConfluenceClient {
107
107
  }
108
108
 
109
109
  // CQLクエリで見つからない場合、従来の方法で検索(親ページIDでフィルタリング)
110
- console.log(` Falling back to standard search (may find pages in different parent)`);
110
+ console.log(' Falling back to standard search (may find pages in different parent)');
111
111
  return null;
112
112
  }
113
113
 
@@ -361,7 +361,7 @@ async function syncToConfluence(
361
361
  if (validation.errors.length > 0) {
362
362
  console.error('❌ Configuration errors:');
363
363
  validation.errors.forEach(error => console.error(` ${error}`));
364
- const configPath = resolve('.kiro/config.json');
364
+ const configPath = getConfigPath();
365
365
  console.error(`\n設定ファイル: ${configPath}`);
366
366
  throw new Error('Confluence同期に必要な設定値が不足しています。上記のエラーを確認して設定を修正してください。');
367
367
  }
@@ -388,7 +388,7 @@ async function syncToConfluence(
388
388
  } else if (process.env.CONFLUENCE_PRD_SPACE) {
389
389
  console.log(`📝 Config source: environment variable (CONFLUENCE_PRD_SPACE = ${process.env.CONFLUENCE_PRD_SPACE})`);
390
390
  } else {
391
- console.log(`📝 Config source: default config`);
391
+ console.log('📝 Config source: default config');
392
392
  }
393
393
 
394
394
  // Markdownファイル読み込み
@@ -446,7 +446,7 @@ async function syncToConfluence(
446
446
  console.log(`✅ Sync completed: ${result.pages.length} page(s) created/updated`);
447
447
 
448
448
  if (result.pages.length > 1) {
449
- console.log(`📄 Created pages:`);
449
+ console.log('📄 Created pages:');
450
450
  result.pages.forEach((page, index) => {
451
451
  console.log(` ${index + 1}. ${page.title} - ${page.url}`);
452
452
  });
@@ -4,8 +4,8 @@
4
4
  *
5
5
  * 使い方:
6
6
  * npm run create-project -- \
7
- * --name "customer-a-service-1" \
8
- * --project-name "A社 サービス1" \
7
+ * --name "20240115-payment-api" \
8
+ * --project-name "プロジェクトA" \
9
9
  * --jira-key "PRJA"
10
10
  */
11
11
 
@@ -22,8 +22,8 @@ const __dirname = dirname(__filename);
22
22
  loadDotenv();
23
23
 
24
24
  interface ProjectConfig {
25
- name: string; // リポジトリ名: customer-a-service-1
26
- projectName: string; // 表示名: A社 サービス1
25
+ name: string; // リポジトリ名: 20240115-payment-api
26
+ projectName: string; // 表示名: プロジェクトA
27
27
  jiraKey: string; // JIRAキー: PRJA
28
28
  org?: string; // GitHub組織名(デフォルト: .envから)
29
29
  labels?: string[]; // Confluenceラベル(デフォルト: 自動生成)
@@ -38,22 +38,22 @@ function parseArgs(): ProjectConfig {
38
38
  const value = args[i + 1];
39
39
 
40
40
  switch (key) {
41
- case 'name':
42
- config.name = value;
43
- break;
44
- case 'project-name':
45
- config.projectName = value;
46
- break;
47
- case 'jira-key':
48
- config.jiraKey = value;
49
- break;
50
- case 'org':
51
- config.org = value;
52
- break;
53
- case 'labels':
54
- // カンマ区切りでラベル配列に変換
55
- config.labels = value.split(',').map(l => l.trim());
56
- break;
41
+ case 'name':
42
+ config.name = value;
43
+ break;
44
+ case 'project-name':
45
+ config.projectName = value;
46
+ break;
47
+ case 'jira-key':
48
+ config.jiraKey = value;
49
+ break;
50
+ case 'org':
51
+ config.org = value;
52
+ break;
53
+ case 'labels':
54
+ // カンマ区切りでラベル配列に変換
55
+ config.labels = value.split(',').map(l => l.trim());
56
+ break;
57
57
  }
58
58
  }
59
59
 
@@ -133,7 +133,7 @@ async function createProject(config: ProjectConfig): Promise<void> {
133
133
 
134
134
  // ハイフンが存在する場合のみサービスラベルを生成
135
135
  if (repoName.includes('-')) {
136
- const parts = repoName.split('-');
136
+ const parts = repoName.split('-');
137
137
  const servicePart = parts[parts.length - 1];
138
138
  const serviceLabel = servicePart.toLowerCase().replace(/[^a-z0-9-]/g, '');
139
139