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.
Files changed (120) hide show
  1. package/README.md +34 -1
  2. package/dist/cli.js +92 -80
  3. package/dist/cli.js.map +1 -1
  4. package/package.json +1 -1
  5. package/templates/default/.changeset/config.json +11 -0
  6. package/templates/default/.claude/hooks/einja/plan-mode-skill-loader.sh +27 -0
  7. package/templates/default/.claude/settings.json +29 -1
  8. package/templates/default/.claude/skills/cli-package-specs/SKILL.md +247 -0
  9. package/templates/default/.einja-sync.json +1 -1
  10. package/templates/default/.env.personal.example +6 -2
  11. package/templates/default/.envrc +5 -0
  12. package/templates/default/.github/release.yml +10 -0
  13. package/templates/default/.github/workflows/changeset-status.yml +60 -0
  14. package/templates/default/.github/workflows/deploy-pr-preview.yml +23 -24
  15. package/templates/default/.github/workflows/deploy-stable-branches.yml +336 -100
  16. package/templates/default/.mcp.json +2 -12
  17. package/templates/default/.serena/project.yml +7 -0
  18. package/templates/default/CLAUDE.md +61 -10
  19. package/templates/default/README.md +22 -10
  20. package/templates/default/apps/admin/package.json +1 -1
  21. package/templates/default/apps/admin/tsconfig.json +2 -1
  22. package/templates/default/apps/web/package.json +1 -1
  23. package/templates/default/apps/web/tsconfig.json +2 -1
  24. package/templates/default/docs/plans/.gitkeep +0 -0
  25. package/templates/default/docs/plans/agile-munching-knuth.md +161 -0
  26. package/templates/default/docs/plans/agile-riding-nova.md +158 -0
  27. package/templates/default/docs/plans/agile-wibbling-dusk.md +91 -0
  28. package/templates/default/docs/plans/ancient-greeting-flamingo-agent-a87e67c.md +221 -0
  29. package/templates/default/docs/plans/ancient-greeting-flamingo-agent-ab73a1c.md +107 -0
  30. package/templates/default/docs/plans/ancient-greeting-flamingo.md +120 -0
  31. package/templates/default/docs/plans/ancient-watching-otter.md +152 -0
  32. package/templates/default/docs/plans/bright-sauteeing-bumblebee.md +30 -0
  33. package/templates/default/docs/plans/bright-stargazing-dawn.md +87 -0
  34. package/templates/default/docs/plans/calm-stirring-bonbon.md +196 -0
  35. package/templates/default/docs/plans/calm-watching-widget.md +111 -0
  36. package/templates/default/docs/plans/cheerful-wiggling-ullman.md +164 -0
  37. package/templates/default/docs/plans/compiled-humming-cherny.md +94 -0
  38. package/templates/default/docs/plans/composed-doodling-mountain.md +362 -0
  39. package/templates/default/docs/plans/dapper-launching-lynx.md +81 -0
  40. package/templates/default/docs/plans/dazzling-foraging-cascade.md +32 -0
  41. package/templates/default/docs/plans/effervescent-munching-kite-agent-ac08baf.md +672 -0
  42. package/templates/default/docs/plans/effervescent-munching-kite-agent-aecc373.md +442 -0
  43. package/templates/default/docs/plans/effervescent-munching-kite.md +263 -0
  44. package/templates/default/docs/plans/enchanted-wiggling-ember-agent-a5befd57d0ca4c7c7.md +177 -0
  45. package/templates/default/docs/plans/enchanted-wiggling-ember.md +170 -0
  46. package/templates/default/docs/plans/federated-questing-kahan.md +47 -0
  47. package/templates/default/docs/plans/fix-orphan-cleaner-review.md +25 -0
  48. package/templates/default/docs/plans/fix-sync-template-variables.md +162 -0
  49. package/templates/default/docs/plans/flickering-pondering-hearth.md +26 -0
  50. package/templates/default/docs/plans/fluttering-snuggling-sprout.md +172 -0
  51. package/templates/default/docs/plans/generic-sleeping-snowglobe-agent-a41d8da.md +179 -0
  52. package/templates/default/docs/plans/generic-sleeping-snowglobe.md +108 -0
  53. package/templates/default/docs/plans/generic-snuggling-pudding.md +57 -0
  54. package/templates/default/docs/plans/glimmering-giggling-sedgewick.md +126 -0
  55. package/templates/default/docs/plans/glittery-swimming-bachman.md +78 -0
  56. package/templates/default/docs/plans/happy-watching-toast.md +56 -0
  57. package/templates/default/docs/plans/harmonic-strolling-nebula.md +210 -0
  58. package/templates/default/docs/plans/idempotent-wiggling-cherny.md +122 -0
  59. package/templates/default/docs/plans/import-alias-refactor.md +75 -0
  60. package/templates/default/docs/plans/lazy-percolating-sloth-agent-abda679.md +346 -0
  61. package/templates/default/docs/plans/lazy-percolating-sloth.md +151 -0
  62. package/templates/default/docs/plans/linked-greeting-llama-agent-a7a6e5b.md +345 -0
  63. package/templates/default/docs/plans/linked-greeting-llama.md +467 -0
  64. package/templates/default/docs/plans/lovely-bubbling-rose.md +80 -0
  65. package/templates/default/docs/plans/optimized-watching-sprout.md +149 -0
  66. package/templates/default/docs/plans/peaceful-beaming-toast-agent-a292da6.md +288 -0
  67. package/templates/default/docs/plans/peaceful-beaming-toast-agent-a819699.md +366 -0
  68. package/templates/default/docs/plans/peaceful-beaming-toast-agent-ac11de2.md +474 -0
  69. package/templates/default/docs/plans/peaceful-beaming-toast.md +345 -0
  70. package/templates/default/docs/plans/purrfect-spinning-hickey-agent-ae6194c.md +300 -0
  71. package/templates/default/docs/plans/purrfect-spinning-hickey-agent-ae6900e.md +444 -0
  72. package/templates/default/docs/plans/purrfect-spinning-hickey.md +361 -0
  73. package/templates/default/docs/plans/recursive-fluttering-mitten.md +176 -0
  74. package/templates/default/docs/plans/recursive-kindling-lemon-agent-a42199e.md +186 -0
  75. package/templates/default/docs/plans/recursive-kindling-lemon.md +36 -0
  76. package/templates/default/docs/plans/seed-migration-tests.md +47 -0
  77. package/templates/default/docs/plans/sprightly-leaping-manatee.md +224 -0
  78. package/templates/default/docs/plans/stateful-wishing-lerdorf.md +161 -0
  79. package/templates/default/docs/plans/streamed-purring-wreath.md +40 -0
  80. package/templates/default/docs/plans/synthetic-percolating-pearl.md +101 -0
  81. package/templates/default/docs/plans/todo-create-einja-app-ux-fix.md +16 -0
  82. package/templates/default/docs/plans/todo-direnv-hang-fix.md +12 -0
  83. package/templates/default/docs/plans/todo-fix-sync-template-variables.md +21 -0
  84. package/templates/default/docs/plans/todo-github-actions-release-workflow.md +34 -0
  85. package/templates/default/docs/plans/todo-issue-spec-rename.md +24 -0
  86. package/templates/default/docs/plans/todo-phase4-marker-update.md +39 -0
  87. package/templates/default/docs/plans/todo-skill-creator-sync.md +23 -0
  88. package/templates/default/docs/plans/todo-skill-creator-upgrade.md +18 -0
  89. package/templates/default/docs/plans/typed-snuggling-parnas-agent-a6f6391.md +476 -0
  90. package/templates/default/docs/plans/typed-snuggling-parnas-agent-adb678b.md +144 -0
  91. package/templates/default/docs/plans/typed-snuggling-parnas.md +84 -0
  92. package/templates/default/docs/plans/velvety-chasing-spark.md +28 -0
  93. package/templates/default/docs/plans/warm-hopping-lighthouse-agent-a30aa4f.md +534 -0
  94. package/templates/default/docs/plans/warm-hopping-lighthouse-agent-a57a278.md +508 -0
  95. package/templates/default/docs/plans/warm-hopping-lighthouse-agent-a90b809.md +421 -0
  96. package/templates/default/docs/plans/warm-hopping-lighthouse.md +199 -0
  97. package/templates/default/docs/plans/wondrous-strolling-crystal-agent-a0615fc.md +215 -0
  98. package/templates/default/docs/plans/wondrous-strolling-crystal.md +182 -0
  99. package/templates/default/docs/plans/zesty-roaming-steele.md +74 -0
  100. package/templates/default/docs/verification-test.md +2 -0
  101. package/templates/default/gitignore +9 -1
  102. package/templates/default/package.json +6 -2
  103. package/templates/default/packages/admin-ui/package.json +1 -1
  104. package/templates/default/packages/server-core/tsconfig.json +6 -1
  105. package/templates/default/pnpm-lock.yaml +823 -57
  106. package/templates/default/scripts/ensure-serena.sh +75 -0
  107. package/templates/default/scripts/env-rotate-secrets.ts +66 -6
  108. package/templates/default/scripts/init-github.ts +363 -0
  109. package/templates/default/scripts/init.sh +11 -5
  110. package/templates/default/scripts/lib/worktree-config.ts +64 -0
  111. package/templates/default/scripts/setup-dev.ts +16 -1
  112. package/templates/default/scripts/stop-serena.sh +25 -0
  113. package/templates/default/scripts/worktree/dev.ts +2 -2
  114. package/templates/default/.claude/skills/create-einja-app-release/SKILL.md +0 -186
  115. package/templates/default/.claude/skills/dev-cli-release/SKILL.md +0 -173
  116. package/templates/default/.cursor/commands/spec-create.md +0 -227
  117. package/templates/default/.cursor/commands/task-exec.md +0 -287
  118. package/templates/default/.cursor/commands/update-docs-by-task-specs.md +0 -448
  119. /package/templates/default/scripts/{cli-template-update.ts → _cli-template-update.ts} +0 -0
  120. /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:task-exec` | タスクグループ実行 |
36
- | `einja:spec-create` | 仕様書作成 |
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
- 4. 承認後、`docs/plans/todo-{plan名}.md` で進捗管理しながら実装を開始する
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-coding-standards` - コーディング規約、インポートパス規約
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/dev-cli-release/SKILL.md` |
204
- | `create-einja-app` | `.claude/skills/create-einja-app-release/SKILL.md` |
205
- | `インフラ` `環境変数管理` `Vercel` `Neon` `デプロイ設定` `GitHub Secrets` `環境セットアップ` `GitHub Actions` `CI/CD` `ワークフロー` | `.claude/skills/einja-infra-maintenance/SKILL.md` |
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
- └── web/ # メイン管理画面アプリ
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
- │ │ ├── components/ # アプリ固有のコンポーネント
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
- │ │ └── utils/ # 共通ユーティリティ
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 15
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 einja_management
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
- - [コーディング規約](./.claude/skills/einja-coding-standards/SKILL.md)
292
- - [コンポーネント設計ガイドライン](./.claude/skills/einja-component-design/SKILL.md)
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)
@@ -28,7 +28,7 @@
28
28
  "clsx": "^2.1.1",
29
29
  "date-fns": "^4.1.0",
30
30
  "lucide-react": "^0.523.0",
31
- "next": "15.3.3",
31
+ "next": "15.3.9",
32
32
  "next-auth": "^5.0.0-beta.28",
33
33
  "next-themes": "^0.4.6",
34
34
  "postcss": "^8.5.6",
@@ -8,7 +8,8 @@
8
8
  ],
9
9
  "paths": {
10
10
  "@/*": [
11
- "./src/*"
11
+ "./src/*",
12
+ "../../packages/server-core/src/*"
12
13
  ],
13
14
  "@admin/*": [
14
15
  "./src/*",
@@ -28,7 +28,7 @@
28
28
  "bcryptjs": "^3.0.2",
29
29
  "clsx": "^2.1.1",
30
30
  "lucide-react": "^0.523.0",
31
- "next": "15.3.3",
31
+ "next": "15.3.9",
32
32
  "next-auth": "^5.0.0-beta.28",
33
33
  "next-themes": "^0.4.6",
34
34
  "postcss": "^8.5.6",
@@ -8,7 +8,8 @@
8
8
  ],
9
9
  "paths": {
10
10
  "@/*": [
11
- "./src/*"
11
+ "./src/*",
12
+ "../../packages/server-core/src/*"
12
13
  ],
13
14
  "@web/*": [
14
15
  "./src/*",
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` で意図しないファイルが含まれていないこと