create-einja-app 0.3.1 → 0.3.3
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 +34 -1
- package/dist/cli.js +92 -80
- package/dist/cli.js.map +1 -1
- package/package.json +1 -1
- package/templates/default/.changeset/config.json +11 -0
- package/templates/default/.claude/hooks/einja/plan-mode-skill-loader.sh +27 -0
- package/templates/default/.claude/settings.json +29 -1
- package/templates/default/.claude/skills/cli-package-specs/SKILL.md +247 -0
- package/templates/default/.einja-sync.json +1 -1
- package/templates/default/.env.personal.example +6 -2
- package/templates/default/.envrc +5 -0
- package/templates/default/.github/release.yml +10 -0
- package/templates/default/.github/workflows/changeset-status.yml +60 -0
- package/templates/default/.github/workflows/deploy-pr-preview.yml +23 -24
- package/templates/default/.github/workflows/deploy-stable-branches.yml +336 -100
- package/templates/default/.mcp.json +2 -12
- package/templates/default/.serena/project.yml +7 -0
- package/templates/default/CLAUDE.md +61 -10
- package/templates/default/README.md +22 -10
- package/templates/default/apps/admin/package.json +1 -1
- package/templates/default/apps/admin/tsconfig.json +2 -1
- package/templates/default/apps/web/package.json +1 -1
- package/templates/default/apps/web/tsconfig.json +2 -1
- package/templates/default/docs/plans/.gitkeep +0 -0
- package/templates/default/docs/plans/agile-munching-knuth.md +161 -0
- package/templates/default/docs/plans/agile-riding-nova.md +158 -0
- package/templates/default/docs/plans/agile-wibbling-dusk.md +91 -0
- package/templates/default/docs/plans/ancient-greeting-flamingo-agent-a87e67c.md +221 -0
- package/templates/default/docs/plans/ancient-greeting-flamingo-agent-ab73a1c.md +107 -0
- package/templates/default/docs/plans/ancient-greeting-flamingo.md +120 -0
- package/templates/default/docs/plans/ancient-watching-otter.md +152 -0
- package/templates/default/docs/plans/bright-sauteeing-bumblebee.md +30 -0
- package/templates/default/docs/plans/bright-stargazing-dawn.md +87 -0
- package/templates/default/docs/plans/calm-stirring-bonbon.md +196 -0
- package/templates/default/docs/plans/calm-watching-widget.md +111 -0
- package/templates/default/docs/plans/cheerful-wiggling-ullman.md +164 -0
- package/templates/default/docs/plans/compiled-humming-cherny.md +94 -0
- package/templates/default/docs/plans/composed-doodling-mountain.md +362 -0
- package/templates/default/docs/plans/dapper-launching-lynx.md +81 -0
- package/templates/default/docs/plans/dazzling-foraging-cascade.md +32 -0
- package/templates/default/docs/plans/effervescent-munching-kite-agent-ac08baf.md +672 -0
- package/templates/default/docs/plans/effervescent-munching-kite-agent-aecc373.md +442 -0
- package/templates/default/docs/plans/effervescent-munching-kite.md +263 -0
- package/templates/default/docs/plans/enchanted-wiggling-ember-agent-a5befd57d0ca4c7c7.md +177 -0
- package/templates/default/docs/plans/enchanted-wiggling-ember.md +170 -0
- package/templates/default/docs/plans/federated-questing-kahan.md +47 -0
- package/templates/default/docs/plans/fix-orphan-cleaner-review.md +25 -0
- package/templates/default/docs/plans/fix-sync-template-variables.md +162 -0
- package/templates/default/docs/plans/flickering-pondering-hearth.md +26 -0
- package/templates/default/docs/plans/fluttering-snuggling-sprout.md +172 -0
- package/templates/default/docs/plans/generic-sleeping-snowglobe-agent-a41d8da.md +179 -0
- package/templates/default/docs/plans/generic-sleeping-snowglobe.md +108 -0
- package/templates/default/docs/plans/generic-snuggling-pudding.md +57 -0
- package/templates/default/docs/plans/glimmering-giggling-sedgewick.md +126 -0
- package/templates/default/docs/plans/glittery-swimming-bachman.md +78 -0
- package/templates/default/docs/plans/happy-watching-toast.md +56 -0
- package/templates/default/docs/plans/harmonic-strolling-nebula.md +210 -0
- package/templates/default/docs/plans/idempotent-wiggling-cherny.md +122 -0
- package/templates/default/docs/plans/import-alias-refactor.md +75 -0
- package/templates/default/docs/plans/lazy-percolating-sloth-agent-abda679.md +346 -0
- package/templates/default/docs/plans/lazy-percolating-sloth.md +151 -0
- package/templates/default/docs/plans/linked-greeting-llama-agent-a7a6e5b.md +345 -0
- package/templates/default/docs/plans/linked-greeting-llama.md +467 -0
- package/templates/default/docs/plans/lovely-bubbling-rose.md +80 -0
- package/templates/default/docs/plans/optimized-watching-sprout.md +149 -0
- package/templates/default/docs/plans/peaceful-beaming-toast-agent-a292da6.md +288 -0
- package/templates/default/docs/plans/peaceful-beaming-toast-agent-a819699.md +366 -0
- package/templates/default/docs/plans/peaceful-beaming-toast-agent-ac11de2.md +474 -0
- package/templates/default/docs/plans/peaceful-beaming-toast.md +345 -0
- package/templates/default/docs/plans/purrfect-spinning-hickey-agent-ae6194c.md +300 -0
- package/templates/default/docs/plans/purrfect-spinning-hickey-agent-ae6900e.md +444 -0
- package/templates/default/docs/plans/purrfect-spinning-hickey.md +361 -0
- package/templates/default/docs/plans/recursive-fluttering-mitten.md +176 -0
- package/templates/default/docs/plans/recursive-kindling-lemon-agent-a42199e.md +186 -0
- package/templates/default/docs/plans/recursive-kindling-lemon.md +36 -0
- package/templates/default/docs/plans/seed-migration-tests.md +47 -0
- package/templates/default/docs/plans/sprightly-leaping-manatee.md +224 -0
- package/templates/default/docs/plans/stateful-wishing-lerdorf.md +161 -0
- package/templates/default/docs/plans/streamed-purring-wreath.md +40 -0
- package/templates/default/docs/plans/synthetic-percolating-pearl.md +101 -0
- package/templates/default/docs/plans/todo-create-einja-app-ux-fix.md +16 -0
- package/templates/default/docs/plans/todo-direnv-hang-fix.md +12 -0
- package/templates/default/docs/plans/todo-fix-sync-template-variables.md +21 -0
- package/templates/default/docs/plans/todo-github-actions-release-workflow.md +34 -0
- package/templates/default/docs/plans/todo-issue-spec-rename.md +24 -0
- package/templates/default/docs/plans/todo-phase4-marker-update.md +39 -0
- package/templates/default/docs/plans/todo-skill-creator-sync.md +23 -0
- package/templates/default/docs/plans/todo-skill-creator-upgrade.md +18 -0
- package/templates/default/docs/plans/typed-snuggling-parnas-agent-a6f6391.md +476 -0
- package/templates/default/docs/plans/typed-snuggling-parnas-agent-adb678b.md +144 -0
- package/templates/default/docs/plans/typed-snuggling-parnas.md +84 -0
- package/templates/default/docs/plans/velvety-chasing-spark.md +28 -0
- package/templates/default/docs/plans/warm-hopping-lighthouse-agent-a30aa4f.md +534 -0
- package/templates/default/docs/plans/warm-hopping-lighthouse-agent-a57a278.md +508 -0
- package/templates/default/docs/plans/warm-hopping-lighthouse-agent-a90b809.md +421 -0
- package/templates/default/docs/plans/warm-hopping-lighthouse.md +199 -0
- package/templates/default/docs/plans/wondrous-strolling-crystal-agent-a0615fc.md +215 -0
- package/templates/default/docs/plans/wondrous-strolling-crystal.md +182 -0
- package/templates/default/docs/plans/zesty-roaming-steele.md +74 -0
- package/templates/default/docs/verification-test.md +2 -0
- package/templates/default/gitignore +9 -1
- package/templates/default/package.json +6 -2
- package/templates/default/packages/admin-ui/package.json +1 -1
- package/templates/default/packages/server-core/tsconfig.json +6 -1
- package/templates/default/pnpm-lock.yaml +823 -57
- package/templates/default/scripts/ensure-serena.sh +75 -0
- package/templates/default/scripts/env-rotate-secrets.ts +66 -6
- package/templates/default/scripts/init-github.ts +363 -0
- package/templates/default/scripts/init.sh +11 -5
- package/templates/default/scripts/lib/worktree-config.ts +64 -0
- package/templates/default/scripts/setup-dev.ts +16 -1
- package/templates/default/scripts/stop-serena.sh +25 -0
- package/templates/default/scripts/worktree/dev.ts +2 -2
- package/templates/default/.claude/skills/create-einja-app-release/SKILL.md +0 -186
- package/templates/default/.claude/skills/dev-cli-release/SKILL.md +0 -173
- package/templates/default/.cursor/commands/spec-create.md +0 -227
- package/templates/default/.cursor/commands/task-exec.md +0 -287
- package/templates/default/.cursor/commands/update-docs-by-task-specs.md +0 -448
- /package/templates/default/scripts/{cli-template-update.ts → _cli-template-update.ts} +0 -0
- /package/templates/default/scripts/{template-update.ts → _template-update.ts} +0 -0
|
@@ -10,6 +10,16 @@
|
|
|
10
10
|
3. **影響範囲の最小化**: 変更は必要な箇所のみ。関係ないコードに触れない
|
|
11
11
|
4. **直接実装の禁止**: あなたは絶対に直接実装を行わない。すべての作業はsubagentに委託し、可能な限り並行で呼び出す。サブエージェントの出力はユーザにも見える場所に出力すること
|
|
12
12
|
5. **実装品質の自己検証**: 複雑な変更では完了前に「よりエレガントな方法はないか」を自問する。ただし単純な修正には不要
|
|
13
|
+
6. **Skill-First原則**: 実装着手前に `einja-skill-first` Skillで「Skillを先に作るべきか」を評価する。反復性のある作業はSkill化してから本作業を開始する
|
|
14
|
+
|
|
15
|
+
## Agent Teams の使用制限
|
|
16
|
+
|
|
17
|
+
**Agent Teams(`CLAUDE_CODE_EXPERIMENTAL_AGENT_TEAMS`)はユーザーが明示的にチーム編成を指示した場合のみ使用すること。**
|
|
18
|
+
|
|
19
|
+
- 通常のタスクではサブエージェント(`Task`ツール)を使用する
|
|
20
|
+
- 「チームで」「複数agentで並列に」等の明示的な指示があった場合のみAgent Teamsを起動する
|
|
21
|
+
- チーム実行時は `einja-team-exec` Skillの手順に従う
|
|
22
|
+
- 判断に迷う場合はサブエージェントを使用する(デフォルト動作)
|
|
13
23
|
|
|
14
24
|
## サブエージェント委託ルール
|
|
15
25
|
|
|
@@ -17,7 +27,6 @@
|
|
|
17
27
|
|
|
18
28
|
| 作業 | 委託先 |
|
|
19
29
|
|------|--------|
|
|
20
|
-
| コンフリクト解消 | `conflict-resolver` |
|
|
21
30
|
| Codex作業(レビュー・実装支援等) | `codex-agent` |
|
|
22
31
|
| フロントエンド アーキテクチャ設計 | `frontend-architect` |
|
|
23
32
|
| フロントエンド デザイン実装 | `design-engineer` |
|
|
@@ -31,9 +40,21 @@
|
|
|
31
40
|
| `einja-task-commit` | コミット・プッシュ |
|
|
32
41
|
| `einja-conflict-resolver` | gitコンフリクト解消 |
|
|
33
42
|
| `einja-skill-creator` | Skill作成・更新 |
|
|
43
|
+
| `einja-skill-first` | 作業前のSkill作成必要性評価(Plan/einja-issue-spec-create時に自動起動) |
|
|
34
44
|
| `einja-infra-maintenance` | インフラ環境セットアップ・メンテナンス |
|
|
35
|
-
| `einja:
|
|
36
|
-
| `einja
|
|
45
|
+
| `einja:issue-exec` | Issue全体の階層的並列実行(Command) |
|
|
46
|
+
| `einja-task-exec` | タスクグループ実行(Skill tool) |
|
|
47
|
+
| `einja-issue-spec-create` | Issue仕様書作成(Skill tool) |
|
|
48
|
+
|
|
49
|
+
#### サブエージェント質問プロトコル(PENDING_QUESTIONS)
|
|
50
|
+
|
|
51
|
+
サブエージェントではAskUserQuestionが動作しないため、質問が必要な場合は `## PENDING_QUESTIONS` 形式で返却される。
|
|
52
|
+
|
|
53
|
+
サブエージェント出力に `## PENDING_QUESTIONS` が含まれている場合:
|
|
54
|
+
1. 質問内容を解析し、AskUserQuestionでユーザーに確認する
|
|
55
|
+
2. Agent toolの `resume` パラメータで同じサブエージェントを再開(コンテキスト維持)
|
|
56
|
+
3. プロンプトにユーザーの回答を含めて渡す(例: `ユーザーの回答: Q1→A、Q2→B。これを踏まえて作業を継続してください。`)
|
|
57
|
+
4. 再度PENDING_QUESTIONSがある場合は同様に処理(最大2回まで)
|
|
37
58
|
|
|
38
59
|
## コード変更時の動作方針
|
|
39
60
|
|
|
@@ -41,9 +62,16 @@
|
|
|
41
62
|
|
|
42
63
|
### 必須フロー
|
|
43
64
|
1. 問題・要件を調査・分析する
|
|
44
|
-
2. 修正計画を `docs/plans/`
|
|
45
|
-
3.
|
|
46
|
-
|
|
65
|
+
2. 修正計画を `docs/plans/` に作成する
|
|
66
|
+
3. `einja-skill-first` で「Skill を先に作るべきか」を評価する
|
|
67
|
+
- Plan mode中は `UserPromptSubmit` hookにより自動でリマインダーが注入される
|
|
68
|
+
- `.claude/skills/einja-skill-first/SKILL.md` を読み込んで評価を実施する
|
|
69
|
+
- 推奨判定 → AskUserQuestion でユーザーに提案
|
|
70
|
+
- 承認 → 計画の TODO-0 に Skill 作成を追加
|
|
71
|
+
- 不要判定 → そのまま次へ進む
|
|
72
|
+
- ※ スキップ基準に該当する場合は評価自体を省略
|
|
73
|
+
4. 計画をユーザーに提示し、**明示的な承認を得る**
|
|
74
|
+
5. 承認後、`docs/plans/todo-{plan名}.md` で進捗管理しながら実装を開始する(TODO-0 があれば Skill 作成から)
|
|
47
75
|
|
|
48
76
|
### 例外(承認不要)
|
|
49
77
|
- 読み取り専用操作(質問への回答、情報調査、コード調査)
|
|
@@ -109,7 +137,7 @@
|
|
|
109
137
|
|
|
110
138
|
Turborepoモノレポ構成(pnpm workspaces)。詳細が必要な場合は以下のSkillを参照:
|
|
111
139
|
- `einja-project-overview` - 構成、技術スタック、頻出コマンド
|
|
112
|
-
- `einja
|
|
140
|
+
- `docs/einja/steering/development/coding-standards.md` - コーディング規約、インポートパス規約
|
|
113
141
|
- `einja-infra-maintenance` - 開発環境セットアップ、サーバー管理
|
|
114
142
|
|
|
115
143
|
## マネージドディレクトリ(編集禁止)
|
|
@@ -147,6 +175,11 @@ Turborepoモノレポ構成(pnpm workspaces)。詳細が必要な場合は
|
|
|
147
175
|
- 番号付きリスト: 詳細説明が必要な場合
|
|
148
176
|
- 推奨オプションには `(推奨)` と理由を付記
|
|
149
177
|
|
|
178
|
+
### 選択肢の記述ルール
|
|
179
|
+
- 各選択肢の `description` に**必ず詳細説明・注意点・補足**を記載する
|
|
180
|
+
- トレードオフ、影響範囲、前提条件など判断に必要な情報を含める
|
|
181
|
+
- ラベルだけで選択させない。ユーザーが十分な情報に基づいて判断できるようにする
|
|
182
|
+
|
|
150
183
|
## 報告ルール
|
|
151
184
|
|
|
152
185
|
### 出力形式
|
|
@@ -189,6 +222,10 @@ Turborepoモノレポ構成(pnpm workspaces)。詳細が必要な場合は
|
|
|
189
222
|
- サブエージェントの「完了」報告のみで完了判定しない
|
|
190
223
|
- 検証をスキップして完了宣言しない
|
|
191
224
|
|
|
225
|
+
<!-- @einja:project-private:start id="claude-md-project" -->
|
|
226
|
+
<!-- プロジェクト固有の情報を記入 -->
|
|
227
|
+
<!-- @einja:project-private:end -->
|
|
228
|
+
|
|
192
229
|
<!-- @einja:excluded:start -->
|
|
193
230
|
## このリポジトリ限定の設定
|
|
194
231
|
|
|
@@ -200,9 +237,9 @@ Turborepoモノレポ構成(pnpm workspaces)。詳細が必要な場合は
|
|
|
200
237
|
|
|
201
238
|
| キーワード | 使用するSkill |
|
|
202
239
|
|-----------|--------------|
|
|
203
|
-
| `einja cli` `@einja/dev-cli` `公開` `リリース` `publish` `release` | `.claude/skills/
|
|
204
|
-
| `
|
|
205
|
-
|
|
|
240
|
+
| `einja cli` `@einja/dev-cli` `create-einja-app` `公開` `リリース` `publish` `release` | `.claude/skills/einja-npm-release/SKILL.md` |
|
|
241
|
+
| `インフラ` `環境変数管理` `Vercel` `Neon` `デプロイ設定` `GitHub Secrets` `環境セットアップ` `ローカルセットアップ` `ローカル環境` `セットアップ` `GitHub Actions` `CI/CD` `ワークフロー` | `.claude/skills/einja-infra-maintenance/SKILL.md` |
|
|
242
|
+
| `Skill作るべき?` `Skill化` `skill-first` `Skill-first` | `.claude/skills/einja-skill-first/SKILL.md` |
|
|
206
243
|
|
|
207
244
|
### CLIパッケージの二重管理禁止
|
|
208
245
|
|
|
@@ -218,6 +255,20 @@ Turborepoモノレポ構成(pnpm workspaces)。詳細が必要な場合は
|
|
|
218
255
|
| `.vscode/settings.json` | `presets/default/.vscode/settings.json` | 単純コピー |
|
|
219
256
|
| `docs/einja/` (memory,cli除く) | `presets/default/docs/einja/` | 単純コピー(sync + init対象) |
|
|
220
257
|
| `CLAUDE.md` | `presets/default/CLAUDE.md.template` | **変換生成** |
|
|
258
|
+
| `scripts/` (`_`プレフィクス除く) | `presets/default/scripts/` | 単純コピー |
|
|
221
259
|
|
|
222
260
|
**コピー先のファイルは直接編集禁止**(ビルド時に上書きされる)
|
|
261
|
+
|
|
262
|
+
### パッケージビルド仕様(テンプレートリポジトリ限定)
|
|
263
|
+
|
|
264
|
+
`@einja/dev-cli` と `create-einja-app` の2パッケージのビルド・テンプレート仕様については、以下のSkillを参照すること:
|
|
265
|
+
|
|
266
|
+
`.claude/skills/cli-package-specs/SKILL.md`
|
|
267
|
+
|
|
268
|
+
### マネージドディレクトリの編集について(テンプレートリポジトリ限定)
|
|
269
|
+
|
|
270
|
+
このリポジトリは `docs/einja/` の**原本(Single Source of Truth)**である。
|
|
271
|
+
上記「マネージドディレクトリ(編集禁止)」ルールは下流リポジトリ(create-einja-appで生成されたプロジェクト)向けであり、
|
|
272
|
+
**このリポジトリでは `docs/einja/` 配下の全ファイルを編集してよい**。
|
|
273
|
+
変更はビルド時に `presets/default/` へ自動コピーされる。
|
|
223
274
|
<!-- @einja:excluded:end -->
|
|
@@ -14,13 +14,19 @@ Turborepo + Next.js 15 + Auth.js + Prisma 構成のプロジェクトテンプ
|
|
|
14
14
|
```
|
|
15
15
|
einja-management-template/
|
|
16
16
|
├── apps/
|
|
17
|
-
│
|
|
17
|
+
│ ├── web/ # メイン管理画面アプリ
|
|
18
|
+
│ │ ├── src/
|
|
19
|
+
│ │ │ ├── app/ # Next.js App Router
|
|
20
|
+
│ │ │ ├── components/ # アプリ固有のコンポーネント
|
|
21
|
+
│ │ │ └── lib/
|
|
22
|
+
│ │ │ ├── auth/ # アプリ固有の認証設定
|
|
23
|
+
│ │ │ └── ... # アプリ固有のユーティリティ
|
|
24
|
+
│ │ ├── package.json
|
|
25
|
+
│ │ └── tsconfig.json
|
|
26
|
+
│ └── admin/ # 管理者画面アプリ
|
|
18
27
|
│ ├── src/
|
|
19
28
|
│ │ ├── app/ # Next.js App Router
|
|
20
|
-
│ │
|
|
21
|
-
│ │ └── lib/
|
|
22
|
-
│ │ ├── auth/ # アプリ固有の認証設定
|
|
23
|
-
│ │ └── ... # アプリ固有のユーティリティ
|
|
29
|
+
│ │ └── components/ # アプリ固有のコンポーネント
|
|
24
30
|
│ ├── package.json
|
|
25
31
|
│ └── tsconfig.json
|
|
26
32
|
├── packages/
|
|
@@ -38,7 +44,9 @@ einja-management-template/
|
|
|
38
44
|
│ │ └── src/
|
|
39
45
|
│ │ ├── domain/ # ドメイン層
|
|
40
46
|
│ │ ├── infrastructure/ # Prismaクライアント等
|
|
41
|
-
│ │
|
|
47
|
+
│ │ ├── core/ # 共通コアモジュール
|
|
48
|
+
│ │ └── testing/ # テストユーティリティ
|
|
49
|
+
│ ├── admin-ui/ # 管理者画面専用UIコンポーネント
|
|
42
50
|
│ └── ui/ # 共通UIコンポーネント(shadcn/ui)
|
|
43
51
|
├── turbo.json # Turborepoの設定
|
|
44
52
|
├── pnpm-workspace.yaml # pnpmワークスペース設定
|
|
@@ -61,6 +69,8 @@ einja-management-template/
|
|
|
61
69
|
|
|
62
70
|
### 開発環境セットアップ
|
|
63
71
|
|
|
72
|
+
> 📖 各コマンドで何が実行されるかの詳細は [セットアップフローガイド](docs/einja/instructions/setup-flow.md) を参照してください。
|
|
73
|
+
|
|
64
74
|
#### 初回セットアップ(初めての方)
|
|
65
75
|
|
|
66
76
|
```bash
|
|
@@ -171,13 +181,14 @@ pnpm db:studio # Prisma Studio起動
|
|
|
171
181
|
# 特定のワークスペースでコマンド実行
|
|
172
182
|
pnpm --filter @repo/web dev
|
|
173
183
|
pnpm --filter @repo/web build
|
|
184
|
+
pnpm --filter @repo/admin dev
|
|
174
185
|
```
|
|
175
186
|
|
|
176
187
|
### データベース設定
|
|
177
188
|
|
|
178
189
|
#### Docker Compose サービス
|
|
179
190
|
|
|
180
|
-
- **postgres**: PostgreSQL
|
|
191
|
+
- **postgres**: PostgreSQL 16
|
|
181
192
|
- ポート: `${POSTGRES_PORT:-25432}` (ホスト) → 5432 (コンテナ)
|
|
182
193
|
- データベース: ブランチ名から自動生成(例: `main`, `feature_auth`)
|
|
183
194
|
- ユーザー: `postgres`
|
|
@@ -190,7 +201,7 @@ pnpm --filter @repo/web build
|
|
|
190
201
|
docker-compose logs -f postgres
|
|
191
202
|
|
|
192
203
|
# データベースに直接接続
|
|
193
|
-
docker-compose exec postgres psql -U postgres -d
|
|
204
|
+
docker-compose exec postgres psql -U postgres -d main
|
|
194
205
|
|
|
195
206
|
# データベースをリセット
|
|
196
207
|
docker-compose down -v
|
|
@@ -220,6 +231,7 @@ pnpm db:studio
|
|
|
220
231
|
- **@repo/config**: Biome, TypeScriptの共通設定
|
|
221
232
|
- **@repo/front-core**: フロントエンド共通層(認証共通設定、hooks、utils、context)
|
|
222
233
|
- **@repo/server-core**: バックエンド共通層(Prismaクライアント・スキーマ、ドメインロジック)
|
|
234
|
+
- **@repo/admin-ui**: 管理者画面専用UIコンポーネント
|
|
223
235
|
- **@repo/ui**: 共通UIコンポーネント(shadcn/ui)
|
|
224
236
|
|
|
225
237
|
### 開発ワークフロー
|
|
@@ -288,8 +300,8 @@ rm -rf .turbo apps/*/.turbo packages/*/.turbo
|
|
|
288
300
|
|
|
289
301
|
詳細は以下のドキュメントを参照してください:
|
|
290
302
|
|
|
291
|
-
- [コーディング規約](
|
|
292
|
-
- [コンポーネント設計ガイドライン](
|
|
303
|
+
- [コーディング規約](./docs/einja/steering/development/coding-standards.md)
|
|
304
|
+
- [コンポーネント設計ガイドライン](./docs/einja/steering/development/component-design.md)
|
|
293
305
|
- [テスト戦略](./docs/einja/steering/development/testing-strategy.md)
|
|
294
306
|
- [コードレビューガイドライン](./docs/einja/steering/development/review-guidelines.md)
|
|
295
307
|
- [コミットルール](./docs/einja/steering/commit-rules.md)
|
|
File without changes
|
|
@@ -0,0 +1,161 @@
|
|
|
1
|
+
# Plan: create-einja-app を Claude Code から実行可能にする
|
|
2
|
+
|
|
3
|
+
## Context
|
|
4
|
+
|
|
5
|
+
`create-einja-app` CLI は inquirer v12 による対話的プロンプトを使用しているため、Claude Code の Bash ツール(非対話実行のみ)からは実行できない。AskUserQuestion で回答を収集し、CLI 引数として渡す方式で解決する。
|
|
6
|
+
|
|
7
|
+
**2段階の実装:**
|
|
8
|
+
1. CLI に非対話モード(全パラメータの CLI 引数化)を追加
|
|
9
|
+
2. Claude Code コマンドを作成し、AskUserQuestion → CLI 引数変換の仲介を行う
|
|
10
|
+
|
|
11
|
+
## スコープ
|
|
12
|
+
|
|
13
|
+
- `create` コマンドのみ(`sync` コマンドは対象外 — 既に `einja:einja-sync` Skill が存在)
|
|
14
|
+
- 既存の対話モードは完全に維持(後方互換)
|
|
15
|
+
|
|
16
|
+
---
|
|
17
|
+
|
|
18
|
+
## Step 1: `CliConfigOverrides` 型の追加
|
|
19
|
+
|
|
20
|
+
**ファイル:** `packages/create-einja-app/src/types/index.ts`
|
|
21
|
+
|
|
22
|
+
```typescript
|
|
23
|
+
export type CliConfigOverrides = {
|
|
24
|
+
packageScope?: string;
|
|
25
|
+
authMethod?: "default" | "none";
|
|
26
|
+
setupEinjaCli?: boolean;
|
|
27
|
+
useCurrentDir?: boolean;
|
|
28
|
+
postgresPort?: number;
|
|
29
|
+
containerName?: string;
|
|
30
|
+
appId?: string;
|
|
31
|
+
portRangeStart?: number;
|
|
32
|
+
rangeSize?: number;
|
|
33
|
+
};
|
|
34
|
+
```
|
|
35
|
+
|
|
36
|
+
## Step 2: commander オプション追加
|
|
37
|
+
|
|
38
|
+
**ファイル:** `packages/create-einja-app/src/cli.ts`
|
|
39
|
+
|
|
40
|
+
既存の `--skip-git`, `--skip-install` に加えて以下を追加:
|
|
41
|
+
|
|
42
|
+
| フラグ | 説明 |
|
|
43
|
+
|--------|------|
|
|
44
|
+
| `-y, --yes` | 非対話モード(デフォルト値使用) |
|
|
45
|
+
| `--scope <scope>` | パッケージスコープ |
|
|
46
|
+
| `--auth <method>` | 認証方式: `default` \| `none` |
|
|
47
|
+
| `--no-einja-cli` | einja CLI セットアップをスキップ |
|
|
48
|
+
| `--use-current-dir` | カレントディレクトリに展開 |
|
|
49
|
+
| `--postgres-port <port>` | PostgreSQL ポート |
|
|
50
|
+
| `--container-name <name>` | Docker コンテナ名 |
|
|
51
|
+
| `--app-id <id>` | アプリ ID |
|
|
52
|
+
| `--port-range-start <port>` | ポート範囲開始 |
|
|
53
|
+
| `--range-size <size>` | ポート範囲サイズ |
|
|
54
|
+
|
|
55
|
+
## Step 3: `create.ts` の 3 パターン分岐
|
|
56
|
+
|
|
57
|
+
**ファイル:** `packages/create-einja-app/src/commands/create.ts`
|
|
58
|
+
|
|
59
|
+
### 3.1 `CreateOptions` 拡張
|
|
60
|
+
|
|
61
|
+
CLI引数の全フィールドを受け取れるよう拡張。
|
|
62
|
+
|
|
63
|
+
### 3.2 `validateCliOverrides()` 追加
|
|
64
|
+
|
|
65
|
+
CLI 引数のバリデーション(scope 正規表現、auth 値チェック、ポート番号範囲)。エラー時は `process.exit(1)`。
|
|
66
|
+
|
|
67
|
+
### 3.3 メインフロー変更
|
|
68
|
+
|
|
69
|
+
```
|
|
70
|
+
options.yes → パターンA: 完全非対話(デフォルト + overrides)
|
|
71
|
+
overrides あり → パターンB: 部分指定(未指定フィールドのみ対話)
|
|
72
|
+
それ以外 → パターンC: 完全対話(従来通り)
|
|
73
|
+
```
|
|
74
|
+
|
|
75
|
+
### 3.4 `buildConfigWithDefaults()` 追加
|
|
76
|
+
|
|
77
|
+
`--yes` 時にデフォルト値 + overrides から `ProjectConfig` を構築。既存の L80-95 のハードコード部分をこの関数に統合。
|
|
78
|
+
|
|
79
|
+
## Step 4: `project.ts` の overrides 対応
|
|
80
|
+
|
|
81
|
+
**ファイル:** `packages/create-einja-app/src/prompts/project.ts`
|
|
82
|
+
|
|
83
|
+
- `promptProjectConfig(defaultProjectName?, overrides?)` にシグネチャ変更
|
|
84
|
+
- 各質問に `when: () => overrides?.xxx === undefined` を追加し、CLI 引数で指定済みの項目をスキップ
|
|
85
|
+
- worktree 関連 overrides が 1 つでもある場合、`customizeWorktree` 質問をスキップ(カスタマイズ済みとみなす)
|
|
86
|
+
- 最終的な return で `overrides?.xxx ?? answers.xxx` のマージ
|
|
87
|
+
|
|
88
|
+
## Step 5: `post-setup.ts` の非対話対応
|
|
89
|
+
|
|
90
|
+
**ファイル:** `packages/create-einja-app/src/generators/post-setup.ts`
|
|
91
|
+
|
|
92
|
+
- `PostSetupOptions` に `yes?: boolean` を追加
|
|
93
|
+
- `yes === true` 時は `promptAndExecuteDirenvAllow` の inquirer をスキップし、デフォルト動作(direnv allow 実行)
|
|
94
|
+
|
|
95
|
+
## Step 6: Claude Code コマンド作成
|
|
96
|
+
|
|
97
|
+
**ファイル:** `.claude/commands/einja/create-app.md`
|
|
98
|
+
|
|
99
|
+
AskUserQuestion で回答を収集し、CLI 引数に変換して実行するコマンド。
|
|
100
|
+
|
|
101
|
+
### フロー
|
|
102
|
+
|
|
103
|
+
```
|
|
104
|
+
1. AskUserQuestion: プロジェクト名(テキスト入力)
|
|
105
|
+
2. AskUserQuestion: 基本設定 3問同時
|
|
106
|
+
- パッケージスコープ(@repo / @{プロジェクト名} / カスタム)
|
|
107
|
+
- 認証方式(NextAuth.js / なし)
|
|
108
|
+
- einja CLI セットアップ(はい / いいえ)
|
|
109
|
+
3. AskUserQuestion: Worktree カスタマイズ(はい / いいえ)
|
|
110
|
+
4. (条件付き) AskUserQuestion: Worktree 詳細設定
|
|
111
|
+
5. ビルド + CLI 実行:
|
|
112
|
+
pnpm -F create-einja-app build
|
|
113
|
+
node packages/create-einja-app/dist/cli.js <name> --yes \
|
|
114
|
+
--scope <scope> --auth <auth> [--no-einja-cli] [worktree flags] \
|
|
115
|
+
--skip-install
|
|
116
|
+
6. 結果報告
|
|
117
|
+
```
|
|
118
|
+
|
|
119
|
+
**注意:** `--skip-install` をデフォルトで付与(Claude Code 内でのインストールは別途制御)
|
|
120
|
+
|
|
121
|
+
## Step 7: テスト
|
|
122
|
+
|
|
123
|
+
### ユニットテスト
|
|
124
|
+
- `overrides` マージの正確性
|
|
125
|
+
- CLI 引数バリデーションのエラーケース
|
|
126
|
+
|
|
127
|
+
### 統合テスト
|
|
128
|
+
- `--yes` でデフォルト生成
|
|
129
|
+
- `--yes --scope @custom --auth none` でカスタム生成
|
|
130
|
+
- 部分指定(`--scope` のみ)で残りが対話入力されること
|
|
131
|
+
|
|
132
|
+
### 手動検証
|
|
133
|
+
```bash
|
|
134
|
+
# 非対話モード
|
|
135
|
+
node packages/create-einja-app/dist/cli.js test-proj --yes --skip-git --skip-install
|
|
136
|
+
|
|
137
|
+
# 部分指定
|
|
138
|
+
node packages/create-einja-app/dist/cli.js test-proj --scope @test --skip-git --skip-install
|
|
139
|
+
```
|
|
140
|
+
|
|
141
|
+
---
|
|
142
|
+
|
|
143
|
+
## 変更ファイル一覧
|
|
144
|
+
|
|
145
|
+
| ファイル | 変更内容 |
|
|
146
|
+
|---------|---------|
|
|
147
|
+
| `packages/create-einja-app/src/types/index.ts` | `CliConfigOverrides` 型追加 |
|
|
148
|
+
| `packages/create-einja-app/src/cli.ts` | commander オプション追加 |
|
|
149
|
+
| `packages/create-einja-app/src/commands/create.ts` | 3パターン分岐、バリデーション、デフォルト構築 |
|
|
150
|
+
| `packages/create-einja-app/src/prompts/project.ts` | overrides 対応、`when` 条件追加 |
|
|
151
|
+
| `packages/create-einja-app/src/generators/post-setup.ts` | `yes` オプション追加 |
|
|
152
|
+
| `.claude/commands/einja/create-app.md` | 新規: AskUserQuestion 仲介コマンド |
|
|
153
|
+
| テストファイル(既存 + 新規) | 非対話モードのテストケース追加 |
|
|
154
|
+
|
|
155
|
+
## 検証方法
|
|
156
|
+
|
|
157
|
+
1. `pnpm -F create-einja-app build` が成功すること
|
|
158
|
+
2. `pnpm -F create-einja-app typecheck` が成功すること
|
|
159
|
+
3. `pnpm -F create-einja-app test` が成功すること
|
|
160
|
+
4. 手動で `--yes` モード実行し、プロジェクトが正しく生成されること
|
|
161
|
+
5. Claude Code から `/einja:create-app` で実行できること
|
|
@@ -0,0 +1,158 @@
|
|
|
1
|
+
# Plan: セットアップフロー統合ドキュメント作成
|
|
2
|
+
|
|
3
|
+
## Context
|
|
4
|
+
|
|
5
|
+
`scripts/init.sh`、`post-setup.ts`、`setup-dev.ts` など複数のセットアップ関連ファイルがあるが、
|
|
6
|
+
**どの操作でどのファイルが呼ばれ何が起きるか**を横断的にまとめたドキュメントが存在しない。
|
|
7
|
+
3つのシナリオ(create-einja-app初回 / einja sync / clone後セットアップ)ごとのフローを
|
|
8
|
+
mermaid図 + テーブルで整理したドキュメントを作成する。
|
|
9
|
+
|
|
10
|
+
## 変更ファイル
|
|
11
|
+
|
|
12
|
+
| ファイル | 変更内容 |
|
|
13
|
+
|---------|---------|
|
|
14
|
+
| `docs/einja/instructions/setup-flow.md` | **新規作成** セットアップフロー統合ドキュメント |
|
|
15
|
+
| `README.md` | 「パッケージ利用者向け」+「開発環境セットアップ」にドキュメント参照リンクを追加 |
|
|
16
|
+
|
|
17
|
+
> **NOTE**: `docs/einja/instructions/` はこのリポジトリが原本。ビルド時に `presets/default/` へ自動コピーされ、`einja sync` で各プロジェクトに配布される。直接 `presets/default/` を編集する必要はない。
|
|
18
|
+
|
|
19
|
+
## TODO
|
|
20
|
+
|
|
21
|
+
### TODO-1: `docs/einja/instructions/setup-flow.md` 新規作成
|
|
22
|
+
|
|
23
|
+
3シナリオのセットアップフローを網羅するドキュメントを作成する。
|
|
24
|
+
|
|
25
|
+
#### ドキュメント構成
|
|
26
|
+
|
|
27
|
+
```
|
|
28
|
+
# セットアップフローガイド
|
|
29
|
+
|
|
30
|
+
## 概要
|
|
31
|
+
- 3つのシナリオの簡潔な説明
|
|
32
|
+
|
|
33
|
+
## シナリオ別フロー
|
|
34
|
+
|
|
35
|
+
### 1. npx create-einja-app(新規プロジェクト作成)
|
|
36
|
+
- mermaid シーケンス図
|
|
37
|
+
- 処理テーブル(ファイル → 処理内容)
|
|
38
|
+
|
|
39
|
+
### 2. git clone 後の環境構築(既存プロジェクトへの参加)
|
|
40
|
+
- mermaid シーケンス図
|
|
41
|
+
- 処理テーブル
|
|
42
|
+
|
|
43
|
+
### 3. einja sync(テンプレート同期)
|
|
44
|
+
- mermaid シーケンス図
|
|
45
|
+
- 処理テーブル(dev-cli sync / create-einja-app sync)
|
|
46
|
+
|
|
47
|
+
## ファイル別リファレンス
|
|
48
|
+
- 各スクリプト/ファイルの役割と呼び出し元の逆引きテーブル
|
|
49
|
+
|
|
50
|
+
## 処理の重複と設計意図
|
|
51
|
+
- init.sh と dev:setup の重複箇所の説明(冪等性の意図)
|
|
52
|
+
```
|
|
53
|
+
|
|
54
|
+
#### シナリオ1: `npx create-einja-app` フロー
|
|
55
|
+
|
|
56
|
+
```
|
|
57
|
+
ユーザー: npx create-einja-app my-app
|
|
58
|
+
│
|
|
59
|
+
├── cli.ts → createCommand()
|
|
60
|
+
│ ├── 対話プロンプト(プロジェクト名、スコープ、認証方式等)
|
|
61
|
+
│ ├── generateTemplate() ← generators/template.ts
|
|
62
|
+
│ │ └── テンプレートコピー + 変数置換 + リネーム
|
|
63
|
+
│ └── execPostSetup() ← generators/post-setup.ts
|
|
64
|
+
│ ├── Step 0: bash scripts/init.sh (stdio: inherit)
|
|
65
|
+
│ │ ├── Step 1: Volta インストール(未導入時のみ)
|
|
66
|
+
│ │ ├── Step 2: シェル設定(VOLTA_FEATURE_PNPM)
|
|
67
|
+
│ │ ├── Step 3: Node.js / pnpm インストール
|
|
68
|
+
│ │ ├── Step 4: pnpm install
|
|
69
|
+
│ │ └── Step 5: direnv allow(direnv存在時のみ)
|
|
70
|
+
│ ├── PATH補完(~/.volta/bin を process.env.PATH に追加)
|
|
71
|
+
│ ├── Step 1: pnpm install + pnpm db:generate
|
|
72
|
+
│ ├── Step 2: pnpm env:rotate-secrets --all --non-interactive
|
|
73
|
+
│ ├── Step 3: git init + git add . + git commit
|
|
74
|
+
│ ├── Step 4: npx @einja/dev-cli init(setupEinjaCli=true時のみ)
|
|
75
|
+
│ └── 完了メッセージ表示
|
|
76
|
+
```
|
|
77
|
+
|
|
78
|
+
#### シナリオ2: clone後の環境構築フロー
|
|
79
|
+
|
|
80
|
+
```
|
|
81
|
+
開発者: git clone → cd project
|
|
82
|
+
│
|
|
83
|
+
├── ./scripts/init.sh(手動実行・初回のみ)
|
|
84
|
+
│ ├── Step 1: Volta インストール
|
|
85
|
+
│ ├── Step 2: シェル設定
|
|
86
|
+
│ ├── Step 3: Node.js / pnpm インストール
|
|
87
|
+
│ ├── Step 4: pnpm install
|
|
88
|
+
│ └── Step 5: direnv allow
|
|
89
|
+
│
|
|
90
|
+
├── exec $SHELL(ターミナル再起動)
|
|
91
|
+
│
|
|
92
|
+
├── pnpm dev:setup(= tsx scripts/setup-dev.ts)
|
|
93
|
+
│ ├── Step 1-3: Volta確認 / シェル設定 / Node.js・pnpm インストール
|
|
94
|
+
│ ├── Step 4: direnv インストール(macOS: brew install direnv)
|
|
95
|
+
│ ├── Step 5: direnv hook シェル追記
|
|
96
|
+
│ ├── Step 6: dotenvx インストール
|
|
97
|
+
│ ├── Step 7: .env 作成(.env.local + .env.keys で復号)
|
|
98
|
+
│ ├── Step 8: .env.personal 作成 + GITHUB_TOKEN(対話入力)
|
|
99
|
+
│ ├── Step 9: direnv allow → .envrc評価(Serena MCP自動起動含む)
|
|
100
|
+
│ ├── Step 10: PostgreSQL 起動(docker-compose up -d postgres)
|
|
101
|
+
│ └── Step 11: pnpm db:generate + pnpm db:push
|
|
102
|
+
│
|
|
103
|
+
└── pnpm dev:bg(開発サーバー起動)
|
|
104
|
+
```
|
|
105
|
+
|
|
106
|
+
#### シナリオ3: einja sync フロー
|
|
107
|
+
|
|
108
|
+
```
|
|
109
|
+
開発者: einja sync(Claude Code Skill経由)
|
|
110
|
+
│
|
|
111
|
+
├── dev-cli sync
|
|
112
|
+
│ ├── 同期対象:
|
|
113
|
+
│ │ ├── .claude/commands/einja/, .claude/agents/einja/
|
|
114
|
+
│ │ ├── .claude/skills/einja-*/, .claude/hooks/
|
|
115
|
+
│ │ ├── docs/einja/, scripts/
|
|
116
|
+
│ │ ├── .envrc(envカテゴリ, 単一ファイル)
|
|
117
|
+
│ │ └── .vscode/settings.json(toolsカテゴリ, 単一ファイル)
|
|
118
|
+
│ ├── マージ: 3方向マージ + マーカーベース
|
|
119
|
+
│ ├── コンフリクト解消(対話式)
|
|
120
|
+
│ └── 依存関係チェック + インストール
|
|
121
|
+
│
|
|
122
|
+
└── create-einja-app sync
|
|
123
|
+
├── 同期対象: CI/CD, docker, monorepo設定, root config, scripts/
|
|
124
|
+
├── テンプレート変数置換あり
|
|
125
|
+
└── バックアップ作成 + マージ
|
|
126
|
+
```
|
|
127
|
+
|
|
128
|
+
#### ファイル別リファレンステーブル
|
|
129
|
+
|
|
130
|
+
| ファイル | 役割 | 呼び出し元 |
|
|
131
|
+
|---------|------|-----------|
|
|
132
|
+
| `scripts/init.sh` | Volta/Node/pnpm/direnv 初期導入 | create-einja-app (post-setup.ts) / 手動実行 |
|
|
133
|
+
| `scripts/setup-dev.ts` | 環境構築一式(.env, DB, direnv等) | `pnpm dev:setup` |
|
|
134
|
+
| `scripts/ensure-serena.sh` | Serena MCP サーバー起動 | `.envrc` (direnv) |
|
|
135
|
+
| `scripts/env-rotate-secrets.ts` | 秘密鍵ローテーション | create-einja-app (post-setup.ts) / `pnpm env:rotate-secrets` |
|
|
136
|
+
| `.envrc` | dotenv読み込み + worktree間.env.personal共有 + Serena MCP起動 | direnv(シェルディレクトリ進入時に自動評価) |
|
|
137
|
+
| `generators/post-setup.ts` | プロジェクト作成後のセットアップ | create-einja-app create コマンド |
|
|
138
|
+
| `generators/template.ts` | テンプレート展開・変数置換 | create-einja-app create コマンド |
|
|
139
|
+
| `generators/sync.ts` | テンプレート同期 | create-einja-app sync コマンド |
|
|
140
|
+
| `packages/cli/src/commands/sync.ts` | Claude Code関連ファイル同期 | dev-cli sync コマンド |
|
|
141
|
+
|
|
142
|
+
### TODO-2: README.md に参照リンク追加
|
|
143
|
+
|
|
144
|
+
**対象**: `README.md` の「パッケージ利用者向け」セクション(L8付近)
|
|
145
|
+
|
|
146
|
+
「使い分けガイド」の後に、セットアップフローガイドへの参照を1行追加:
|
|
147
|
+
|
|
148
|
+
```markdown
|
|
149
|
+
> 📖 各シナリオのセットアップで何が実行されるかの詳細は [セットアップフローガイド](docs/einja/instructions/setup-flow.md) を参照してください。
|
|
150
|
+
```
|
|
151
|
+
|
|
152
|
+
また「パッケージ開発者向け > 開発環境セットアップ」セクション(L158付近)にも同様のリンクを追加。
|
|
153
|
+
|
|
154
|
+
## 検証
|
|
155
|
+
|
|
156
|
+
1. ドキュメントのmermaid図がGitHubで正しくレンダリングされるか確認
|
|
157
|
+
2. README.mdのリンクが正しいパスを指しているか確認
|
|
158
|
+
3. `git diff --stat` で意図しないファイルが含まれていないこと
|