@einja/dev-cli 0.1.40 → 0.1.41
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/README.md +89 -1
- package/dist/cli.js +1 -0
- package/dist/cli.js.map +1 -1
- package/dist/commands/init.d.ts.map +1 -1
- package/dist/commands/init.js +71 -1
- package/dist/commands/init.js.map +1 -1
- package/dist/commands/list.js.map +1 -1
- package/dist/commands/sync.d.ts.map +1 -1
- package/dist/commands/sync.js +187 -13
- package/dist/commands/sync.js.map +1 -1
- package/dist/lib/dependency-checker.d.ts.map +1 -1
- package/dist/lib/merger.d.ts +12 -0
- package/dist/lib/merger.d.ts.map +1 -1
- package/dist/lib/merger.js +28 -0
- package/dist/lib/merger.js.map +1 -1
- package/dist/lib/preset-update/cli-repo-detector.d.ts.map +1 -1
- package/dist/lib/preset-update/file-copier.d.ts.map +1 -1
- package/dist/lib/preset-update/preset-finder.d.ts.map +1 -1
- package/dist/lib/preset.d.ts.map +1 -1
- package/dist/lib/sync/category-validator.d.ts +1 -1
- package/dist/lib/sync/category-validator.d.ts.map +1 -1
- package/dist/lib/sync/category-validator.js +2 -1
- package/dist/lib/sync/category-validator.js.map +1 -1
- package/dist/lib/sync/category-validator.test.js +3 -1
- package/dist/lib/sync/category-validator.test.js.map +1 -1
- package/dist/lib/sync/conflict-reporter.d.ts.map +1 -1
- package/dist/lib/sync/diff-engine.d.ts.map +1 -1
- package/dist/lib/sync/file-filter.d.ts.map +1 -1
- package/dist/lib/sync/file-filter.js +1 -0
- package/dist/lib/sync/file-filter.js.map +1 -1
- package/dist/lib/sync/integration.test.js +255 -69
- package/dist/lib/sync/integration.test.js.map +1 -1
- package/dist/lib/sync/json-processor.d.ts +4 -4
- package/dist/lib/sync/json-processor.d.ts.map +1 -1
- package/dist/lib/sync/json-processor.js +11 -11
- package/dist/lib/sync/json-processor.js.map +1 -1
- package/dist/lib/sync/marker-processor.d.ts +60 -8
- package/dist/lib/sync/marker-processor.d.ts.map +1 -1
- package/dist/lib/sync/marker-processor.js +117 -26
- package/dist/lib/sync/marker-processor.js.map +1 -1
- package/dist/lib/sync/marker-processor.test.js +261 -40
- package/dist/lib/sync/marker-processor.test.js.map +1 -1
- package/dist/lib/sync/metadata-manager.d.ts +4 -0
- package/dist/lib/sync/metadata-manager.d.ts.map +1 -1
- package/dist/lib/sync/metadata-manager.js +15 -0
- package/dist/lib/sync/metadata-manager.js.map +1 -1
- package/dist/lib/sync/metadata-manager.test.js +68 -0
- package/dist/lib/sync/metadata-manager.test.js.map +1 -1
- package/dist/lib/sync/orphan-cleaner.d.ts +29 -0
- package/dist/lib/sync/orphan-cleaner.d.ts.map +1 -0
- package/dist/lib/sync/orphan-cleaner.js +80 -0
- package/dist/lib/sync/orphan-cleaner.js.map +1 -0
- package/dist/lib/sync/orphan-cleaner.test.d.ts +2 -0
- package/dist/lib/sync/orphan-cleaner.test.d.ts.map +1 -0
- package/dist/lib/sync/orphan-cleaner.test.js +169 -0
- package/dist/lib/sync/orphan-cleaner.test.js.map +1 -0
- package/dist/lib/sync/project-private-synchronizer.d.ts +52 -0
- package/dist/lib/sync/project-private-synchronizer.d.ts.map +1 -0
- package/dist/lib/sync/project-private-synchronizer.js +106 -0
- package/dist/lib/sync/project-private-synchronizer.js.map +1 -0
- package/dist/lib/sync/project-private-synchronizer.test.d.ts +2 -0
- package/dist/lib/sync/project-private-synchronizer.test.d.ts.map +1 -0
- package/dist/lib/sync/project-private-synchronizer.test.js +348 -0
- package/dist/lib/sync/project-private-synchronizer.test.js.map +1 -0
- package/dist/types/index.d.ts +1 -0
- package/dist/types/index.d.ts.map +1 -1
- package/dist/types/sync.d.ts +36 -6
- package/dist/types/sync.d.ts.map +1 -1
- package/dist/types/sync.js +2 -2
- package/dist/types/sync.js.map +1 -1
- package/package.json +5 -4
- package/presets/default/.claude/agents/einja/Explore.md +140 -0
- package/presets/default/.claude/agents/einja/backend-architect.md +4 -0
- package/presets/default/.claude/agents/einja/codex-agent.md +4 -0
- package/presets/default/.claude/agents/einja/design-engineer.md +4 -0
- package/presets/default/.claude/agents/einja/docs/docs-updater.md +4 -0
- package/presets/default/.claude/agents/einja/frontend-architect.md +4 -0
- package/presets/default/.claude/agents/einja/frontend-coder.md +4 -0
- package/presets/default/.claude/agents/einja/git/conflict-resolver.md +4 -0
- package/presets/default/.claude/agents/einja/specs/spec-design-generator.md +4 -1
- package/presets/default/.claude/agents/einja/specs/spec-qa-generator.md +4 -0
- package/presets/default/.claude/agents/einja/specs/spec-requirements-generator.md +4 -1
- package/presets/default/.claude/agents/einja/specs/spec-tasks-generator.md +6 -2
- package/presets/default/.claude/agents/einja/specs/spec-tasks-validator.md +4 -0
- package/presets/default/.claude/agents/einja/task/task-executer.md +57 -115
- package/presets/default/.claude/agents/einja/task/task-modification-analyzer.md +4 -0
- package/presets/default/.claude/agents/einja/task/task-qa.md +4 -0
- package/presets/default/.claude/agents/einja/task/task-reviewer.md +4 -0
- package/presets/default/.claude/commands/einja/einja-sync.md +5 -1
- package/presets/default/.claude/commands/einja/frontend-implement.md +3 -1
- package/presets/default/.claude/commands/einja/issue-exec.md +403 -0
- package/presets/default/.claude/commands/einja/spec-create.md +15 -1
- package/presets/default/.claude/commands/einja/start-dev.md +4 -0
- package/presets/default/.claude/commands/einja/sync-cursor-commands.md +4 -0
- package/presets/default/.claude/commands/einja/task-exec.md +106 -14
- package/presets/default/.claude/commands/einja/update-docs-by-task-specs.md +4 -0
- package/presets/default/.claude/hooks/einja/plan-mode-skill-loader.sh +23 -0
- package/presets/default/.claude/settings.json +15 -1
- package/presets/default/.claude/skills/einja-conflict-resolver/SKILL.md +4 -0
- package/presets/default/.claude/skills/einja-general-context-loader/SKILL.md +4 -0
- package/presets/default/.claude/skills/einja-output-format/SKILL.md +4 -0
- package/presets/default/.claude/skills/einja-project-overview/SKILL.md +7 -3
- package/presets/default/.claude/skills/einja-skill-creator/SKILL.md +266 -274
- package/presets/default/.claude/skills/einja-skill-creator/agents/analyzer.md +274 -0
- package/presets/default/.claude/skills/einja-skill-creator/agents/comparator.md +202 -0
- package/presets/default/.claude/skills/einja-skill-creator/agents/grader.md +195 -0
- package/presets/default/.claude/skills/einja-skill-creator/assets/eval_review.html +146 -0
- package/presets/default/.claude/skills/einja-skill-creator/eval-viewer/generate_review.py +471 -0
- package/presets/default/.claude/skills/einja-skill-creator/eval-viewer/viewer.html +1325 -0
- package/presets/default/.claude/skills/einja-skill-creator/references/schemas.md +430 -0
- package/presets/default/.claude/skills/einja-skill-creator/scripts/aggregate_benchmark.py +154 -0
- package/presets/default/.claude/skills/einja-skill-creator/scripts/generate_report.py +265 -0
- package/presets/default/.claude/skills/einja-skill-creator/scripts/improve_description.py +252 -0
- package/presets/default/.claude/skills/einja-skill-creator/scripts/init_skill.py +13 -19
- package/presets/default/.claude/skills/einja-skill-creator/scripts/package_skill.py +36 -7
- package/presets/default/.claude/skills/einja-skill-creator/scripts/run_eval.py +310 -0
- package/presets/default/.claude/skills/einja-skill-creator/scripts/run_loop.py +295 -0
- package/presets/default/.claude/skills/einja-skill-creator/scripts/utils.py +48 -0
- package/presets/default/.claude/skills/einja-spec-context-loader/SKILL.md +4 -0
- package/presets/default/.claude/skills/einja-task-commit/SKILL.md +4 -0
- package/presets/default/.claude/skills/einja-task-qa/SKILL.md +4 -0
- package/presets/default/.envrc +5 -0
- package/presets/default/.mcp.json +2 -12
- package/presets/default/CLAUDE.md.template +26 -4
- package/presets/default/docs/einja/example/specs/issues/issue999-example-task/tasks.md +1 -1
- package/presets/default/docs/einja/instructions/deployment-setup.md +3 -8
- package/presets/default/docs/einja/instructions/environment-setup.md +3 -8
- package/presets/default/docs/einja/instructions/issue-exec-workflow.md +276 -0
- package/presets/default/docs/einja/instructions/local-server-environment-and-worktree.md +70 -8
- package/presets/default/docs/einja/instructions/neon-cli-reference.md +3 -8
- package/presets/default/docs/einja/instructions/task-execute.md +23 -28
- package/presets/default/docs/einja/instructions/vercel-cli-reference.md +17 -10
- package/presets/default/docs/einja/steering/README.md +11 -11
- package/presets/default/docs/einja/steering/acceptance-criteria-and-qa-guide.md +3 -8
- package/presets/default/docs/einja/steering/architecture.md +3 -8
- package/presets/default/docs/einja/steering/branch-strategy.md +63 -70
- package/presets/default/docs/einja/steering/commit-rules.md +3 -8
- package/presets/default/docs/einja/steering/db-schema-design.md +3 -8
- package/presets/default/docs/einja/steering/development/api-development.md +3 -8
- package/presets/default/docs/einja/steering/development/backend-architecture.md +3 -8
- package/presets/default/docs/einja/steering/development/coding-standards.md +723 -0
- package/presets/default/docs/einja/steering/development/component-design.md +502 -0
- package/presets/default/docs/einja/steering/development/database-guidelines.md +2 -2
- package/presets/default/docs/einja/steering/development/frontend-development.md +3 -8
- package/presets/default/docs/einja/steering/development/playwright-guidelines.md +59 -0
- package/presets/default/docs/einja/steering/development/review-guidelines.md +3 -8
- package/presets/default/docs/einja/steering/development/testing-strategy.md +3 -8
- package/presets/default/docs/einja/steering/development-workflow.md +71 -124
- package/presets/default/docs/einja/steering/infrastructure/deployment.md +49 -55
- package/presets/default/docs/einja/steering/infrastructure/environment-variables.md +4 -8
- package/presets/default/docs/einja/steering/product.md +3 -8
- package/presets/default/docs/einja/steering/task-management.md +14 -98
- package/presets/default/scripts/ensure-serena.sh +75 -0
- package/presets/default/scripts/env-rotate-secrets.ts +336 -0
- package/presets/default/scripts/env-show.ts +130 -0
- package/presets/default/scripts/env.ts +479 -0
- package/presets/default/scripts/init.sh +92 -0
- package/presets/default/scripts/lib/env-common.ts +108 -0
- package/presets/default/scripts/lib/worktree-config.ts +64 -0
- package/presets/default/scripts/setup-dev.ts +640 -0
- package/presets/default/scripts/stop-serena.sh +25 -0
- package/presets/default/scripts/worktree/dev.ts +872 -0
- package/dist/lib/sync/seed-synchronizer.d.ts +0 -27
- package/dist/lib/sync/seed-synchronizer.d.ts.map +0 -1
- package/dist/lib/sync/seed-synchronizer.js +0 -72
- package/dist/lib/sync/seed-synchronizer.js.map +0 -1
- package/dist/lib/sync/seed-synchronizer.test.d.ts +0 -2
- package/dist/lib/sync/seed-synchronizer.test.d.ts.map +0 -1
- package/dist/lib/sync/seed-synchronizer.test.js +0 -147
- package/dist/lib/sync/seed-synchronizer.test.js.map +0 -1
- package/presets/default/.claude/skills/einja-api-development/SKILL.md +0 -14
- package/presets/default/.claude/skills/einja-backend-architecture/SKILL.md +0 -18
- package/presets/default/.claude/skills/einja-coding-standards/SKILL.md +0 -132
- package/presets/default/.claude/skills/einja-coding-standards/references/import-conventions.md +0 -69
- package/presets/default/.claude/skills/einja-coding-standards/references/naming-conventions.md +0 -107
- package/presets/default/.claude/skills/einja-coding-standards/references/prohibited-patterns.md +0 -169
- package/presets/default/.claude/skills/einja-coding-standards/references/typescript-rules.md +0 -247
- package/presets/default/.claude/skills/einja-component-design/SKILL.md +0 -109
- package/presets/default/.claude/skills/einja-component-design/references/directory-structure.md +0 -117
- package/presets/default/.claude/skills/einja-component-design/references/props-patterns.md +0 -159
- package/presets/default/.claude/skills/einja-component-design/references/styling-guide.md +0 -122
- package/presets/default/.claude/skills/einja-frontend-development/SKILL.md +0 -14
- package/presets/default/docs/einja/instructions/task-vibe-kanban-loop.md +0 -565
package/presets/default/.envrc
CHANGED
|
@@ -23,6 +23,11 @@ MAIN_WORKTREE=$(get_main_worktree)
|
|
|
23
23
|
if [ -n "$MAIN_WORKTREE" ] && [ -f "$MAIN_WORKTREE/.env.personal" ]; then
|
|
24
24
|
dotenv_if_exists "$MAIN_WORKTREE/.env.personal"
|
|
25
25
|
fi
|
|
26
|
+
|
|
27
|
+
# Serena MCP サーバー自動起動
|
|
28
|
+
if [ -n "$MAIN_WORKTREE" ] && [ -f "$MAIN_WORKTREE/scripts/ensure-serena.sh" ]; then
|
|
29
|
+
source "$MAIN_WORKTREE/scripts/ensure-serena.sh" "$MAIN_WORKTREE"
|
|
30
|
+
fi
|
|
26
31
|
# @einja:managed:end
|
|
27
32
|
|
|
28
33
|
# @einja:seed:start id="project-env"
|
|
@@ -32,18 +32,8 @@
|
|
|
32
32
|
]
|
|
33
33
|
},
|
|
34
34
|
"serena": {
|
|
35
|
-
"type": "
|
|
36
|
-
"
|
|
37
|
-
"args": [
|
|
38
|
-
"--from",
|
|
39
|
-
"git+https://github.com/oraios/serena",
|
|
40
|
-
"serena",
|
|
41
|
-
"start-mcp-server",
|
|
42
|
-
"--context",
|
|
43
|
-
"claude-code",
|
|
44
|
-
"--open-web-dashboard",
|
|
45
|
-
"false"
|
|
46
|
-
]
|
|
35
|
+
"type": "http",
|
|
36
|
+
"url": "http://127.0.0.1:${SERENA_PORT:-9850}/mcp"
|
|
47
37
|
},
|
|
48
38
|
"github": {
|
|
49
39
|
"type": "http",
|
|
@@ -11,6 +11,15 @@
|
|
|
11
11
|
4. **直接実装の禁止**: あなたは絶対に直接実装を行わない。すべての作業はsubagentに委託し、可能な限り並行で呼び出す。サブエージェントの出力はユーザにも見える場所に出力すること
|
|
12
12
|
5. **実装品質の自己検証**: 複雑な変更では完了前に「よりエレガントな方法はないか」を自問する。ただし単純な修正には不要
|
|
13
13
|
|
|
14
|
+
## Agent Teams の使用制限
|
|
15
|
+
|
|
16
|
+
**Agent Teams(`CLAUDE_CODE_EXPERIMENTAL_AGENT_TEAMS`)はユーザーが明示的にチーム編成を指示した場合のみ使用すること。**
|
|
17
|
+
|
|
18
|
+
- 通常のタスクではサブエージェント(`Task`ツール)を使用する
|
|
19
|
+
- 「チームで」「複数agentで並列に」等の明示的な指示があった場合のみAgent Teamsを起動する
|
|
20
|
+
- チーム実行時は `einja-team-exec` Skillの手順に従う
|
|
21
|
+
- 判断に迷う場合はサブエージェントを使用する(デフォルト動作)
|
|
22
|
+
|
|
14
23
|
## サブエージェント委託ルール
|
|
15
24
|
|
|
16
25
|
#### カスタムサブエージェント(直接委託)
|
|
@@ -31,7 +40,9 @@
|
|
|
31
40
|
| `einja-task-commit` | コミット・プッシュ |
|
|
32
41
|
| `einja-conflict-resolver` | gitコンフリクト解消 |
|
|
33
42
|
| `einja-skill-creator` | Skill作成・更新 |
|
|
43
|
+
| `einja-skill-first` | 作業前のSkill作成必要性評価(Plan/spec-create時に自動起動) |
|
|
34
44
|
| `einja-infra-maintenance` | インフラ環境セットアップ・メンテナンス |
|
|
45
|
+
| `einja:issue-exec` | Issue全体の階層的並列実行(Manager→Director→Worker) |
|
|
35
46
|
| `einja:task-exec` | タスクグループ実行 |
|
|
36
47
|
| `einja:spec-create` | 仕様書作成 |
|
|
37
48
|
|
|
@@ -41,9 +52,16 @@
|
|
|
41
52
|
|
|
42
53
|
### 必須フロー
|
|
43
54
|
1. 問題・要件を調査・分析する
|
|
44
|
-
2. 修正計画を `docs/plans/`
|
|
45
|
-
3.
|
|
46
|
-
|
|
55
|
+
2. 修正計画を `docs/plans/` に作成する
|
|
56
|
+
3. `einja-skill-first` で「Skill を先に作るべきか」を評価する
|
|
57
|
+
- Plan mode中は `UserPromptSubmit` hookにより自動でリマインダーが注入される
|
|
58
|
+
- `.claude/skills/einja-skill-first/SKILL.md` を読み込んで評価を実施する
|
|
59
|
+
- 推奨判定 → AskUserQuestion でユーザーに提案
|
|
60
|
+
- 承認 → 計画の TODO-0 に Skill 作成を追加
|
|
61
|
+
- 不要判定 → そのまま次へ進む
|
|
62
|
+
- ※ スキップ基準に該当する場合は評価自体を省略
|
|
63
|
+
4. 計画をユーザーに提示し、**明示的な承認を得る**
|
|
64
|
+
5. 承認後、`docs/plans/todo-{plan名}.md` で進捗管理しながら実装を開始する(TODO-0 があれば Skill 作成から)
|
|
47
65
|
|
|
48
66
|
### 例外(承認不要)
|
|
49
67
|
- 読み取り専用操作(質問への回答、情報調査、コード調査)
|
|
@@ -109,7 +127,7 @@
|
|
|
109
127
|
|
|
110
128
|
Turborepoモノレポ構成(pnpm workspaces)。詳細が必要な場合は以下のSkillを参照:
|
|
111
129
|
- `einja-project-overview` - 構成、技術スタック、頻出コマンド
|
|
112
|
-
- `einja
|
|
130
|
+
- `docs/einja/steering/development/coding-standards.md` - コーディング規約、インポートパス規約
|
|
113
131
|
- `einja-infra-maintenance` - 開発環境セットアップ、サーバー管理
|
|
114
132
|
|
|
115
133
|
## マネージドディレクトリ(編集禁止)
|
|
@@ -189,4 +207,8 @@ Turborepoモノレポ構成(pnpm workspaces)。詳細が必要な場合は
|
|
|
189
207
|
- サブエージェントの「完了」報告のみで完了判定しない
|
|
190
208
|
- 検証をスキップして完了宣言しない
|
|
191
209
|
|
|
210
|
+
<!-- @einja:project-private:start id="claude-md-project" -->
|
|
211
|
+
<!-- プロジェクト固有の情報を記入 -->
|
|
212
|
+
<!-- @einja:project-private:end -->
|
|
213
|
+
|
|
192
214
|
|
|
@@ -159,7 +159,7 @@
|
|
|
159
159
|
|
|
160
160
|
### タスク階層(4階層)
|
|
161
161
|
- **Phase(フェーズ)**: 最上位単位(1, 2, 3...)
|
|
162
|
-
- **タスクグループ**:
|
|
162
|
+
- **タスクグループ**: PRの作成単位(1.1, 1.2...)、**チェックボックス付き**(`- [ ]`)、1-4時間
|
|
163
163
|
- **タスク**: 作業単位・コミット単位(1.1.1, 1.1.2...)、**チェックボックスなし**、15-60分
|
|
164
164
|
- **サブタスク**: タスク内の詳細作業項目、**箇条書き**(`-`)
|
|
165
165
|
|
|
@@ -599,11 +599,6 @@ gh secret set TURBO_TOKEN --body "new-token"
|
|
|
599
599
|
- [GitHub Actions - Encrypted secrets](https://docs.github.com/en/actions/security-guides/encrypted-secrets)
|
|
600
600
|
<!-- @einja:managed:end -->
|
|
601
601
|
|
|
602
|
-
|
|
603
|
-
|
|
604
|
-
<!-- @einja:
|
|
605
|
-
## プロジェクト固有の設定
|
|
606
|
-
|
|
607
|
-
<!-- このセクションはプロジェクト固有の内容を追記する場所です -->
|
|
608
|
-
<!-- einja syncで上書きされません -->
|
|
609
|
-
<!-- @einja:seed:end -->
|
|
602
|
+
<!-- @einja:project-private:start id="deployment-setup-project" -->
|
|
603
|
+
<!-- プロジェクト固有の情報を記入 -->
|
|
604
|
+
<!-- @einja:project-private:end -->
|
|
@@ -639,11 +639,6 @@ dotenvx run -f .env -f .env.local -- <command>
|
|
|
639
639
|
- **共有禁止**: 他の開発者とトークンを共有しないこと
|
|
640
640
|
<!-- @einja:managed:end -->
|
|
641
641
|
|
|
642
|
-
|
|
643
|
-
|
|
644
|
-
<!-- @einja:
|
|
645
|
-
## プロジェクト固有の設定
|
|
646
|
-
|
|
647
|
-
<!-- このセクションはプロジェクト固有の内容を追記する場所です -->
|
|
648
|
-
<!-- einja syncで上書きされません -->
|
|
649
|
-
<!-- @einja:seed:end -->
|
|
642
|
+
<!-- @einja:project-private:start id="environment-setup-project" -->
|
|
643
|
+
<!-- プロジェクト固有の情報を記入 -->
|
|
644
|
+
<!-- @einja:project-private:end -->
|
|
@@ -0,0 +1,276 @@
|
|
|
1
|
+
<!-- @einja:managed:start -->
|
|
2
|
+
# `einja:issue-exec` コマンド
|
|
3
|
+
|
|
4
|
+
## 概要
|
|
5
|
+
|
|
6
|
+
GitHub Issue のタスクを Manager → Director → Worker の3階層プロセスで並列実行する Claude Code カスタムコマンド。tmux セッション、git worktree、ステータスファイルで全プロセスを管理する。
|
|
7
|
+
|
|
8
|
+
**⚠️ 重要**: Vibe-Kanban(`pnpm task:loop`)は廃止され、`/einja:issue-exec` に移行しました。
|
|
9
|
+
|
|
10
|
+
---
|
|
11
|
+
|
|
12
|
+
## 使用方法
|
|
13
|
+
|
|
14
|
+
### コマンド実行
|
|
15
|
+
|
|
16
|
+
```bash
|
|
17
|
+
# 基本
|
|
18
|
+
/einja:issue-exec #123
|
|
19
|
+
|
|
20
|
+
# オプション指定
|
|
21
|
+
/einja:issue-exec #123 --merge-mode task-group-auto # タスクPR自動マージ
|
|
22
|
+
/einja:issue-exec #123 --merge-mode auto # 全自動
|
|
23
|
+
/einja:issue-exec #123 --max-phase 2 # Phase 2 まで
|
|
24
|
+
/einja:issue-exec #123 --base develop # ベースブランチ指定
|
|
25
|
+
/einja:issue-exec #123 --resume # セッション復旧
|
|
26
|
+
```
|
|
27
|
+
|
|
28
|
+
### 事前準備
|
|
29
|
+
|
|
30
|
+
- tmux がインストールされていること
|
|
31
|
+
- GitHub CLI(`gh`)がインストール・認証済みであること
|
|
32
|
+
- Docker が起動していること(必要な場合)
|
|
33
|
+
|
|
34
|
+
---
|
|
35
|
+
|
|
36
|
+
## アーキテクチャ
|
|
37
|
+
|
|
38
|
+
### 3階層プロセス
|
|
39
|
+
|
|
40
|
+
```
|
|
41
|
+
Manager (Claude Code: /einja:issue-exec)
|
|
42
|
+
│ メインリポ or Issue worktree
|
|
43
|
+
│
|
|
44
|
+
├─ tmux window → Director Phase1 (claude 対話モード)
|
|
45
|
+
│ │ Phase worktree: ~/.einja/worktrees/issue-123/phase1/
|
|
46
|
+
│ │
|
|
47
|
+
│ ├─ tmux window → Worker 1.1 (claude 対話モード)
|
|
48
|
+
│ │ Task worktree: ~/.einja/worktrees/issue-123/task-1.1/
|
|
49
|
+
│ │ → /einja:task-exec #123 1.1
|
|
50
|
+
│ │ ├─ サブエージェント: Task 1.1.1 実装(run_in_background)
|
|
51
|
+
│ │ ├─ サブエージェント: Task 1.1.2 実装(run_in_background)
|
|
52
|
+
│ │ └─ reviewer → QA → commit
|
|
53
|
+
│ │
|
|
54
|
+
│ ├─ tmux window → Worker 1.2 (claude 対話モード)
|
|
55
|
+
│ │ → /einja:task-exec #123 1.2
|
|
56
|
+
│ │
|
|
57
|
+
│ └─ (依存タスクグループは先行完了後に起動)
|
|
58
|
+
│
|
|
59
|
+
├─ tmux window → Director Phase2 (Phase1完了後 or 並列)
|
|
60
|
+
│ └─ ...
|
|
61
|
+
│
|
|
62
|
+
└─ 全Phase完了 → PR: issue/123 → main
|
|
63
|
+
```
|
|
64
|
+
|
|
65
|
+
### 各階層の責務
|
|
66
|
+
|
|
67
|
+
| 階層 | 責務 | 実行方式 |
|
|
68
|
+
|------|------|---------|
|
|
69
|
+
| **Manager** | Issue パース、ブランチ管理、worktree 管理、tmux 管理、Director 起動、Phase マージ、質問エスカレーション、エラー監視 | Claude Code カスタムコマンド |
|
|
70
|
+
| **Director** | Phase 内のタスクグループ管理、Worker 起動、並列制御、PR マージ検知、変更伝播、質問対応、worktree クリーンアップ | claude 対話モード(tmux window) |
|
|
71
|
+
| **Worker** | task-exec 実行(executer→reviewer→qa→commit)、Phase 変更取り込み、PR 作成、完了報告 | claude 対話モード(tmux window) |
|
|
72
|
+
|
|
73
|
+
### 各階層の通信方式
|
|
74
|
+
|
|
75
|
+
| 階層間 | 方式 | 理由 |
|
|
76
|
+
|--------|------|------|
|
|
77
|
+
| Manager → Director | tmux + ステータスファイル + 質問エスカレーション | 別 worktree が必要 |
|
|
78
|
+
| Director → Worker | tmux + ステータスファイル + 質問エスカレーション | 別 worktree が必要 |
|
|
79
|
+
| Worker 内部(タスク間) | サブエージェント(Task ツール) | 既存 task-exec フローを活用 |
|
|
80
|
+
|
|
81
|
+
---
|
|
82
|
+
|
|
83
|
+
## ブランチ & worktree 構成
|
|
84
|
+
|
|
85
|
+
### ブランチ階層
|
|
86
|
+
|
|
87
|
+
```
|
|
88
|
+
main (デフォルト)
|
|
89
|
+
└── issue/123 Manager管理
|
|
90
|
+
├── issue/123-phase1 Director1 worktree
|
|
91
|
+
│ ├── task/123-1.1 Worker1.1 worktree
|
|
92
|
+
│ ├── task/123-1.2 Worker1.2 worktree
|
|
93
|
+
│ └── task/123-1.3 Worker1.3 worktree(1.1完了後に作成)
|
|
94
|
+
└── issue/123-phase2 Director2 worktree
|
|
95
|
+
└── task/123-2.1 Worker2.1 worktree
|
|
96
|
+
```
|
|
97
|
+
|
|
98
|
+
### worktree 物理パス
|
|
99
|
+
|
|
100
|
+
```
|
|
101
|
+
~/.einja/worktrees/issue-123/
|
|
102
|
+
├── phase1/ ← Director1 cwd
|
|
103
|
+
├── task-1.1/ ← Worker1.1 cwd
|
|
104
|
+
├── task-1.2/ ← Worker1.2 cwd
|
|
105
|
+
└── phase2/ ← Director2 cwd
|
|
106
|
+
```
|
|
107
|
+
|
|
108
|
+
---
|
|
109
|
+
|
|
110
|
+
## マージモード
|
|
111
|
+
|
|
112
|
+
| モード | タスクPR (task→phase) | Phase PR (phase→issue) | 最終PR (issue→base) |
|
|
113
|
+
|---|---|---|---|
|
|
114
|
+
| `manual` | 人間マージ待ち | 人間マージ待ち | 人間マージ待ち |
|
|
115
|
+
| `task-group-auto` | CI通過後に自動マージ | 人間マージ待ち | 人間マージ待ち |
|
|
116
|
+
| `auto` | CI通過後に自動マージ | CI通過後に自動マージ | 人間マージ待ち(常に手動) |
|
|
117
|
+
|
|
118
|
+
---
|
|
119
|
+
|
|
120
|
+
## tmux セッション構成
|
|
121
|
+
|
|
122
|
+
```
|
|
123
|
+
tmux session: einja-123
|
|
124
|
+
window 0: Manager (メインプロセスのログ表示)
|
|
125
|
+
window 1: Director-Phase1 (claude 対話モード)
|
|
126
|
+
window 2: Worker-1.1 (claude 対話モード → /einja:task-exec #123 1.1)
|
|
127
|
+
window 3: Worker-1.2 (claude 対話モード → /einja:task-exec #123 1.2)
|
|
128
|
+
window 4: Director-Phase2 (claude 対話モード)
|
|
129
|
+
window 5: Worker-2.1 (claude 対話モード → /einja:task-exec #123 2.1)
|
|
130
|
+
```
|
|
131
|
+
|
|
132
|
+
ユーザーは `tmux attach -t einja-123` で全プロセスを監視可能。
|
|
133
|
+
|
|
134
|
+
---
|
|
135
|
+
|
|
136
|
+
## ステータスファイル
|
|
137
|
+
|
|
138
|
+
パス: `~/.einja/sessions/issue-123/`
|
|
139
|
+
|
|
140
|
+
```
|
|
141
|
+
session.json # セッション全体(Manager PID、開始時刻、マージモード等)
|
|
142
|
+
phase-1/
|
|
143
|
+
status.json # Phase状態 + Director PID
|
|
144
|
+
task-1.1.json # { status, prNumber, branch }
|
|
145
|
+
task-1.2.json
|
|
146
|
+
phase-2/
|
|
147
|
+
status.json
|
|
148
|
+
questions/
|
|
149
|
+
q-{uuid}.json # 質問ファイル(1ファイル1質問)
|
|
150
|
+
events.jsonl # JSON Lines 形式の追記型イベントログ
|
|
151
|
+
```
|
|
152
|
+
|
|
153
|
+
### ステータスファイル永続化
|
|
154
|
+
|
|
155
|
+
- `~/.einja/sessions/` に配置し、システム再起動後も `--resume` で復元可能
|
|
156
|
+
- 完了時に Manager が自動クリーンアップ
|
|
157
|
+
- `status.json` の更新は `flock` による排他制御を使用
|
|
158
|
+
- git push 対象外(純粋にローカル実行状態管理)
|
|
159
|
+
|
|
160
|
+
---
|
|
161
|
+
|
|
162
|
+
## 質問エスカレーション
|
|
163
|
+
|
|
164
|
+
### チェーン
|
|
165
|
+
|
|
166
|
+
```
|
|
167
|
+
Worker(task-exec 実行中に疑問発生)
|
|
168
|
+
↓ ステータスファイル(質問キュー)
|
|
169
|
+
Director(spec/design/issue で回答可能?)
|
|
170
|
+
├─ Yes → 回答をステータスファイルに書き込み
|
|
171
|
+
└─ No ↓ ステータスファイル(質問キュー)
|
|
172
|
+
Manager(Claude Code カスタムコマンド)
|
|
173
|
+
↓ AskUserQuestion で人間に質問
|
|
174
|
+
Human(回答入力)
|
|
175
|
+
↓ 回答をステータスファイルに書き込み → 逆順で伝播
|
|
176
|
+
```
|
|
177
|
+
|
|
178
|
+
### 質問ファイル形式
|
|
179
|
+
|
|
180
|
+
```json
|
|
181
|
+
{
|
|
182
|
+
"id": "q-001",
|
|
183
|
+
"from": "worker-1.1",
|
|
184
|
+
"question": "ユーザー認証にJWTとセッションのどちらを使うべきか?",
|
|
185
|
+
"context": "design.md にはどちらの記載もない",
|
|
186
|
+
"status": "pending",
|
|
187
|
+
"escalatedTo": null,
|
|
188
|
+
"answer": null,
|
|
189
|
+
"answeredBy": null
|
|
190
|
+
}
|
|
191
|
+
```
|
|
192
|
+
|
|
193
|
+
### 回答のドキュメント還元
|
|
194
|
+
|
|
195
|
+
回答のうちドキュメント未記載のものは適切なドキュメントに追記:
|
|
196
|
+
|
|
197
|
+
| 回答の種類 | 追記先 |
|
|
198
|
+
|-----------|--------|
|
|
199
|
+
| 要件・仕様に関する判断 | requirements.md |
|
|
200
|
+
| 技術的な設計判断 | design.md |
|
|
201
|
+
| プロジェクト横断の方針 | docs/einja/memory/decisions.md |
|
|
202
|
+
| 再利用可能なパターン | docs/einja/memory/patterns.md |
|
|
203
|
+
|
|
204
|
+
---
|
|
205
|
+
|
|
206
|
+
## タスク完了フロー
|
|
207
|
+
|
|
208
|
+
```
|
|
209
|
+
Worker-1.1 作業中
|
|
210
|
+
│
|
|
211
|
+
├─ 0. git rebase origin/issue/123-phase1(最新取り込み)
|
|
212
|
+
├─ 1. task-exec 完了 → task/123-1.1 に commit & push
|
|
213
|
+
├─ 2. CI 完了待機(gh run list ポーリング)
|
|
214
|
+
├─ 3. gh pr create --base issue/123-phase1 --head task/123-1.1
|
|
215
|
+
├─ 4. ステータスファイル: { status: "pr_created", pr: 456 }
|
|
216
|
+
└─ 5. claude プロセス終了
|
|
217
|
+
|
|
218
|
+
Director 検知(ステータスファイル + プロセス監視)
|
|
219
|
+
│
|
|
220
|
+
├─ manual モード: gh pr list --state merged ポーリング → マージ検知まで待機
|
|
221
|
+
├─ task-group-auto: gh pr merge --squash --auto 実行
|
|
222
|
+
├─ auto: CI通過確認後に gh pr merge --squash 実行
|
|
223
|
+
│
|
|
224
|
+
├─ マージ検知後:
|
|
225
|
+
│ ├─ 他 active Worker にステータスで sync_required 通知
|
|
226
|
+
│ ├─ タスク worktree 削除 + tmux window kill
|
|
227
|
+
│ ├─ GitHub Issue チェックボックス更新
|
|
228
|
+
│ └─ 依存タスク起動判定 → 新 Worker 起動
|
|
229
|
+
│
|
|
230
|
+
└─ Phase 全タスク完了 → ステータスで Manager に報告
|
|
231
|
+
|
|
232
|
+
Manager 検知
|
|
233
|
+
│
|
|
234
|
+
├─ Phase PR 作成: issue/123-phase1 → issue/123
|
|
235
|
+
├─ マージモードに応じた処理
|
|
236
|
+
├─ マージ後: Phase worktree 削除
|
|
237
|
+
├─ 他 active Phase に変更伝播
|
|
238
|
+
└─ 次 Phase 起動 or 全完了 → 最終 PR 作成
|
|
239
|
+
```
|
|
240
|
+
|
|
241
|
+
---
|
|
242
|
+
|
|
243
|
+
## エラーリカバリ
|
|
244
|
+
|
|
245
|
+
| 障害 | 検知 | リカバリ |
|
|
246
|
+
|---|---|---|
|
|
247
|
+
| Worker 異常終了(PR作成前) | tmux window 消失 + ステータス未更新 | リトライ(最大2回)→ 失敗時は Manager に報告 → 人間判断 |
|
|
248
|
+
| Worker 異常終了(PR作成済み) | tmux window 消失 + PR あり | スキップ(PR マージ待ちのまま継続) |
|
|
249
|
+
| Director 異常終了 | tmux window 消失 + ステータス未更新 | 各 Worker のステータスを確認 → 未完了 Worker のみ再実行 |
|
|
250
|
+
| Manager 異常終了 | ユーザー手動 | `--resume` でステータスファイルから復元 |
|
|
251
|
+
| rebase コンフリクト | git rebase 失敗 | conflict-resolver で自力解消 |
|
|
252
|
+
| CI 失敗 | gh run status | 修正 → 再push → 再CI待機 |
|
|
253
|
+
| CI 待機タイムアウト | 30分超過 | Manager に通知 → 人間判断 |
|
|
254
|
+
|
|
255
|
+
---
|
|
256
|
+
|
|
257
|
+
## `/einja:task-exec` との使い分け
|
|
258
|
+
|
|
259
|
+
| コマンド | 用途 | 対象 | 推奨シーン |
|
|
260
|
+
|---------|------|------|----------|
|
|
261
|
+
| **`/einja:issue-exec`** | Issue全体の並列実行 | 複数Phase・複数タスクグループ | 大規模機能実装 |
|
|
262
|
+
| **`/einja:task-exec`** | 単一タスクグループの実行 | 1つのタスクグループ | 品質重視、複雑な実装 |
|
|
263
|
+
|
|
264
|
+
---
|
|
265
|
+
|
|
266
|
+
## 関連ドキュメント
|
|
267
|
+
|
|
268
|
+
- [タスク実行ワークフロー](./task-execute.md)
|
|
269
|
+
- [タスク管理ガイドライン](../steering/task-management.md)
|
|
270
|
+
- [仕様書作成ワークフロー](./einja:spec-create.md)
|
|
271
|
+
- [ブランチ運用戦略](../steering/branch-strategy.md)
|
|
272
|
+
<!-- @einja:managed:end -->
|
|
273
|
+
|
|
274
|
+
<!-- @einja:project-private:start id="issue-exec-workflow-project" -->
|
|
275
|
+
<!-- プロジェクト固有の情報を記入 -->
|
|
276
|
+
<!-- @einja:project-private:end -->
|
|
@@ -530,7 +530,7 @@ pnpm build
|
|
|
530
530
|
環境構築が完了したら、以下のドキュメントも参照してください:
|
|
531
531
|
|
|
532
532
|
- **[タスク実行ガイド](./task-execute.md)**: /task-execコマンドの使用方法
|
|
533
|
-
- **[コーディング規約](
|
|
533
|
+
- **[コーディング規約](../steering/development/coding-standards.md)**: コードスタイルと規約
|
|
534
534
|
- **[テストガイドライン](../einja/steering/development/testing-strategy.md)**: Vitestを使用したテスト戦略
|
|
535
535
|
|
|
536
536
|
## 質問・サポート
|
|
@@ -626,13 +626,75 @@ for cmd in gh vercel neonctl dotenvx; do
|
|
|
626
626
|
command -v $cmd >/dev/null 2>&1 && echo "✅ $cmd: $(command -v $cmd)" || echo "❌ $cmd: 未インストール"
|
|
627
627
|
done
|
|
628
628
|
```
|
|
629
|
-
<!-- @einja:managed:end -->
|
|
630
629
|
|
|
631
|
-
|
|
630
|
+
### 7. MCP Server (Serena)
|
|
631
|
+
|
|
632
|
+
Serena MCPサーバーは **1プロジェクト1インスタンス** で共有され、worktree間でも再利用されます。
|
|
633
|
+
|
|
634
|
+
#### 自動起動の仕組み
|
|
635
|
+
|
|
636
|
+
```
|
|
637
|
+
cd プロジェクト → direnv → ensure-serena.sh → Serena起動 → .mcp.json(http)で接続
|
|
638
|
+
```
|
|
639
|
+
|
|
640
|
+
1. `direnv` が `.envrc` を読み込む
|
|
641
|
+
2. `.envrc` が `scripts/ensure-serena.sh` を `source` する
|
|
642
|
+
3. スクリプトが `.serena-port` を確認し、必要に応じて起動
|
|
643
|
+
4. `SERENA_PORT` 環境変数がエクスポートされる
|
|
644
|
+
5. `.mcp.json` の `http://127.0.0.1:${SERENA_PORT:-9850}/mcp` で接続
|
|
645
|
+
|
|
646
|
+
#### `.serena-port` ファイル仕様
|
|
647
|
+
|
|
648
|
+
プロジェクトルートに自動生成される管理ファイル(`.gitignore` 対象)。
|
|
649
|
+
|
|
650
|
+
- **形式**: `PORT PID`(スペース区切り、例: `9850 12345`)
|
|
651
|
+
- **PIDベース所有権管理**: `kill -0 PID` でプロセス生存を確認
|
|
652
|
+
- PID生存 → 再利用(ポートをエクスポートして終了)
|
|
653
|
+
- PID死亡 → ファイル削除 → 新規起動
|
|
654
|
+
|
|
655
|
+
> **なぜcurlではなくPIDか**: MCP streamable-http の `/mcp` はPOST専用。GETの `curl -sf` は405を返し「未起動」と誤判定するため、PIDチェックでプロトコル非依存の判定を行う。
|
|
656
|
+
|
|
657
|
+
#### ポート自動解決
|
|
658
|
+
|
|
659
|
+
- デフォルト: `9850`
|
|
660
|
+
- ポート衝突時: `+1` で10回まで試行(9850〜9859)
|
|
661
|
+
- 全ポート使用中: 警告メッセージを出力(direnvはブロックしない)
|
|
632
662
|
|
|
633
|
-
|
|
634
|
-
|
|
663
|
+
#### 手動操作
|
|
664
|
+
|
|
665
|
+
```bash
|
|
666
|
+
# 状態確認
|
|
667
|
+
cat .serena-port # PORT PID を表示
|
|
668
|
+
|
|
669
|
+
# 停止
|
|
670
|
+
./scripts/stop-serena.sh
|
|
671
|
+
|
|
672
|
+
# 再起動
|
|
673
|
+
./scripts/stop-serena.sh && direnv reload
|
|
674
|
+
|
|
675
|
+
# 再起動(direnv経由)
|
|
676
|
+
direnv reload
|
|
677
|
+
```
|
|
678
|
+
|
|
679
|
+
#### トラブルシューティング
|
|
680
|
+
|
|
681
|
+
| 症状 | 原因 | 対処 |
|
|
682
|
+
|------|------|------|
|
|
683
|
+
| Serena接続エラー | プロセスが停止している | `direnv reload` で再起動 |
|
|
684
|
+
| ポートが意図と違う | 別プロセスが使用中 | `lsof -i :9850` で確認、不要なら停止 |
|
|
685
|
+
| ゾンビ `.serena-port` | プロセスが異常終了 | `rm .serena-port && direnv reload` |
|
|
686
|
+
| uvx not found | uv未インストール | `curl -LsSf https://astral.sh/uv/install.sh \| sh` |
|
|
687
|
+
|
|
688
|
+
#### `.env.personal` でのオーバーライド
|
|
689
|
+
|
|
690
|
+
デフォルトポートを変更したい場合:
|
|
691
|
+
|
|
692
|
+
```bash
|
|
693
|
+
# .env.personal に追記
|
|
694
|
+
SERENA_PORT=9851
|
|
695
|
+
```
|
|
696
|
+
<!-- @einja:managed:end -->
|
|
635
697
|
|
|
636
|
-
<!--
|
|
637
|
-
<!--
|
|
638
|
-
<!-- @einja:
|
|
698
|
+
<!-- @einja:project-private:start id="local-server-environment-and-worktree-project" -->
|
|
699
|
+
<!-- プロジェクト固有の情報を記入 -->
|
|
700
|
+
<!-- @einja:project-private:end -->
|
|
@@ -595,11 +595,6 @@ neonctl branches delete $BRANCH_ID --project-id $PROJECT_ID
|
|
|
595
595
|
- [neonctl CLI公式ドキュメント](https://neon.tech/docs/reference/neon-cli)
|
|
596
596
|
<!-- @einja:managed:end -->
|
|
597
597
|
|
|
598
|
-
|
|
599
|
-
|
|
600
|
-
<!-- @einja:
|
|
601
|
-
## プロジェクト固有の設定
|
|
602
|
-
|
|
603
|
-
<!-- このセクションはプロジェクト固有の内容を追記する場合はここに記載 -->
|
|
604
|
-
<!-- einja syncで上書きされません -->
|
|
605
|
-
<!-- @einja:seed:end -->
|
|
598
|
+
<!-- @einja:project-private:start id="neon-cli-reference-project" -->
|
|
599
|
+
<!-- プロジェクト固有の情報を記入 -->
|
|
600
|
+
<!-- @einja:project-private:end -->
|
|
@@ -316,21 +316,21 @@ Step 4: GitHub Issueにタスク一覧を記述
|
|
|
316
316
|
|
|
317
317
|
---
|
|
318
318
|
|
|
319
|
-
### 3.
|
|
319
|
+
### 3. `/einja:issue-exec` コマンド
|
|
320
320
|
|
|
321
|
-
**役割**:
|
|
321
|
+
**役割**: Issue全体のタスクをManager→Director→Workerの3階層で並列実行
|
|
322
322
|
|
|
323
323
|
詳細については、専用ドキュメントを参照してください:
|
|
324
|
-
**📖 [
|
|
324
|
+
**📖 [Issue実行ワークフローガイド](./issue-exec-workflow.md)**
|
|
325
325
|
|
|
326
326
|
#### `/einja:task-exec`との使い分け
|
|
327
327
|
|
|
328
|
-
| コマンド | 用途 |
|
|
329
|
-
|
|
330
|
-
| **`/einja:
|
|
331
|
-
|
|
|
328
|
+
| コマンド | 用途 | 対象 | 推奨シーン |
|
|
329
|
+
|---------|------|------|----------|
|
|
330
|
+
| **`/einja:issue-exec`** | Issue全体の並列実行 | 複数Phase・複数タスクグループ | 大規模機能実装 |
|
|
331
|
+
| **`/einja:task-exec`** | 単一タスクグループの確実な完了 | 1つのタスクグループ | 複雑な実装、品質重視 |
|
|
332
332
|
|
|
333
|
-
**詳細な使い分け基準**: [
|
|
333
|
+
**詳細な使い分け基準**: [issue-exec-workflow.md](./issue-exec-workflow.md#task-execとの使い分け)
|
|
334
334
|
|
|
335
335
|
---
|
|
336
336
|
|
|
@@ -452,7 +452,7 @@ stateDiagram-v2
|
|
|
452
452
|
[*] --> 未着手: タスク作成
|
|
453
453
|
|
|
454
454
|
未着手 --> 着手中_TaskExec: /einja:task-exec実行
|
|
455
|
-
未着手 -->
|
|
455
|
+
未着手 --> IssueExec開始: /einja:issue-exec実行
|
|
456
456
|
|
|
457
457
|
着手中_TaskExec --> 実装中: 実装フェーズ
|
|
458
458
|
実装中 --> レビュー中: 実装完了
|
|
@@ -461,16 +461,16 @@ stateDiagram-v2
|
|
|
461
461
|
QA中 --> 実装中: テスト失敗<br/>(ループバック)
|
|
462
462
|
QA中 --> 完了_TaskExec: 全テスト合格
|
|
463
463
|
|
|
464
|
-
|
|
465
|
-
|
|
466
|
-
実行中
|
|
467
|
-
|
|
464
|
+
IssueExec開始 --> Worker割当: Manager/Directorが管理
|
|
465
|
+
Worker割当 --> 実行中_IssueExec: Worker起動
|
|
466
|
+
実行中_IssueExec --> PR作成: task-exec完了
|
|
467
|
+
PR作成 --> 完了_IssueExec: PRマージ
|
|
468
468
|
|
|
469
|
-
|
|
470
|
-
|
|
469
|
+
実行中_IssueExec --> 失敗: 実行失敗
|
|
470
|
+
失敗 --> Worker割当: リトライ(最大2回)
|
|
471
471
|
|
|
472
472
|
完了_TaskExec --> [*]
|
|
473
|
-
完了
|
|
473
|
+
完了_IssueExec --> [*]
|
|
474
474
|
|
|
475
475
|
note right of 未着手
|
|
476
476
|
状態: [ ]
|
|
@@ -482,16 +482,16 @@ stateDiagram-v2
|
|
|
482
482
|
状態: [🔄]
|
|
483
483
|
end note
|
|
484
484
|
|
|
485
|
-
note right of
|
|
486
|
-
|
|
487
|
-
|
|
485
|
+
note right of Worker割当
|
|
486
|
+
tmux + worktree で
|
|
487
|
+
並列実行
|
|
488
488
|
end note
|
|
489
489
|
|
|
490
490
|
note right of 完了_TaskExec
|
|
491
491
|
状態: [x]
|
|
492
492
|
end note
|
|
493
493
|
|
|
494
|
-
note right of 完了
|
|
494
|
+
note right of 完了_IssueExec
|
|
495
495
|
状態: [x]
|
|
496
496
|
end note
|
|
497
497
|
```
|
|
@@ -639,11 +639,6 @@ sequenceDiagram
|
|
|
639
639
|
開発を始める際は、まず`/einja:spec-create`で仕様書を作成し、その後`/einja:task-exec`でタスクグループを順次実行していきます。
|
|
640
640
|
<!-- @einja:managed:end -->
|
|
641
641
|
|
|
642
|
-
|
|
643
|
-
|
|
644
|
-
<!-- @einja:
|
|
645
|
-
## プロジェクト固有の設定
|
|
646
|
-
|
|
647
|
-
<!-- このセクションはプロジェクト固有の内容を追記する場所です -->
|
|
648
|
-
<!-- einja syncで上書きされません -->
|
|
649
|
-
<!-- @einja:seed:end -->
|
|
642
|
+
<!-- @einja:project-private:start id="task-execute-project" -->
|
|
643
|
+
<!-- プロジェクト固有の情報を記入 -->
|
|
644
|
+
<!-- @einja:project-private:end -->
|
|
@@ -463,6 +463,7 @@ jobs:
|
|
|
463
463
|
| `vercel deploy` | `--yes` | デプロイ確認をスキップ |
|
|
464
464
|
| `vercel env add` | パイプ入力 | `echo "value" \| vercel env add NAME <environment>` (environment: production/preview/development 必須) |
|
|
465
465
|
| `vercel env rm` | `--yes` | 削除確認をスキップ |
|
|
466
|
+
| `vercel deploy` | `--env KEY=VALUE` | `vercel deploy --prebuilt --env KEY1=VAL1 --env KEY2=VAL2` (CI/CDでは`--env`で全encrypted変数を実行時注入) |
|
|
466
467
|
|
|
467
468
|
### トークン認証
|
|
468
469
|
|
|
@@ -495,10 +496,21 @@ curl -s -H "Authorization: Bearer $VERCEL_TOKEN" \
|
|
|
495
496
|
|
|
496
497
|
## 環境変数同期自動化
|
|
497
498
|
|
|
499
|
+
### CI/CDでの自動同期
|
|
500
|
+
|
|
501
|
+
GitHub Actions (`deploy-stable-branches.yml`) が環境変数を自動管理します:
|
|
502
|
+
|
|
503
|
+
| ブランチ | 方式 | 説明 |
|
|
504
|
+
|---------|------|------|
|
|
505
|
+
| main | `vercel env add` + `vercel deploy --env` | Vercel環境変数ストアに同期 + 実行時注入 |
|
|
506
|
+
| develop/staging | `vercel deploy --env` のみ | 実行時注入のみ(`vercel env add`は使用しない) |
|
|
507
|
+
| PR Preview | `vercel deploy --env` のみ | 実行時注入のみ(並行PR競合防止) |
|
|
508
|
+
|
|
509
|
+
**設計意図**: `vercel env add`によるVercel環境変数ストアへの書き込みはmainブランチのみ。develop/staging/PRは`vercel deploy --env`で環境変数を実行時注入し、並行デプロイ間の競合を防止する。
|
|
510
|
+
|
|
498
511
|
### 初回セットアップ時の手動同期
|
|
499
512
|
|
|
500
|
-
**注意**:
|
|
501
|
-
以下の手順は**初回セットアップ時のみ**手動で実行してください。
|
|
513
|
+
**注意**: 以下の手順は**初回セットアップ時のみ**手動で実行してください。
|
|
502
514
|
|
|
503
515
|
### .env.* からVercelへの環境変数同期
|
|
504
516
|
|
|
@@ -521,11 +533,6 @@ Neon CLIの詳細は [Neon CLI リファレンス](./neon-cli-reference.md) を
|
|
|
521
533
|
|
|
522
534
|
<!-- @einja:managed:end -->
|
|
523
535
|
|
|
524
|
-
|
|
525
|
-
|
|
526
|
-
<!-- @einja:
|
|
527
|
-
## プロジェクト固有の設定
|
|
528
|
-
|
|
529
|
-
<!-- このセクションはプロジェクト固有の内容を追記する場所です -->
|
|
530
|
-
<!-- einja syncで上書きされません -->
|
|
531
|
-
<!-- @einja:seed:end -->
|
|
536
|
+
<!-- @einja:project-private:start id="vercel-cli-reference-project" -->
|
|
537
|
+
<!-- プロジェクト固有の情報を記入 -->
|
|
538
|
+
<!-- @einja:project-private:end -->
|