@sk8metal/michi-cli 0.19.0 → 0.20.0
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/dist/src/application/use-cases/spec/generate-requirements.js +1 -1
- package/dist/src/application/use-cases/spec/generate-requirements.js.map +1 -1
- package/dist/src/application/use-cases/spec/init-spec.js +1 -1
- package/dist/src/application/use-cases/spec/init-spec.js.map +1 -1
- package/dist/src/presentation/commands/config/register.d.ts.map +1 -1
- package/dist/src/presentation/commands/config/register.js +54 -0
- package/dist/src/presentation/commands/config/register.js.map +1 -1
- package/dist/src/presentation/interactive/config/env-wizard.d.ts +9 -0
- package/dist/src/presentation/interactive/config/env-wizard.d.ts.map +1 -0
- package/dist/src/presentation/interactive/config/env-wizard.js +193 -0
- package/dist/src/presentation/interactive/config/env-wizard.js.map +1 -0
- package/dist/src/presentation/interactive/config/index.d.ts +5 -0
- package/dist/src/presentation/interactive/config/index.d.ts.map +1 -0
- package/dist/src/presentation/interactive/config/index.js +5 -0
- package/dist/src/presentation/interactive/config/index.js.map +1 -0
- package/dist/src/presentation/interactive/prompts.d.ts +2 -3
- package/dist/src/presentation/interactive/prompts.d.ts.map +1 -1
- package/dist/src/presentation/interactive/prompts.js +4 -6
- package/dist/src/presentation/interactive/prompts.js.map +1 -1
- package/docs/guides/interactive-config.md +285 -0
- package/package.json +1 -1
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"generate-requirements.js","sourceRoot":"","sources":["../../../../../src/application/use-cases/spec/generate-requirements.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAMH,OAAO,EAAE,EAAE,EAAE,GAAG,EAAE,MAAM,iCAAiC,CAAC;AAW1D;;;;GAIG;AACH,MAAM,OAAO,2BAA2B;IACT;IAA7B,YAA6B,UAA0B;QAA1B,eAAU,GAAV,UAAU,CAAgB;IAAG,CAAC;IAE3D;;;;;OAKG;IACH,KAAK,CAAC,OAAO,CACX,WAAwB;QAExB,4BAA4B;QAC5B,MAAM,UAAU,GAAG,MAAM,IAAI,CAAC,UAAU,CAAC,iBAAiB,CAAC,WAAW,CAAC,CAAC;QACxE,IAAI,CAAC,UAAU,CAAC,OAAO,EAAE,CAAC;YACxB,OAAO,GAAG,CAAC;gBACT,IAAI,EAAE,iBAAiB;gBACvB,KAAK,EAAE,UAAU,CAAC,KAAK;aACxB,CAAC,CAAC;QACL,CAAC;QAED,MAAM,IAAI,GAAG,UAAU,CAAC,KAAK,CAAC;QAE9B,sCAAsC;QACtC,IAAI,IAAI,CAAC,KAAK,KAAK,aAAa,EAAE,CAAC;YACjC,OAAO,GAAG,CAAC;gBACT,IAAI,EAAE,cAAc;gBACpB,OAAO,EAAE,4EAA4E,IAAI,CAAC,KAAK,SAAS;aACzG,CAAC,CAAC;QACL,CAAC;QAED,8CAA8C;QAC9C,IAAI,CAAC,WAAW,CAAC,wBAAwB,CAAC,CAAC;QAE3C,oBAAoB;QACpB,MAAM,UAAU,GAAG,MAAM,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QACpD,IAAI,CAAC,UAAU,CAAC,OAAO,EAAE,CAAC;YACxB,OAAO,GAAG,CAAC;gBACT,IAAI,EAAE,iBAAiB;gBACvB,KAAK,EAAE,UAAU,CAAC,KAAK;aACxB,CAAC,CAAC;QACL,CAAC;QAED,gBAAgB;QAChB,OAAO,EAAE,CAAC;YACR,WAAW;YACX,gBAAgB,EAAE,iBAAiB;YACnC,WAAW,EAAE,
|
|
1
|
+
{"version":3,"file":"generate-requirements.js","sourceRoot":"","sources":["../../../../../src/application/use-cases/spec/generate-requirements.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAMH,OAAO,EAAE,EAAE,EAAE,GAAG,EAAE,MAAM,iCAAiC,CAAC;AAW1D;;;;GAIG;AACH,MAAM,OAAO,2BAA2B;IACT;IAA7B,YAA6B,UAA0B;QAA1B,eAAU,GAAV,UAAU,CAAgB;IAAG,CAAC;IAE3D;;;;;OAKG;IACH,KAAK,CAAC,OAAO,CACX,WAAwB;QAExB,4BAA4B;QAC5B,MAAM,UAAU,GAAG,MAAM,IAAI,CAAC,UAAU,CAAC,iBAAiB,CAAC,WAAW,CAAC,CAAC;QACxE,IAAI,CAAC,UAAU,CAAC,OAAO,EAAE,CAAC;YACxB,OAAO,GAAG,CAAC;gBACT,IAAI,EAAE,iBAAiB;gBACvB,KAAK,EAAE,UAAU,CAAC,KAAK;aACxB,CAAC,CAAC;QACL,CAAC;QAED,MAAM,IAAI,GAAG,UAAU,CAAC,KAAK,CAAC;QAE9B,sCAAsC;QACtC,IAAI,IAAI,CAAC,KAAK,KAAK,aAAa,EAAE,CAAC;YACjC,OAAO,GAAG,CAAC;gBACT,IAAI,EAAE,cAAc;gBACpB,OAAO,EAAE,4EAA4E,IAAI,CAAC,KAAK,SAAS;aACzG,CAAC,CAAC;QACL,CAAC;QAED,8CAA8C;QAC9C,IAAI,CAAC,WAAW,CAAC,wBAAwB,CAAC,CAAC;QAE3C,oBAAoB;QACpB,MAAM,UAAU,GAAG,MAAM,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QACpD,IAAI,CAAC,UAAU,CAAC,OAAO,EAAE,CAAC;YACxB,OAAO,GAAG,CAAC;gBACT,IAAI,EAAE,iBAAiB;gBACvB,KAAK,EAAE,UAAU,CAAC,KAAK;aACxB,CAAC,CAAC;QACL,CAAC;QAED,gBAAgB;QAChB,OAAO,EAAE,CAAC;YACR,WAAW;YACX,gBAAgB,EAAE,iBAAiB;YACnC,WAAW,EAAE,sBAAsB,WAAW,CAAC,KAAK,EAAE;SACvD,CAAC,CAAC;IACL,CAAC;CACF"}
|
|
@@ -55,7 +55,7 @@ export class InitSpecUseCase {
|
|
|
55
55
|
return ok({
|
|
56
56
|
featureName,
|
|
57
57
|
createdFiles: ['spec.json', 'requirements.md'],
|
|
58
|
-
nextCommand: `/
|
|
58
|
+
nextCommand: `/michi:spec-requirements ${featureName.value}`,
|
|
59
59
|
});
|
|
60
60
|
}
|
|
61
61
|
/**
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"init-spec.js","sourceRoot":"","sources":["../../../../../src/application/use-cases/spec/init-spec.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAKH,OAAO,EAAE,EAAE,EAAE,GAAG,EAAE,MAAM,iCAAiC,CAAC;AAC1D,OAAO,EAAE,IAAI,EAAE,MAAM,kCAAkC,CAAC;AACxD,OAAO,EAAE,WAAW,EAAE,MAAM,+CAA+C,CAAC;AAW5E;;;;GAIG;AACH,MAAM,OAAO,eAAe;IACG;IAA7B,YAA6B,UAA0B;QAA1B,eAAU,GAAV,UAAU,CAAgB;IAAG,CAAC;IAE3D;;;;;OAKG;IACH,KAAK,CAAC,OAAO,CACX,kBAA0B;QAE1B,iBAAiB;QACjB,IAAI,CAAC,kBAAkB,IAAI,kBAAkB,CAAC,IAAI,EAAE,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YAClE,OAAO,GAAG,CAAC;gBACT,IAAI,EAAE,cAAc;gBACpB,OAAO,EAAE,qCAAqC;aAC/C,CAAC,CAAC;QACL,CAAC;QAED,iDAAiD;QACjD,MAAM,eAAe,GAAG,IAAI,CAAC,mBAAmB,CAAC,kBAAkB,CAAC,CAAC;QAErE,0DAA0D;QAC1D,MAAM,iBAAiB,GAAG,MAAM,IAAI,CAAC,gBAAgB,CAAC,eAAe,CAAC,CAAC;QACvE,IAAI,CAAC,iBAAiB,CAAC,OAAO,EAAE,CAAC;YAC/B,OAAO,GAAG,CAAC;gBACT,IAAI,EAAE,iBAAiB;gBACvB,KAAK,EAAE,iBAAiB,CAAC,KAAK;aAC/B,CAAC,CAAC;QACL,CAAC;QAED,MAAM,WAAW,GAAG,iBAAiB,CAAC,KAAK,CAAC;QAE5C,qBAAqB;QACrB,MAAM,IAAI,GAAG,IAAI,IAAI,CAAC,WAAW,CAAC,KAAK,EAAE,aAAa,EAAE,IAAI,CAAC,CAAC;QAE9D,qBAAqB;QACrB,MAAM,UAAU,GAAG,MAAM,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QACpD,IAAI,CAAC,UAAU,CAAC,OAAO,EAAE,CAAC;YACxB,OAAO,GAAG,CAAC;gBACT,IAAI,EAAE,iBAAiB;gBACvB,KAAK,EAAE,UAAU,CAAC,KAAK;aACxB,CAAC,CAAC;QACL,CAAC;QAED,gBAAgB;QAChB,OAAO,EAAE,CAAC;YACR,WAAW;YACX,YAAY,EAAE,CAAC,WAAW,EAAE,iBAAiB,CAAC;YAC9C,WAAW,EAAE,
|
|
1
|
+
{"version":3,"file":"init-spec.js","sourceRoot":"","sources":["../../../../../src/application/use-cases/spec/init-spec.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"register.d.ts","sourceRoot":"","sources":["../../../../../src/presentation/commands/config/register.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAGpC;;GAEG;AACH,wBAAgB,sBAAsB,CAAC,OAAO,EAAE,OAAO,GAAG,IAAI,
|
|
1
|
+
{"version":3,"file":"register.d.ts","sourceRoot":"","sources":["../../../../../src/presentation/commands/config/register.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAGpC;;GAEG;AACH,wBAAgB,sBAAsB,CAAC,OAAO,EAAE,OAAO,GAAG,IAAI,CAoF7D"}
|
|
@@ -8,6 +8,60 @@ import { validateAndReport } from '../../../../scripts/utils/config-validator.js
|
|
|
8
8
|
* Register config-related commands
|
|
9
9
|
*/
|
|
10
10
|
export function registerConfigCommands(program) {
|
|
11
|
+
program
|
|
12
|
+
.command('config:init')
|
|
13
|
+
.description('Create configuration file interactively')
|
|
14
|
+
.option('--global', 'Create global config (~/.michi/config.json)')
|
|
15
|
+
.option('--global-env', 'Create global .env (~/.michi/.env)')
|
|
16
|
+
.option('--project', 'Create project config (.michi/config.json)')
|
|
17
|
+
.option('--env', 'Create project .env file with secrets')
|
|
18
|
+
.option('--all', 'Create all configuration files')
|
|
19
|
+
.action(async (options) => {
|
|
20
|
+
try {
|
|
21
|
+
// オプションが何も指定されていない場合は --all として扱う
|
|
22
|
+
if (!options.global && !options.globalEnv && !options.project && !options.env && !options.all) {
|
|
23
|
+
options.all = true;
|
|
24
|
+
}
|
|
25
|
+
// グローバル .env 作成
|
|
26
|
+
if (options.globalEnv || options.all) {
|
|
27
|
+
const { createEnvInteractively } = await import('../../interactive/config/index.js');
|
|
28
|
+
await createEnvInteractively('~/.michi/.env');
|
|
29
|
+
}
|
|
30
|
+
// プロジェクト .env 作成
|
|
31
|
+
if (options.env || options.all) {
|
|
32
|
+
const { createEnvInteractively } = await import('../../interactive/config/index.js');
|
|
33
|
+
await createEnvInteractively('.env');
|
|
34
|
+
}
|
|
35
|
+
// グローバル設定 作成
|
|
36
|
+
if (options.global || options.all) {
|
|
37
|
+
const { configGlobal } = await import('../../../../scripts/config-global.js');
|
|
38
|
+
await configGlobal();
|
|
39
|
+
}
|
|
40
|
+
// プロジェクト設定 作成
|
|
41
|
+
if (options.project || options.all) {
|
|
42
|
+
const { setupWorkflowConfig } = await import('../init/setup.js');
|
|
43
|
+
// interactive: true のため、以下のプレースホルダー値は使用されず、
|
|
44
|
+
// 実際の値はユーザーにプロンプトされる
|
|
45
|
+
const config = {
|
|
46
|
+
projectId: '',
|
|
47
|
+
projectName: '',
|
|
48
|
+
langCode: 'ja',
|
|
49
|
+
jiraKey: '',
|
|
50
|
+
interactive: true,
|
|
51
|
+
skipWorkflowConfig: false,
|
|
52
|
+
environment: 'claude',
|
|
53
|
+
};
|
|
54
|
+
await setupWorkflowConfig(config, process.cwd());
|
|
55
|
+
}
|
|
56
|
+
console.log('');
|
|
57
|
+
console.log('✅ 設定ファイルの作成が完了しました。');
|
|
58
|
+
console.log('');
|
|
59
|
+
process.exit(0);
|
|
60
|
+
}
|
|
61
|
+
catch (error) {
|
|
62
|
+
handleError('Configuration initialization failed', error);
|
|
63
|
+
}
|
|
64
|
+
});
|
|
11
65
|
program
|
|
12
66
|
.command('config:validate')
|
|
13
67
|
.description('Validate .michi/config.json')
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"register.js","sourceRoot":"","sources":["../../../../../src/presentation/commands/config/register.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAGH,OAAO,EAAE,iBAAiB,EAAE,MAAM,+CAA+C,CAAC;AAElF;;GAEG;AACH,MAAM,UAAU,sBAAsB,CAAC,OAAgB;IACrD,OAAO;SACJ,OAAO,CAAC,iBAAiB,CAAC;SAC1B,WAAW,CAAC,6BAA6B,CAAC;SAC1C,MAAM,CAAC,KAAK,IAAI,EAAE;QACjB,IAAI,CAAC;YACH,MAAM,KAAK,GAAG,iBAAiB,EAAE,CAAC;YAClC,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;QAC9B,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,WAAW,CAAC,mBAAmB,EAAE,KAAK,CAAC,CAAC;QAC1C,CAAC;IACH,CAAC,CAAC,CAAC;IAEL,OAAO;SACJ,OAAO,CAAC,uBAAuB,CAAC;SAChC,WAAW,CAAC,2DAA2D,CAAC;SACxE,MAAM,CAAC,KAAK,IAAI,EAAE;QACjB,IAAI,CAAC;YACH,MAAM,EAAE,cAAc,EAAE,GAAG,MAAM,MAAM,CAAC,sCAAsC,CAAC,CAAC;YAChF,MAAM,cAAc,EAAE,CAAC;YACvB,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QAClB,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,WAAW,CAAC,uBAAuB,EAAE,KAAK,CAAC,CAAC;QAC9C,CAAC;IACH,CAAC,CAAC,CAAC;AACP,CAAC;AAED;;GAEG;AACH,SAAS,WAAW,CAAC,OAAe,EAAE,KAAc;IAClD,OAAO,CAAC,KAAK,CACX,KAAK,OAAO,GAAG,EACf,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,KAAK,CAC/C,CAAC;IACF,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;AAClB,CAAC"}
|
|
1
|
+
{"version":3,"file":"register.js","sourceRoot":"","sources":["../../../../../src/presentation/commands/config/register.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"env-wizard.d.ts","sourceRoot":"","sources":["../../../../../src/presentation/interactive/config/env-wizard.ts"],"names":[],"mappings":"AAAA;;GAEG;AA6BH;;;GAGG;AACH,wBAAsB,sBAAsB,CAAC,UAAU,GAAE,MAAe,GAAG,OAAO,CAAC,IAAI,CAAC,CAuCvF"}
|
|
@@ -0,0 +1,193 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* .env対話入力ウィザード
|
|
3
|
+
*/
|
|
4
|
+
import * as fs from 'fs/promises';
|
|
5
|
+
import * as path from 'path';
|
|
6
|
+
import * as os from 'os';
|
|
7
|
+
import { createInterface, question, password, textInput } from '../prompts';
|
|
8
|
+
/**
|
|
9
|
+
* .envファイルを対話的に作成
|
|
10
|
+
* @param targetPath .envファイルのパス(省略時は '.env')
|
|
11
|
+
*/
|
|
12
|
+
export async function createEnvInteractively(targetPath = '.env') {
|
|
13
|
+
console.log('');
|
|
14
|
+
console.log('========================================');
|
|
15
|
+
console.log(' .env Interactive Setup');
|
|
16
|
+
console.log('========================================');
|
|
17
|
+
console.log('');
|
|
18
|
+
// パスを絶対パスに変換
|
|
19
|
+
const absolutePath = await resolveEnvPath(targetPath);
|
|
20
|
+
console.log(`設定ファイル: ${absolutePath}`);
|
|
21
|
+
console.log('');
|
|
22
|
+
// 既存ファイルの確認
|
|
23
|
+
const fileExists = await checkFileExists(absolutePath);
|
|
24
|
+
if (fileExists) {
|
|
25
|
+
const rl = createInterface();
|
|
26
|
+
const overwrite = await question(rl, '⚠️ 既存の.envファイルが見つかりました。上書きしますか? (y/N): ');
|
|
27
|
+
rl.close();
|
|
28
|
+
if (overwrite.toLowerCase() !== 'y') {
|
|
29
|
+
console.log('中止しました。');
|
|
30
|
+
return;
|
|
31
|
+
}
|
|
32
|
+
console.log('');
|
|
33
|
+
}
|
|
34
|
+
// 対話的に設定値を入力
|
|
35
|
+
const config = await collectEnvConfig();
|
|
36
|
+
// .envファイルに保存
|
|
37
|
+
await saveEnvFile(absolutePath, config);
|
|
38
|
+
console.log('');
|
|
39
|
+
console.log('✅ .envファイルを作成しました:');
|
|
40
|
+
console.log(` ${absolutePath}`);
|
|
41
|
+
console.log('');
|
|
42
|
+
}
|
|
43
|
+
/**
|
|
44
|
+
* .envファイルのパスを解決
|
|
45
|
+
*/
|
|
46
|
+
async function resolveEnvPath(targetPath) {
|
|
47
|
+
// ~/.michi/.env の場合
|
|
48
|
+
if (targetPath.startsWith('~/.michi/')) {
|
|
49
|
+
const homeDir = os.homedir();
|
|
50
|
+
const michiDir = path.join(homeDir, '.michi');
|
|
51
|
+
// ディレクトリが存在しない場合は作成
|
|
52
|
+
await fs.mkdir(michiDir, { recursive: true });
|
|
53
|
+
// ファイル名部分を保持
|
|
54
|
+
const filename = path.basename(targetPath);
|
|
55
|
+
return path.join(michiDir, filename);
|
|
56
|
+
}
|
|
57
|
+
// 相対パスの場合は絶対パスに変換
|
|
58
|
+
if (!path.isAbsolute(targetPath)) {
|
|
59
|
+
return path.resolve(process.cwd(), targetPath);
|
|
60
|
+
}
|
|
61
|
+
return targetPath;
|
|
62
|
+
}
|
|
63
|
+
/**
|
|
64
|
+
* ファイルが存在するかチェック
|
|
65
|
+
*/
|
|
66
|
+
async function checkFileExists(filePath) {
|
|
67
|
+
try {
|
|
68
|
+
await fs.access(filePath);
|
|
69
|
+
return true;
|
|
70
|
+
}
|
|
71
|
+
catch {
|
|
72
|
+
return false;
|
|
73
|
+
}
|
|
74
|
+
}
|
|
75
|
+
/**
|
|
76
|
+
* 対話的に設定値を収集
|
|
77
|
+
*/
|
|
78
|
+
async function collectEnvConfig() {
|
|
79
|
+
const rl = createInterface();
|
|
80
|
+
const config = {};
|
|
81
|
+
console.log('=== Atlassian連携設定 ===');
|
|
82
|
+
console.log('');
|
|
83
|
+
// Atlassian URL
|
|
84
|
+
config.ATLASSIAN_URL = await textInput(rl, 'Atlassian URL (空白でスキップ): ', {
|
|
85
|
+
defaultValue: '',
|
|
86
|
+
validator: (input) => !input || input.startsWith('https://'),
|
|
87
|
+
errorMessage: 'URLは "https://" で始まる必要があります。',
|
|
88
|
+
});
|
|
89
|
+
if (config.ATLASSIAN_URL) {
|
|
90
|
+
// Atlassian Email
|
|
91
|
+
config.ATLASSIAN_EMAIL = await textInput(rl, 'Atlassian Email: ', {
|
|
92
|
+
validator: (input) => input.includes('@'),
|
|
93
|
+
errorMessage: '有効なメールアドレスを入力してください。',
|
|
94
|
+
});
|
|
95
|
+
// Atlassian API Token(パスワード非表示)
|
|
96
|
+
rl.close(); // パスワード入力前にreadlineを閉じる
|
|
97
|
+
config.ATLASSIAN_API_TOKEN = await password('Atlassian API Token: ');
|
|
98
|
+
// 新しいreadlineインターフェースを作成
|
|
99
|
+
const rl2 = createInterface();
|
|
100
|
+
// Confluence Space設定
|
|
101
|
+
console.log('');
|
|
102
|
+
console.log('=== Confluence Space設定 ===');
|
|
103
|
+
console.log('');
|
|
104
|
+
config.CONFLUENCE_PRD_SPACE = await textInput(rl2, 'PRD Space Key (空白でスキップ): ', {
|
|
105
|
+
defaultValue: '',
|
|
106
|
+
});
|
|
107
|
+
config.CONFLUENCE_QA_SPACE = await textInput(rl2, 'QA Space Key (空白でスキップ): ', {
|
|
108
|
+
defaultValue: '',
|
|
109
|
+
});
|
|
110
|
+
config.CONFLUENCE_RELEASE_SPACE = await textInput(rl2, 'Release Space Key (空白でスキップ): ', {
|
|
111
|
+
defaultValue: '',
|
|
112
|
+
});
|
|
113
|
+
// JIRA Project Keys
|
|
114
|
+
console.log('');
|
|
115
|
+
console.log('=== JIRA設定 ===');
|
|
116
|
+
console.log('');
|
|
117
|
+
config.JIRA_PROJECT_KEYS = await textInput(rl2, 'JIRA Project Keys (カンマ区切り、空白でスキップ): ', {
|
|
118
|
+
defaultValue: '',
|
|
119
|
+
});
|
|
120
|
+
rl2.close();
|
|
121
|
+
}
|
|
122
|
+
else {
|
|
123
|
+
rl.close();
|
|
124
|
+
}
|
|
125
|
+
// GitHub連携設定
|
|
126
|
+
const rl3 = createInterface();
|
|
127
|
+
console.log('');
|
|
128
|
+
console.log('=== GitHub連携設定 ===');
|
|
129
|
+
console.log('');
|
|
130
|
+
config.GITHUB_ORG = await textInput(rl3, 'GitHub Organization (空白でスキップ): ', {
|
|
131
|
+
defaultValue: '',
|
|
132
|
+
});
|
|
133
|
+
if (config.GITHUB_ORG) {
|
|
134
|
+
rl3.close();
|
|
135
|
+
// GitHub Token(パスワード非表示)
|
|
136
|
+
config.GITHUB_TOKEN = await password('GitHub Personal Access Token: ');
|
|
137
|
+
}
|
|
138
|
+
else {
|
|
139
|
+
rl3.close();
|
|
140
|
+
}
|
|
141
|
+
return config;
|
|
142
|
+
}
|
|
143
|
+
/**
|
|
144
|
+
* .envファイルに保存
|
|
145
|
+
*/
|
|
146
|
+
async function saveEnvFile(filePath, config) {
|
|
147
|
+
const lines = [
|
|
148
|
+
'# Michi Configuration',
|
|
149
|
+
'# Generated by: michi config:init --env',
|
|
150
|
+
'',
|
|
151
|
+
];
|
|
152
|
+
// Atlassian連携
|
|
153
|
+
if (config.ATLASSIAN_URL) {
|
|
154
|
+
lines.push('# Atlassian Integration');
|
|
155
|
+
lines.push(`ATLASSIAN_URL=${config.ATLASSIAN_URL}`);
|
|
156
|
+
lines.push(`ATLASSIAN_EMAIL=${config.ATLASSIAN_EMAIL || ''}`);
|
|
157
|
+
lines.push(`ATLASSIAN_API_TOKEN=${config.ATLASSIAN_API_TOKEN || ''}`);
|
|
158
|
+
lines.push('');
|
|
159
|
+
}
|
|
160
|
+
// Confluence Space
|
|
161
|
+
if (config.CONFLUENCE_PRD_SPACE || config.CONFLUENCE_QA_SPACE || config.CONFLUENCE_RELEASE_SPACE) {
|
|
162
|
+
lines.push('# Confluence Spaces');
|
|
163
|
+
if (config.CONFLUENCE_PRD_SPACE) {
|
|
164
|
+
lines.push(`CONFLUENCE_PRD_SPACE=${config.CONFLUENCE_PRD_SPACE}`);
|
|
165
|
+
}
|
|
166
|
+
if (config.CONFLUENCE_QA_SPACE) {
|
|
167
|
+
lines.push(`CONFLUENCE_QA_SPACE=${config.CONFLUENCE_QA_SPACE}`);
|
|
168
|
+
}
|
|
169
|
+
if (config.CONFLUENCE_RELEASE_SPACE) {
|
|
170
|
+
lines.push(`CONFLUENCE_RELEASE_SPACE=${config.CONFLUENCE_RELEASE_SPACE}`);
|
|
171
|
+
}
|
|
172
|
+
lines.push('');
|
|
173
|
+
}
|
|
174
|
+
// JIRA設定
|
|
175
|
+
if (config.JIRA_PROJECT_KEYS) {
|
|
176
|
+
lines.push('# JIRA Configuration');
|
|
177
|
+
lines.push(`JIRA_PROJECT_KEYS=${config.JIRA_PROJECT_KEYS}`);
|
|
178
|
+
lines.push('');
|
|
179
|
+
}
|
|
180
|
+
// GitHub連携
|
|
181
|
+
if (config.GITHUB_ORG) {
|
|
182
|
+
lines.push('# GitHub Integration');
|
|
183
|
+
lines.push(`GITHUB_ORG=${config.GITHUB_ORG}`);
|
|
184
|
+
lines.push(`GITHUB_TOKEN=${config.GITHUB_TOKEN || ''}`);
|
|
185
|
+
lines.push('');
|
|
186
|
+
}
|
|
187
|
+
const content = lines.join('\n');
|
|
188
|
+
// 一時ファイルに書き込んでからrenameする(アトミックな書き込み)
|
|
189
|
+
const tmpPath = `${filePath}.tmp`;
|
|
190
|
+
await fs.writeFile(tmpPath, content, { mode: 0o600 }); // 0o600: 所有者のみ読み書き可能
|
|
191
|
+
await fs.rename(tmpPath, filePath);
|
|
192
|
+
}
|
|
193
|
+
//# sourceMappingURL=env-wizard.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"env-wizard.js","sourceRoot":"","sources":["../../../../../src/presentation/interactive/config/env-wizard.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../../src/presentation/interactive/config/index.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,EAAE,sBAAsB,EAAE,MAAM,cAAc,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../../src/presentation/interactive/config/index.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,EAAE,sBAAsB,EAAE,MAAM,cAAc,CAAC"}
|
|
@@ -12,10 +12,9 @@ export declare function createInterface(): readline.Interface;
|
|
|
12
12
|
export declare function question(rl: readline.Interface, query: string): Promise<string>;
|
|
13
13
|
/**
|
|
14
14
|
* パスワードなど、非表示で入力を受け取る
|
|
15
|
-
*
|
|
16
|
-
* 実際のプロダクションでは inquirer や prompts などのライブラリを使用することを推奨
|
|
15
|
+
* inquirerを使用してパスワードを非表示で入力
|
|
17
16
|
*/
|
|
18
|
-
export declare function password(
|
|
17
|
+
export declare function password(query: string): Promise<string>;
|
|
19
18
|
/**
|
|
20
19
|
* 数値入力を受け取る
|
|
21
20
|
*/
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"prompts.d.ts","sourceRoot":"","sources":["../../../../src/presentation/interactive/prompts.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,KAAK,QAAQ,MAAM,UAAU,CAAC;AAErC;;GAEG;AACH,wBAAgB,eAAe,IAAI,QAAQ,CAAC,SAAS,CAKpD;AAED;;GAEG;AACH,wBAAgB,QAAQ,CAAC,EAAE,EAAE,QAAQ,CAAC,SAAS,EAAE,KAAK,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,CAM/E;AAED
|
|
1
|
+
{"version":3,"file":"prompts.d.ts","sourceRoot":"","sources":["../../../../src/presentation/interactive/prompts.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,KAAK,QAAQ,MAAM,UAAU,CAAC;AAErC;;GAEG;AACH,wBAAgB,eAAe,IAAI,QAAQ,CAAC,SAAS,CAKpD;AAED;;GAEG;AACH,wBAAgB,QAAQ,CAAC,EAAE,EAAE,QAAQ,CAAC,SAAS,EAAE,KAAK,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,CAM/E;AAED;;;GAGG;AACH,wBAAsB,QAAQ,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,CAG7D;AAED;;GAEG;AACH,wBAAsB,WAAW,CAC/B,EAAE,EAAE,QAAQ,CAAC,SAAS,EACtB,KAAK,EAAE,MAAM,EACb,GAAG,CAAC,EAAE,MAAM,EACZ,GAAG,CAAC,EAAE,MAAM,EACZ,YAAY,CAAC,EAAE,MAAM,GACpB,OAAO,CAAC,MAAM,CAAC,CAyBjB;AAED;;GAEG;AACH,wBAAsB,SAAS,CAC7B,EAAE,EAAE,QAAQ,CAAC,SAAS,EACtB,KAAK,EAAE,MAAM,EACb,OAAO,CAAC,EAAE;IACR,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,SAAS,CAAC,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,OAAO,CAAC;IACvC,YAAY,CAAC,EAAE,MAAM,CAAC;CACvB,GACA,OAAO,CAAC,MAAM,CAAC,CAajB"}
|
|
@@ -23,13 +23,11 @@ export function question(rl, query) {
|
|
|
23
23
|
}
|
|
24
24
|
/**
|
|
25
25
|
* パスワードなど、非表示で入力を受け取る
|
|
26
|
-
*
|
|
27
|
-
* 実際のプロダクションでは inquirer や prompts などのライブラリを使用することを推奨
|
|
26
|
+
* inquirerを使用してパスワードを非表示で入力
|
|
28
27
|
*/
|
|
29
|
-
export async function password(
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
return question(rl, query);
|
|
28
|
+
export async function password(query) {
|
|
29
|
+
const { password: inquirerPassword } = await import('@inquirer/prompts');
|
|
30
|
+
return inquirerPassword({ message: query });
|
|
33
31
|
}
|
|
34
32
|
/**
|
|
35
33
|
* 数値入力を受け取る
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"prompts.js","sourceRoot":"","sources":["../../../../src/presentation/interactive/prompts.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,KAAK,QAAQ,MAAM,UAAU,CAAC;AAErC;;GAEG;AACH,MAAM,UAAU,eAAe;IAC7B,OAAO,QAAQ,CAAC,eAAe,CAAC;QAC9B,KAAK,EAAE,OAAO,CAAC,KAAK;QACpB,MAAM,EAAE,OAAO,CAAC,MAAM;KACvB,CAAC,CAAC;AACL,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,QAAQ,CAAC,EAAsB,EAAE,KAAa;IAC5D,OAAO,IAAI,OAAO,CAAC,CAAC,OAAO,EAAE,EAAE;QAC7B,EAAE,CAAC,QAAQ,CAAC,KAAK,EAAE,CAAC,MAAM,EAAE,EAAE;YAC5B,OAAO,CAAC,MAAM,CAAC,IAAI,EAAE,CAAC,CAAC;QACzB,CAAC,CAAC,CAAC;IACL,CAAC,CAAC,CAAC;AACL,CAAC;AAED
|
|
1
|
+
{"version":3,"file":"prompts.js","sourceRoot":"","sources":["../../../../src/presentation/interactive/prompts.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,285 @@
|
|
|
1
|
+
# 対話的設定ガイド
|
|
2
|
+
|
|
3
|
+
このガイドでは、Michiの対話的設定機能を使って、各種設定ファイルを作成する方法を説明します。
|
|
4
|
+
|
|
5
|
+
## 目次
|
|
6
|
+
|
|
7
|
+
1. [コマンド一覧](#コマンド一覧)
|
|
8
|
+
2. [設定ファイルの種類](#設定ファイルの種類)
|
|
9
|
+
3. [使い方](#使い方)
|
|
10
|
+
4. [3層設定アーキテクチャ](#3層設定アーキテクチャ)
|
|
11
|
+
5. [セキュリティ](#セキュリティ)
|
|
12
|
+
|
|
13
|
+
---
|
|
14
|
+
|
|
15
|
+
## コマンド一覧
|
|
16
|
+
|
|
17
|
+
| コマンド | 作成ファイル | 説明 |
|
|
18
|
+
|---------|-------------|------|
|
|
19
|
+
| `michi init` | `.kiro/`, `.env`(テンプレート), `.michi/config.json` | プロジェクト全体の初期化 |
|
|
20
|
+
| `michi config:init` | すべての設定ファイル(`--all`オプション時) | 対話的に設定ファイルを作成 |
|
|
21
|
+
| `michi config:init --global` | `~/.michi/config.json` | グローバル設定を対話的に作成 |
|
|
22
|
+
| `michi config:init --global-env` | `~/.michi/.env` | グローバル.envを対話的に作成 |
|
|
23
|
+
| `michi config:init --project` | `.michi/config.json` | プロジェクト設定を対話的に作成 |
|
|
24
|
+
| `michi config:init --env` | `.env` | プロジェクト.envを対話的に作成 |
|
|
25
|
+
| `michi config:init --all` | 上記すべて | 全設定ファイルを作成 |
|
|
26
|
+
|
|
27
|
+
### michi init と michi config:init の違い
|
|
28
|
+
|
|
29
|
+
- **`michi init`**: プロジェクトの初期化(.kiroディレクトリ構造、プロジェクトメタデータ作成)
|
|
30
|
+
- `.env`はテンプレートのみ(値の入力なし)
|
|
31
|
+
- `.michi/config.json`はグローバル設定をコピー、またはデフォルト値を使用
|
|
32
|
+
|
|
33
|
+
- **`michi config:init`**: 設定ファイルの対話的作成(値を入力)
|
|
34
|
+
- `.env`の各項目を対話的に入力(APIトークンはパスワード非表示)
|
|
35
|
+
- `.michi/config.json`も対話的に作成可能
|
|
36
|
+
|
|
37
|
+
---
|
|
38
|
+
|
|
39
|
+
## 設定ファイルの種類
|
|
40
|
+
|
|
41
|
+
### 1. グローバル設定 (`~/.michi/config.json`)
|
|
42
|
+
|
|
43
|
+
すべてのプロジェクトに適用される共通設定です。
|
|
44
|
+
|
|
45
|
+
**含まれる内容:**
|
|
46
|
+
- Confluence設定(ページ作成粒度)
|
|
47
|
+
- JIRA設定(Epic作成、ストーリー作成粒度、ストーリーポイント)
|
|
48
|
+
- ワークフロー設定(有効なフェーズ)
|
|
49
|
+
|
|
50
|
+
**作成方法:**
|
|
51
|
+
```bash
|
|
52
|
+
michi config:init --global
|
|
53
|
+
```
|
|
54
|
+
|
|
55
|
+
### 2. グローバル環境変数 (`~/.michi/.env`)
|
|
56
|
+
|
|
57
|
+
すべてのプロジェクトで使用する環境変数です(機密情報)。
|
|
58
|
+
|
|
59
|
+
**含まれる内容:**
|
|
60
|
+
- Atlassian連携(URL、Email、APIトークン)
|
|
61
|
+
- GitHub連携(Organization、Personalトークン)
|
|
62
|
+
- Confluence Space設定
|
|
63
|
+
- JIRAプロジェクトキー
|
|
64
|
+
|
|
65
|
+
**作成方法:**
|
|
66
|
+
```bash
|
|
67
|
+
michi config:init --global-env
|
|
68
|
+
```
|
|
69
|
+
|
|
70
|
+
### 3. プロジェクト設定 (`.michi/config.json`)
|
|
71
|
+
|
|
72
|
+
プロジェクト固有の設定です。グローバル設定を上書きできます。
|
|
73
|
+
|
|
74
|
+
**作成方法:**
|
|
75
|
+
```bash
|
|
76
|
+
michi config:init --project
|
|
77
|
+
```
|
|
78
|
+
|
|
79
|
+
### 4. プロジェクト環境変数 (`.env`)
|
|
80
|
+
|
|
81
|
+
プロジェクト固有の環境変数です。グローバル環境変数を上書きできます。
|
|
82
|
+
|
|
83
|
+
**作成方法:**
|
|
84
|
+
```bash
|
|
85
|
+
michi config:init --env
|
|
86
|
+
```
|
|
87
|
+
|
|
88
|
+
---
|
|
89
|
+
|
|
90
|
+
## 使い方
|
|
91
|
+
|
|
92
|
+
### 基本的な使い方
|
|
93
|
+
|
|
94
|
+
#### 1. プロジェクト初期化時
|
|
95
|
+
|
|
96
|
+
プロジェクト新規作成時は、まず `michi init` でプロジェクト構造を作成します。
|
|
97
|
+
|
|
98
|
+
```bash
|
|
99
|
+
cd your-project
|
|
100
|
+
michi init
|
|
101
|
+
```
|
|
102
|
+
|
|
103
|
+
`.env` と `.michi/config.json` はテンプレートまたはデフォルト値で作成されます。
|
|
104
|
+
|
|
105
|
+
#### 2. 機密情報を含む .env の作成
|
|
106
|
+
|
|
107
|
+
APIトークンなどの機密情報を対話的に入力して、`.env` を作成します。
|
|
108
|
+
|
|
109
|
+
```bash
|
|
110
|
+
michi config:init --env
|
|
111
|
+
```
|
|
112
|
+
|
|
113
|
+
**入力例:**
|
|
114
|
+
```
|
|
115
|
+
========================================
|
|
116
|
+
.env Interactive Setup
|
|
117
|
+
========================================
|
|
118
|
+
|
|
119
|
+
設定ファイル: /path/to/your-project/.env
|
|
120
|
+
|
|
121
|
+
=== Atlassian連携設定 ===
|
|
122
|
+
|
|
123
|
+
Atlassian URL (空白でスキップ): https://your-domain.atlassian.net
|
|
124
|
+
Atlassian Email: your-email@company.com
|
|
125
|
+
Atlassian API Token: ********** (入力は非表示)
|
|
126
|
+
|
|
127
|
+
=== Confluence Space設定 ===
|
|
128
|
+
|
|
129
|
+
PRD Space Key (空白でスキップ): PRD
|
|
130
|
+
QA Space Key (空白でスキップ): QA
|
|
131
|
+
Release Space Key (空白でスキップ): RELEASE
|
|
132
|
+
|
|
133
|
+
=== JIRA設定 ===
|
|
134
|
+
|
|
135
|
+
JIRA Project Keys (カンマ区切り、空白でスキップ): PROJ1,PROJ2
|
|
136
|
+
|
|
137
|
+
=== GitHub連携設定 ===
|
|
138
|
+
|
|
139
|
+
GitHub Organization (空白でスキップ): your-org
|
|
140
|
+
GitHub Personal Access Token: ********** (入力は非表示)
|
|
141
|
+
|
|
142
|
+
✅ .envファイルを作成しました:
|
|
143
|
+
/path/to/your-project/.env
|
|
144
|
+
```
|
|
145
|
+
|
|
146
|
+
#### 3. グローバル設定の作成
|
|
147
|
+
|
|
148
|
+
複数のプロジェクトで共通の設定を使う場合、グローバル設定を作成します。
|
|
149
|
+
|
|
150
|
+
```bash
|
|
151
|
+
michi config:init --global
|
|
152
|
+
```
|
|
153
|
+
|
|
154
|
+
#### 4. すべての設定ファイルを一度に作成
|
|
155
|
+
|
|
156
|
+
```bash
|
|
157
|
+
michi config:init --all
|
|
158
|
+
```
|
|
159
|
+
|
|
160
|
+
上記コマンドは、以下の順序で実行されます:
|
|
161
|
+
1. `~/.michi/.env` 作成
|
|
162
|
+
2. `.env` 作成
|
|
163
|
+
3. `~/.michi/config.json` 作成
|
|
164
|
+
4. `.michi/config.json` 作成
|
|
165
|
+
|
|
166
|
+
---
|
|
167
|
+
|
|
168
|
+
## 3層設定アーキテクチャ
|
|
169
|
+
|
|
170
|
+
Michiは、3層の設定アーキテクチャを採用しています。
|
|
171
|
+
|
|
172
|
+
### 読み込み優先順位(低 → 高)
|
|
173
|
+
|
|
174
|
+
1. **デフォルト設定**(内蔵)
|
|
175
|
+
2. **グローバル設定** (`~/.michi/config.json`)
|
|
176
|
+
3. **グローバル環境変数** (`~/.michi/.env`)
|
|
177
|
+
4. **プロジェクト設定** (`.michi/config.json`)
|
|
178
|
+
5. **プロジェクト環境変数** (`.env`)
|
|
179
|
+
|
|
180
|
+
**例:**
|
|
181
|
+
- グローバル設定で `ATLASSIAN_URL=https://global.atlassian.net` を設定
|
|
182
|
+
- プロジェクト環境変数で `ATLASSIAN_URL=https://project.atlassian.net` を設定
|
|
183
|
+
- → プロジェクト環境変数の値 (`https://project.atlassian.net`) が使用される
|
|
184
|
+
|
|
185
|
+
### 設定の上書きルール
|
|
186
|
+
|
|
187
|
+
- 上位の設定(番号が大きい)が下位の設定を上書きします
|
|
188
|
+
- プロジェクト固有の設定が必要な場合は、プロジェクト設定/環境変数で上書き
|
|
189
|
+
- 共通設定はグローバル設定/環境変数で管理
|
|
190
|
+
|
|
191
|
+
---
|
|
192
|
+
|
|
193
|
+
## セキュリティ
|
|
194
|
+
|
|
195
|
+
### .envファイルの機密情報入力
|
|
196
|
+
|
|
197
|
+
APIトークンなどの機密情報は、入力時に非表示になります(`@inquirer/prompts`使用)。
|
|
198
|
+
|
|
199
|
+
```bash
|
|
200
|
+
Atlassian API Token: ********** (入力は見えません)
|
|
201
|
+
GitHub Personal Access Token: ********** (入力は見えません)
|
|
202
|
+
```
|
|
203
|
+
|
|
204
|
+
### ファイルパーミッション
|
|
205
|
+
|
|
206
|
+
`.env` ファイルは、セキュリティのため、所有者のみ読み書き可能な権限(`0o600`)で作成されます。
|
|
207
|
+
|
|
208
|
+
```bash
|
|
209
|
+
ls -la .env
|
|
210
|
+
-rw------- 1 user user 512 Jan 1 12:00 .env
|
|
211
|
+
```
|
|
212
|
+
|
|
213
|
+
### .gitignore
|
|
214
|
+
|
|
215
|
+
`.env` ファイルは機密情報を含むため、必ず `.gitignore` に追加してください。
|
|
216
|
+
|
|
217
|
+
```
|
|
218
|
+
# .gitignore
|
|
219
|
+
.env
|
|
220
|
+
```
|
|
221
|
+
|
|
222
|
+
**注意:** `.env.example` はGitで管理しても問題ありませんが、実際の値は含めないでください。
|
|
223
|
+
|
|
224
|
+
---
|
|
225
|
+
|
|
226
|
+
## 既存機能との関係
|
|
227
|
+
|
|
228
|
+
### `michi init` との使い分け
|
|
229
|
+
|
|
230
|
+
| タイミング | コマンド | 目的 |
|
|
231
|
+
|-----------|---------|------|
|
|
232
|
+
| プロジェクト新規作成時 | `michi init` | プロジェクト構造の初期化 |
|
|
233
|
+
| .envに値を入力したい | `michi config:init --env` | 機密情報を対話的に入力 |
|
|
234
|
+
| グローバル設定を作成 | `michi config:init --global` | 複数プロジェクトで共通設定 |
|
|
235
|
+
|
|
236
|
+
### 過去の `npm run config:global` との関係
|
|
237
|
+
|
|
238
|
+
以前は `npm run config:global` を使用していましたが、`michi config:init --global` に統合されました。
|
|
239
|
+
|
|
240
|
+
**移行方法:**
|
|
241
|
+
```bash
|
|
242
|
+
# 旧コマンド
|
|
243
|
+
npm run config:global
|
|
244
|
+
|
|
245
|
+
# 新コマンド
|
|
246
|
+
michi config:init --global
|
|
247
|
+
```
|
|
248
|
+
|
|
249
|
+
---
|
|
250
|
+
|
|
251
|
+
## トラブルシューティング
|
|
252
|
+
|
|
253
|
+
### Q1. `.env` ファイルが既に存在する場合は?
|
|
254
|
+
|
|
255
|
+
上書き確認が表示されます。
|
|
256
|
+
|
|
257
|
+
```
|
|
258
|
+
⚠️ 既存の.envファイルが見つかりました。上書きしますか? (y/N):
|
|
259
|
+
```
|
|
260
|
+
|
|
261
|
+
- `y` を入力すると上書き
|
|
262
|
+
- `N` または Enter で中止
|
|
263
|
+
|
|
264
|
+
### Q2. グローバル設定とプロジェクト設定の違いは?
|
|
265
|
+
|
|
266
|
+
- **グローバル設定** (`~/.michi/config.json`): すべてのプロジェクトに適用
|
|
267
|
+
- **プロジェクト設定** (`.michi/config.json`): プロジェクト固有の設定(グローバル設定を上書き)
|
|
268
|
+
|
|
269
|
+
### Q3. パスワード入力時、入力が見えない
|
|
270
|
+
|
|
271
|
+
セキュリティのため、APIトークンやパスワードは入力時に非表示になります。
|
|
272
|
+
|
|
273
|
+
入力後、Enterを押してください。
|
|
274
|
+
|
|
275
|
+
---
|
|
276
|
+
|
|
277
|
+
## 関連ドキュメント
|
|
278
|
+
|
|
279
|
+
- [Atlassian連携ガイド](./atlassian-integration.md)
|
|
280
|
+
- [アーキテクチャガイド](../architecture.md)
|
|
281
|
+
- [設定ファイルリファレンス](../reference/config.md)
|
|
282
|
+
|
|
283
|
+
---
|
|
284
|
+
|
|
285
|
+
**更新日:** 2026-01-04
|