@einja/dev-cli 0.1.10 → 0.1.12

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 (30) hide show
  1. package/dist/lib/file-system.js +1 -1
  2. package/dist/lib/file-system.js.map +1 -1
  3. package/package.json +1 -2
  4. package/scaffolds/cli/preset.yaml +110 -0
  5. package/scaffolds/example/README.md +35 -0
  6. package/scaffolds/example/specs/issues/issue999-example-task/design.md +879 -0
  7. package/scaffolds/example/specs/issues/issue999-example-task/qa-tests/README.md +150 -0
  8. package/scaffolds/example/specs/issues/issue999-example-task/qa-tests/phase1/1-1.md +268 -0
  9. package/scaffolds/example/specs/issues/issue999-example-task/qa-tests/phase1/1-2.md +179 -0
  10. package/scaffolds/example/specs/issues/issue999-example-task/qa-tests/phase1/1-3.md +392 -0
  11. package/scaffolds/example/specs/issues/issue999-example-task/qa-tests/phase1/evidence/.gitkeep +0 -0
  12. package/scaffolds/example/specs/issues/issue999-example-task/qa-tests/phase2/2-1.md +459 -0
  13. package/scaffolds/example/specs/issues/issue999-example-task/qa-tests/phase2/evidence/.gitkeep +0 -0
  14. package/scaffolds/example/specs/issues/issue999-example-task/qa-tests/scenarios.md +125 -0
  15. package/scaffolds/example/specs/issues/issue999-example-task/requirements.md +494 -0
  16. package/scaffolds/example/specs/issues/issue999-example-task/tasks.md +212 -0
  17. package/scaffolds/instructions/deployment-setup.md +458 -0
  18. package/scaffolds/instructions/environment-setup.md +509 -0
  19. package/scaffolds/instructions/local-server-environment-and-worktree.md +539 -0
  20. package/scaffolds/instructions/task-execute.md +649 -0
  21. package/scaffolds/instructions/task-vibe-kanban-loop.md +495 -0
  22. package/scaffolds/memory/archive/.gitkeep +0 -0
  23. package/scaffolds/memory/decisions.md +26 -0
  24. package/scaffolds/memory/patterns.md +28 -0
  25. package/scaffolds/CLAUDE.md.template +0 -386
  26. /package/{templates → scaffolds/templates}/README.md +0 -0
  27. /package/{templates → scaffolds/templates}/design-simple.md.template +0 -0
  28. /package/{templates → scaffolds/templates}/design.md.template +0 -0
  29. /package/{templates → scaffolds/templates}/qa-test.md.template +0 -0
  30. /package/{templates → scaffolds/templates}/requirements.md.template +0 -0
@@ -0,0 +1,539 @@
1
+ <!-- @einja:managed:start -->
2
+ # ローカル開発サーバー環境構築ガイド(Worktree対応)
3
+
4
+ ## クイックスタート(推奨)
5
+
6
+ すぐに開発を始めたい場合は、以下のコマンドを実行してください。
7
+
8
+ ```bash
9
+ pnpm install
10
+ pnpm dev # これだけでOK(.env自動生成、DB起動、マイグレーション実行)
11
+ ```
12
+
13
+ **初回のみ秘密情報の設定が必要です:**
14
+ ```bash
15
+ cp .env.local.example .env.local
16
+ # .env.localを編集して秘密情報を設定
17
+ ```
18
+
19
+ 以下、詳細な手順とトラブルシューティングを記載しています。
20
+
21
+ ---
22
+
23
+ ## 概要
24
+
25
+ このプロジェクトは、Turborepo + Next.jsを使用したモノレポ構成のアプリケーションです。本ドキュメントでは、ローカル開発サーバーの起動、環境変数管理、Worktree環境での並行開発まで、開発メンバーが迷わず環境構築できるように手順を説明します。
26
+
27
+ ### プロジェクト構成
28
+
29
+ - **apps/web**: エンドユーザー向けWebアプリケーション (Next.js App Router)
30
+ - **packages/config**: 共通設定(TypeScript, Biome, Panda CSS, Worktree設定)
31
+ - **packages/database**: Prismaスキーマとクライアント
32
+ - **packages/auth**: NextAuth設定と認証ロジック
33
+ - **packages/ui**: 共通UIコンポーネント
34
+
35
+ ## 必要な環境
36
+
37
+ 開発を始める前に、以下の環境を準備してください。
38
+
39
+ | ソフトウェア | バージョン | インストール確認コマンド |
40
+ |------------|----------|---------------------|
41
+ | Node.js | 22.x以上 | `node --version` |
42
+ | pnpm | 10.x以上 | `pnpm --version` |
43
+ | Docker | 24.x以上 | `docker --version` |
44
+ | Docker Compose | 2.x以上 | `docker compose version` |
45
+ | Git | 2.x以上 | `git --version` |
46
+
47
+ ### インストール方法
48
+
49
+ #### Node.js & pnpm
50
+ ```bash
51
+ # Node.jsのインストール(推奨: Volta使用)
52
+ volta install node@22
53
+ volta install pnpm@10
54
+
55
+ # または fnm/nvm を使用
56
+ fnm install 22
57
+ fnm use 22
58
+ npm install -g pnpm@10
59
+ ```
60
+
61
+ #### Docker
62
+ - macOS: [Docker Desktop for Mac](https://docs.docker.com/desktop/install/mac-install/)
63
+ - Windows: [Docker Desktop for Windows](https://docs.docker.com/desktop/install/windows-install/)
64
+ - Linux: [Docker Engine](https://docs.docker.com/engine/install/)
65
+
66
+ ## セットアップ手順
67
+
68
+ ### 1. リポジトリのクローン
69
+
70
+ ```bash
71
+ git clone <repository-url>
72
+ cd <project-name>
73
+ ```
74
+
75
+ ### 2. 依存関係のインストール
76
+
77
+ ```bash
78
+ pnpm install
79
+ ```
80
+
81
+ このコマンドで、ルートおよびすべてのワークスペース(apps/*, packages/*)の依存関係が一括インストールされます。
82
+
83
+ ### 3. 開発サーバーの起動
84
+
85
+ ```bash
86
+ pnpm dev
87
+ ```
88
+
89
+ **このコマンドは以下を自動実行します:**
90
+ 1. ブランチ名からポート番号を自動計算
91
+ 2. `.env.example`をベースに`.env`を自動生成
92
+ 3. PostgreSQLコンテナを起動(未起動の場合)
93
+ 4. データベースを作成(存在しない場合)
94
+ 5. Prismaマイグレーション実行
95
+ 6. 全アプリケーションの開発サーバー起動
96
+
97
+ ### 4. 秘密情報の設定(初回のみ)
98
+
99
+ GitHub MCPやOAuth認証を使用する場合は、`.env.local`を作成します:
100
+
101
+ ```bash
102
+ cp .env.local.example .env.local
103
+ # エディタで.env.localを開き、秘密情報を設定
104
+ ```
105
+
106
+ ## 環境変数ファイル
107
+
108
+ ### ファイルの責務
109
+
110
+ | ファイル | 責務 | git管理 | 生成方法 |
111
+ |---------|------|--------|---------|
112
+ | `.env.example` | `.env`生成のテンプレート | ✅ | 手動作成 |
113
+ | `.env` | ブランチ固有の環境変数 | ❌ | `pnpm dev`で自動生成 |
114
+ | `.env.local.example` | `.env.local`の参考テンプレート | ✅ | 手動作成 |
115
+ | `.env.local` | マシン固有の秘密情報 | ❌ | `.env.local.example`からコピー |
116
+
117
+ ### ファイル関係図
118
+
119
+ ```
120
+ [git管理] [git管理外]
121
+
122
+ .env.example ──[pnpm dev]───→ .env(自動生成)
123
+
124
+ Next.js起動時にマージ
125
+
126
+ .env.local.example ──[手動コピー]→ .env.local ──→ 最終的な環境変数
127
+ ```
128
+
129
+ ### 環境変数の優先順位
130
+
131
+ 環境変数は以下の優先順位で読み込まれます(下にいくほど優先度が高い):
132
+
133
+ 1. **ルート/.env** - 全アプリ共通の基本設定(自動生成)
134
+ 2. **ルート/.env.local** - 開発者個人のカスタム設定・秘密情報(gitignore対象)
135
+
136
+ ## 開発モード
137
+
138
+ ### 統合開発コマンド(`pnpm dev`)
139
+
140
+ **用途**: すべての開発作業(単一ブランチ・Worktree問わず)
141
+
142
+ ```bash
143
+ pnpm dev
144
+ ```
145
+
146
+ #### 特徴:
147
+ - ブランチ名からポート番号を自動計算(Worktree対応)
148
+ - `.env`を自動生成(毎回上書き)
149
+ - PostgreSQL自動起動・データベース自動作成
150
+ - マイグレーション自動実行
151
+ - 全アプリケーションを同時起動
152
+ - HMR(Hot Module Replacement)対応
153
+
154
+ #### ポート番号の採番ルール:
155
+
156
+ ブランチ名から決定論的にポート番号を計算します。同じブランチ名なら常に同じポート番号が割り当てられます。
157
+
158
+ ```typescript
159
+ // scripts/worktree/dev.tsの実装
160
+ 1. ブランチ名のSHA-256ハッシュを生成(例: "feature/auth" → "7a3d...")
161
+ 2. ハッシュの最初の8文字を16進数として数値化
162
+ 3. 各アプリのポート番号を計算:
163
+ - PORT_WEB: hashNum % rangeSize + portRangeStart
164
+ ```
165
+
166
+ **採番の特徴:**
167
+ - ブランチ名が同じなら常に同じポート番号(再現性)
168
+ - PostgreSQLは全ワークツリーで共有(リソース節約)
169
+ - database名で完全に分離(データの独立性を保証)
170
+
171
+ #### ポート番号とデータベースの例:
172
+
173
+ | ブランチ名 | PORT_WEB | PostgreSQL | Database |
174
+ |----------|----------|------------|----------|
175
+ | main | 3195 | (設定ファイルのポート) | main |
176
+ | feature/auth | 3122 | (設定ファイルのポート) | feature_auth |
177
+ | feature/payment | 3087 | (設定ファイルのポート) | feature_payment |
178
+
179
+ ### その他のコマンド
180
+
181
+ ```bash
182
+ # 環境準備のみ(devサーバー起動しない)
183
+ pnpm env:prepare
184
+
185
+ # 環境準備をスキップして直接起動
186
+ pnpm dev:skip-setup
187
+ ```
188
+
189
+ ## Worktree設定のカスタマイズ
190
+
191
+ ### worktree.config.json
192
+
193
+ プロジェクトルートの`worktree.config.json`でポート番号やコンテナ名をカスタマイズできます。
194
+
195
+ ```json
196
+ {
197
+ "schemaVersion": 1,
198
+ "postgres": {
199
+ "port": 25432,
200
+ "containerName": "myproject-postgres"
201
+ },
202
+ "apps": [
203
+ { "id": "web", "portRangeStart": 3000, "rangeSize": 1000 }
204
+ ]
205
+ }
206
+ ```
207
+
208
+ #### 設定項目
209
+
210
+ | 項目 | 説明 | デフォルト値 |
211
+ |------|------|-------------|
212
+ | `postgres.port` | PostgreSQLの公開ポート | 25432 |
213
+ | `postgres.containerName` | Dockerコンテナ名 | einja-management-postgres |
214
+ | `apps[].id` | アプリケーションID | web |
215
+ | `apps[].portRangeStart` | ポート範囲の開始値 | 3000 |
216
+ | `apps[].rangeSize` | ポート範囲のサイズ | 1000 |
217
+
218
+ **新規アプリ追加**: `apps`配列に追加するだけで対応可能(コード変更不要)
219
+
220
+ ## Worktree環境でのセットアップ
221
+
222
+ ### 新しいWorktreeを作成して開発
223
+
224
+ ```bash
225
+ # 新しいWorktreeを作成
226
+ git worktree add ../project-feature-auth feature/auth
227
+
228
+ # Worktreeディレクトリに移動
229
+ cd ../project-feature-auth
230
+
231
+ # 依存関係インストール(必要に応じて)
232
+ pnpm install
233
+
234
+ # 開発サーバー起動(全自動)
235
+ pnpm dev
236
+ ```
237
+
238
+ 起動時の出力例:
239
+
240
+ ```
241
+ 現在のブランチ: feature/auth
242
+ データベース名: feature_auth
243
+ 計算されたポート: { web: 3122 }
244
+ 使用するポート: { web: 3122 }
245
+ .envに書き込みました
246
+ ✅ PostgreSQLは既に起動しています
247
+ 🗄️ データベース「feature_auth」を確認中...
248
+ 📦 データベース「feature_auth」を作成します...
249
+ ✅ データベース「feature_auth」を作成しました
250
+ 🔄 マイグレーションを実行します...
251
+ ✅ マイグレーション完了
252
+
253
+ ===========================================
254
+ Worktree環境設定完了
255
+ ===========================================
256
+ Web: http://localhost:3122
257
+ PostgreSQL: localhost:25432
258
+ Database: feature_auth
259
+ PORT_WEB: 3122
260
+ ===========================================
261
+
262
+ 🚀 開発サーバーを起動します...
263
+ ```
264
+
265
+ ### PostgreSQL設定との連携
266
+
267
+ `pnpm dev`は、PostgreSQLを自動管理します(共有インスタンス方式)。
268
+
269
+ **アーキテクチャ:**
270
+ - **PostgreSQLコンテナ**: 全ワークツリーで共有(1インスタンス)
271
+ - **ポート**: `worktree.config.json`で設定(デフォルト: 25432)
272
+ - **データ分離**: database名で分離(`main`, `feature_auth`など)
273
+
274
+ **自動実行される処理:**
275
+
276
+ 1. **環境変数の自動設定**(.envに書き込み)
277
+ - `PORT_WEB`: 計算されたWebポート番号
278
+ - `DATABASE_URL`: `postgresql://...@localhost:<port>/<database_name>`
279
+ - `NEXTAUTH_URL`: `http://localhost:<port>`
280
+
281
+ 2. **PostgreSQLコンテナの起動確認**
282
+ - コンテナが起動していなければ `docker compose up -d postgres` を実行
283
+ - 設定されたポートとコンテナ名を使用
284
+
285
+ 3. **ヘルスチェック**
286
+ - 最大30秒間、PostgreSQLの起動を待機
287
+ - `pg_isready`コマンドで接続確認
288
+
289
+ 4. **データベースの自動作成**
290
+ - ブランチ名からdatabase名を生成(例: `feature_auth`)
291
+ - 存在しなければ `CREATE DATABASE` で自動作成
292
+
293
+ ## よく使うコマンド一覧
294
+
295
+ ### 開発サーバー
296
+
297
+ ```bash
298
+ # 全自動で開発サーバー起動(推奨)
299
+ pnpm dev
300
+
301
+ # 環境準備のみ(devサーバー起動しない)
302
+ pnpm env:prepare
303
+
304
+ # 環境準備をスキップして直接起動
305
+ pnpm dev:skip-setup
306
+ ```
307
+
308
+ ### ビルド
309
+
310
+ ```bash
311
+ # 全アプリケーションをビルド
312
+ pnpm build
313
+
314
+ # 本番モードで起動(ビルド後)
315
+ pnpm start
316
+ ```
317
+
318
+ ### コード品質
319
+
320
+ ```bash
321
+ # リント(Biome)
322
+ pnpm lint
323
+ pnpm lint:fix
324
+
325
+ # フォーマット(Biome)
326
+ pnpm format
327
+ pnpm format:fix
328
+
329
+ # 型チェック
330
+ pnpm typecheck
331
+ ```
332
+
333
+ ### テスト
334
+
335
+ ```bash
336
+ # ユニットテスト
337
+ pnpm test
338
+
339
+ # ウォッチモード
340
+ pnpm test:watch
341
+
342
+ # UIモード
343
+ pnpm test:ui
344
+
345
+ # カバレッジ付きテスト
346
+ pnpm test:coverage
347
+ ```
348
+
349
+ ### データベース操作
350
+
351
+ ```bash
352
+ # Prisma Clientを生成
353
+ pnpm db:generate
354
+
355
+ # スキーマをDBに反映(開発用)
356
+ pnpm db:push
357
+
358
+ # マイグレーション作成・実行
359
+ pnpm db:migrate
360
+
361
+ # Prisma Studioを起動(GUI)
362
+ pnpm db:studio
363
+ ```
364
+
365
+ ### Docker操作
366
+
367
+ ```bash
368
+ # PostgreSQL起動
369
+ docker compose up -d postgres
370
+
371
+ # PostgreSQL停止
372
+ docker compose down
373
+
374
+ # ログ確認
375
+ docker compose logs -f postgres
376
+
377
+ # コンテナ状態確認
378
+ docker compose ps
379
+ ```
380
+
381
+ ## トラブルシューティング
382
+
383
+ ### ポート番号が競合している
384
+
385
+ **症状**: `Error: listen EADDRINUSE: address already in use :::3000`
386
+
387
+ **原因**: 指定されたポートが既に使用されています。
388
+
389
+ **解決策**:
390
+
391
+ 1. **既存プロセスを終了**:
392
+ ```bash
393
+ # macOS/Linux
394
+ lsof -ti:3000 | xargs kill -9
395
+ ```
396
+
397
+ 2. **自動でリトライ**:
398
+ `pnpm dev`は衝突を検出すると自動的に別のポートを試行します。
399
+
400
+ ### PostgreSQLに接続できない
401
+
402
+ **症状**: `Error: Can't reach database server at localhost:25432`
403
+
404
+ **原因**: PostgreSQLが起動していない、またはポート設定が間違っています。
405
+
406
+ **解決策**:
407
+
408
+ 1. **Dockerコンテナの状態確認**:
409
+ ```bash
410
+ docker compose ps
411
+ ```
412
+
413
+ 2. **PostgreSQLを再起動**:
414
+ ```bash
415
+ docker compose down
416
+ docker compose up -d postgres
417
+ ```
418
+
419
+ 3. **ログを確認**:
420
+ ```bash
421
+ docker compose logs postgres
422
+ ```
423
+
424
+ 4. **ポート番号を確認**:
425
+ `worktree.config.json`の`postgres.port`が正しいか確認してください。
426
+
427
+ ### Prismaマイグレーションが失敗する
428
+
429
+ **症状**: `Error: P1001: Can't reach database server`
430
+
431
+ **解決策**:
432
+
433
+ 1. **DATABASE_URLを確認**:
434
+ ```bash
435
+ cat .env | grep DATABASE_URL
436
+ ```
437
+
438
+ 2. **Prisma Clientを再生成**:
439
+ ```bash
440
+ pnpm db:generate
441
+ ```
442
+
443
+ 3. **環境を再セットアップ**:
444
+ ```bash
445
+ pnpm env:prepare
446
+ ```
447
+
448
+ ### pnpm installが失敗する
449
+
450
+ **症状**: `ERR_PNPM_OUTDATED_LOCKFILE`
451
+
452
+ **解決策**:
453
+
454
+ 1. **lockfileを更新**:
455
+ ```bash
456
+ pnpm install --no-frozen-lockfile
457
+ ```
458
+
459
+ 2. **キャッシュをクリア**:
460
+ ```bash
461
+ pnpm store prune
462
+ pnpm install
463
+ ```
464
+
465
+ ### HMRが動作しない
466
+
467
+ **症状**: コード変更が反映されない
468
+
469
+ **解決策**:
470
+
471
+ 1. **開発サーバーを再起動**:
472
+ ```bash
473
+ # Ctrl+C で停止後
474
+ pnpm dev
475
+ ```
476
+
477
+ 2. **共有パッケージの変更の場合**:
478
+ パッケージを再ビルドしてから開発サーバーを再起動します。
479
+
480
+ ### Turborepoのキャッシュをクリアしたい
481
+
482
+ **症状**: 古いビルド結果が使われている
483
+
484
+ **解決策**:
485
+
486
+ ```bash
487
+ # Turborepoキャッシュを削除
488
+ rm -rf .turbo
489
+
490
+ # 再ビルド
491
+ pnpm build
492
+ ```
493
+
494
+ ## 環境変数リファレンス
495
+
496
+ ### .env(自動生成)
497
+
498
+ | 変数名 | 説明 | 例 |
499
+ |-------|------|-----|
500
+ | `DATABASE_URL` | データベース接続URL | postgresql://...@localhost:25432/main |
501
+ | `NEXTAUTH_SECRET` | NextAuth.jsのシークレットキー | (自動生成) |
502
+ | `NEXTAUTH_URL` | NextAuth.jsのベースURL | http://localhost:3122 |
503
+ | `PORT_WEB` | Webアプリのポート | 3122 |
504
+ | `PORT` | 後方互換性用ポート | 3122 |
505
+
506
+ ### .env.local(手動設定)
507
+
508
+ | 変数名 | 説明 | 例 |
509
+ |-------|------|-----|
510
+ | `GITHUB_TOKEN` | GitHub MCP接続用トークン | ghp_xxx |
511
+ | `AUTH_GOOGLE_ID` | Google OAuth Client ID | xxx.apps.googleusercontent.com |
512
+ | `AUTH_GOOGLE_SECRET` | Google OAuth Client Secret | xxx |
513
+
514
+ ## 次のステップ
515
+
516
+ 環境構築が完了したら、以下のドキュメントも参照してください:
517
+
518
+ - **[タスク実行ガイド](./task-execute.md)**: /task-execコマンドの使用方法
519
+ - **[コーディング規約](../../../.claude/skills/einja-coding-standards/SKILL.md)**: コードスタイルと規約
520
+ - **[テストガイドライン](../einja/steering/development/testing-strategy.md)**: Vitestを使用したテスト戦略
521
+
522
+ ## 質問・サポート
523
+
524
+ 開発環境構築で困ったことがあれば、以下を確認してください:
525
+
526
+ 1. このドキュメントのトラブルシューティングセクション
527
+ 2. プロジェクトのREADME.md
528
+ 3. GitHub Issuesで既存の問題を検索
529
+ 4. チームメンバーに相談
530
+ <!-- @einja:managed:end -->
531
+
532
+ ---
533
+
534
+ <!-- @einja:seed:start id="local-server-environment-and-worktree-project" -->
535
+ ## プロジェクト固有の設定
536
+
537
+ <!-- このセクションはプロジェクト固有の内容を追記する場所です -->
538
+ <!-- einja syncで上書きされません -->
539
+ <!-- @einja:seed:end -->