@einja/dev-cli 0.1.38 → 0.1.40

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 (106) hide show
  1. package/README.md +1 -0
  2. package/dist/lib/file-system.d.ts +1 -5
  3. package/dist/lib/file-system.d.ts.map +1 -1
  4. package/dist/lib/file-system.js +2 -8
  5. package/dist/lib/file-system.js.map +1 -1
  6. package/dist/lib/mcp-config.js +3 -3
  7. package/dist/lib/mcp-config.js.map +1 -1
  8. package/dist/lib/mcp-config.test.js +2 -2
  9. package/dist/lib/mcp-config.test.js.map +1 -1
  10. package/dist/lib/merger.d.ts.map +1 -1
  11. package/dist/lib/merger.js +5 -5
  12. package/dist/lib/merger.js.map +1 -1
  13. package/dist/lib/preset-update/file-copier.d.ts.map +1 -1
  14. package/dist/lib/preset-update/file-copier.js +5 -0
  15. package/dist/lib/preset-update/file-copier.js.map +1 -1
  16. package/dist/lib/preset-update/file-copier.test.js +26 -0
  17. package/dist/lib/preset-update/file-copier.test.js.map +1 -1
  18. package/dist/lib/sync/category-validator.d.ts +5 -1
  19. package/dist/lib/sync/category-validator.d.ts.map +1 -1
  20. package/dist/lib/sync/category-validator.js +16 -2
  21. package/dist/lib/sync/category-validator.js.map +1 -1
  22. package/dist/lib/sync/category-validator.test.js +14 -4
  23. package/dist/lib/sync/category-validator.test.js.map +1 -1
  24. package/dist/lib/sync/file-filter.d.ts.map +1 -1
  25. package/dist/lib/sync/file-filter.js +24 -0
  26. package/dist/lib/sync/file-filter.js.map +1 -1
  27. package/dist/lib/sync/file-filter.test.js +37 -0
  28. package/dist/lib/sync/file-filter.test.js.map +1 -1
  29. package/package.json +1 -1
  30. package/presets/default/.claude/agents/einja/specs/spec-qa-generator.md +40 -43
  31. package/presets/default/.claude/agents/einja/specs/spec-tasks-generator.md +16 -6
  32. package/presets/default/.claude/agents/einja/task/task-executer.md +13 -11
  33. package/presets/default/.claude/commands/einja/einja-sync.md +238 -0
  34. package/presets/default/.claude/commands/einja/spec-create.md +7 -3
  35. package/presets/default/.claude/commands/einja/task-exec.md +6 -6
  36. package/presets/default/.claude/settings.json +1 -0
  37. package/presets/default/.claude/skills/einja-coding-standards/SKILL.md +4 -3
  38. package/presets/default/.claude/skills/einja-coding-standards/references/import-conventions.md +69 -0
  39. package/presets/default/.claude/skills/einja-component-design/SKILL.md +3 -3
  40. package/presets/default/.claude/skills/einja-project-overview/SKILL.md +35 -0
  41. package/presets/default/.claude/skills/einja-skill-creator/SKILL.md +421 -0
  42. package/presets/default/.claude/skills/einja-skill-creator/scripts/init_skill.py +333 -0
  43. package/presets/default/.claude/skills/einja-skill-creator/scripts/package_skill.py +110 -0
  44. package/presets/default/.claude/skills/einja-skill-creator/scripts/quick_validate.py +117 -0
  45. package/presets/default/.claude/skills/einja-spec-context-loader/SKILL.md +6 -6
  46. package/presets/default/.claude/skills/einja-task-qa/SKILL.md +24 -22
  47. package/presets/default/.claude/skills/einja-task-qa/{reference → references}/troubleshooting.md +1 -1
  48. package/presets/default/.claude/skills/einja-task-qa/{reference → references}/usage-patterns.md +2 -2
  49. package/presets/default/.claude/skills/einja-task-qa/templates/qa-test-template.md +13 -13
  50. package/{scaffolds → presets/default}/.mcp.json +27 -6
  51. package/presets/default/.vscode/settings.json +18 -0
  52. package/presets/default/CLAUDE.md.template +192 -0
  53. package/{scaffolds → presets/default/docs/einja}/example/README.md +1 -1
  54. package/{scaffolds → presets/default/docs/einja}/example/specs/issues/issue999-example-task/qa-tests/README.md +20 -23
  55. package/presets/default/docs/einja/example/specs/issues/issue999-example-task/qa-tests/evidence/story3/.gitkeep +0 -0
  56. package/{scaffolds → presets/default/docs/einja}/example/specs/issues/issue999-example-task/qa-tests/scenarios.md +12 -16
  57. package/presets/default/docs/einja/example/specs/issues/issue999-example-task/qa-tests/story1.md +101 -0
  58. package/presets/default/docs/einja/example/specs/issues/issue999-example-task/qa-tests/story2.md +70 -0
  59. package/presets/default/docs/einja/example/specs/issues/issue999-example-task/qa-tests/story3.md +69 -0
  60. package/{scaffolds → presets/default/docs/einja}/instructions/deployment-setup.md +93 -9
  61. package/{scaffolds → presets/default/docs/einja}/instructions/environment-setup.md +152 -4
  62. package/{scaffolds → presets/default/docs/einja}/instructions/local-server-environment-and-worktree.md +99 -0
  63. package/presets/default/docs/einja/instructions/neon-cli-reference.md +605 -0
  64. package/{scaffolds → presets/default/docs/einja}/instructions/vercel-cli-reference.md +80 -0
  65. package/{scaffolds → presets/default/docs/einja}/steering/acceptance-criteria-and-qa-guide.md +3 -4
  66. package/{scaffolds → presets/default/docs/einja}/steering/development/database-guidelines.md +52 -3
  67. package/{scaffolds → presets/default/docs/einja}/steering/infrastructure/environment-variables.md +4 -4
  68. package/{scaffolds → presets/default/docs/einja}/templates/README.md +1 -1
  69. package/{scaffolds → presets/default/docs/einja}/templates/qa-test.md.template +29 -26
  70. package/presets/default/symlinks.json +0 -45
  71. package/scaffolds/cli/preset.yaml +0 -137
  72. package/scaffolds/example/specs/issues/issue999-example-task/qa-tests/phase1/1-1.md +0 -268
  73. package/scaffolds/example/specs/issues/issue999-example-task/qa-tests/phase1/1-2.md +0 -179
  74. package/scaffolds/example/specs/issues/issue999-example-task/qa-tests/phase1/1-3.md +0 -392
  75. package/scaffolds/example/specs/issues/issue999-example-task/qa-tests/phase2/2-1.md +0 -459
  76. /package/presets/default/.claude/skills/einja-coding-standards/{reference → references}/naming-conventions.md +0 -0
  77. /package/presets/default/.claude/skills/einja-coding-standards/{reference → references}/prohibited-patterns.md +0 -0
  78. /package/presets/default/.claude/skills/einja-coding-standards/{reference → references}/typescript-rules.md +0 -0
  79. /package/presets/default/.claude/skills/einja-component-design/{reference → references}/directory-structure.md +0 -0
  80. /package/presets/default/.claude/skills/einja-component-design/{reference → references}/props-patterns.md +0 -0
  81. /package/presets/default/.claude/skills/einja-component-design/{reference → references}/styling-guide.md +0 -0
  82. /package/presets/default/.claude/skills/einja-task-qa/{reference → references}/failure-patterns.md +0 -0
  83. /package/{scaffolds → presets/default/docs/einja}/example/specs/issues/issue999-example-task/design.md +0 -0
  84. /package/{scaffolds/example/specs/issues/issue999-example-task/qa-tests/phase1/evidence → presets/default/docs/einja/example/specs/issues/issue999-example-task/qa-tests/evidence/story1}/.gitkeep +0 -0
  85. /package/{scaffolds/example/specs/issues/issue999-example-task/qa-tests/phase2/evidence → presets/default/docs/einja/example/specs/issues/issue999-example-task/qa-tests/evidence/story2}/.gitkeep +0 -0
  86. /package/{scaffolds → presets/default/docs/einja}/example/specs/issues/issue999-example-task/requirements.md +0 -0
  87. /package/{scaffolds → presets/default/docs/einja}/example/specs/issues/issue999-example-task/tasks.md +0 -0
  88. /package/{scaffolds → presets/default/docs/einja}/instructions/task-execute.md +0 -0
  89. /package/{scaffolds → presets/default/docs/einja}/instructions/task-vibe-kanban-loop.md +0 -0
  90. /package/{scaffolds → presets/default/docs/einja}/steering/README.md +0 -0
  91. /package/{scaffolds → presets/default/docs/einja}/steering/architecture.md +0 -0
  92. /package/{scaffolds → presets/default/docs/einja}/steering/branch-strategy.md +0 -0
  93. /package/{scaffolds → presets/default/docs/einja}/steering/commit-rules.md +0 -0
  94. /package/{scaffolds → presets/default/docs/einja}/steering/db-schema-design.md +0 -0
  95. /package/{scaffolds → presets/default/docs/einja}/steering/development/api-development.md +0 -0
  96. /package/{scaffolds → presets/default/docs/einja}/steering/development/backend-architecture.md +0 -0
  97. /package/{scaffolds → presets/default/docs/einja}/steering/development/frontend-development.md +0 -0
  98. /package/{scaffolds → presets/default/docs/einja}/steering/development/review-guidelines.md +0 -0
  99. /package/{scaffolds → presets/default/docs/einja}/steering/development/testing-strategy.md +0 -0
  100. /package/{scaffolds → presets/default/docs/einja}/steering/development-workflow.md +0 -0
  101. /package/{scaffolds → presets/default/docs/einja}/steering/infrastructure/deployment.md +0 -0
  102. /package/{scaffolds → presets/default/docs/einja}/steering/product.md +0 -0
  103. /package/{scaffolds → presets/default/docs/einja}/steering/task-management.md +0 -0
  104. /package/{scaffolds → presets/default/docs/einja}/templates/design-simple.md.template +0 -0
  105. /package/{scaffolds → presets/default/docs/einja}/templates/design.md.template +0 -0
  106. /package/{scaffolds → presets/default/docs/einja}/templates/requirements.md.template +0 -0
@@ -0,0 +1,101 @@
1
+ # Story 1: マジックリンク認証 QAテスト結果
2
+
3
+ ## テスト対象
4
+ - **ストーリー**: Story 1 - マジックリンク認証
5
+ - **対象AC**: AC1.1〜AC1.9
6
+ - **実装日**: YYYY-MM-DD
7
+ - **テスター**: task-qa
8
+ - **最終更新**: YYYY-MM-DD HH:MM
9
+
10
+ ## テストサマリー
11
+ | ステータス | 件数 |
12
+ |----------|-----|
13
+ | ✅ PASS | 0 |
14
+ | ❌ FAIL | 0 |
15
+ | ⚠️ PARTIAL | 0 |
16
+
17
+ ---
18
+
19
+ ## 必須自動テスト結果
20
+
21
+ ### 実行コマンド
22
+ ```bash
23
+ pnpm test
24
+ pnpm test:e2e
25
+ pnpm lint
26
+ pnpm build
27
+ pnpm typecheck
28
+ ```
29
+
30
+ ### 結果
31
+ | テスト項目 | ステータス | 備考 |
32
+ |----------|----------|------|
33
+ | ユニットテスト | - | - |
34
+ | E2Eテスト | - | - |
35
+ | Lintチェック | - | - |
36
+ | ビルドチェック | - | - |
37
+ | 型チェック | - | - |
38
+
39
+ ---
40
+
41
+ ## AC1.1: 有効なメールアドレスでMagic Linkをリクエストできる
42
+
43
+ ### 受け入れ条件
44
+ - Given: ログイン画面にアクセスした
45
+ - When: 有効なメールアドレスを入力して送信
46
+ - Then: 成功メッセージが表示され、メールが送信される
47
+ - 検証レベル: Integration
48
+
49
+ ### テストシナリオ
50
+
51
+ | No | 手順 | 確認項目 | 期待値 | 結果 | 備考 |
52
+ |----|------|---------|--------|------|------|
53
+ | 1 | POST /api/auth/magic-link (email: test@example.com) | ステータスコード | 200 | - | 正常系 |
54
+ | 2 | - | レスポンスボディ | {"success":true} | - | - |
55
+ | 3 | - | メール送信イベント | イベント発火確認 | - | - |
56
+
57
+ ### ステータス: - (未実施)
58
+
59
+ #### エビデンス
60
+ - ログファイル: `qa-tests/evidence/story1/AC1-1-*.log`
61
+
62
+ ---
63
+
64
+ ## AC1.2: 無効なメールアドレスでエラーが返る
65
+
66
+ ### 受け入れ条件
67
+ - Given: ログイン画面にアクセスした
68
+ - When: 無効なメールアドレス形式で送信
69
+ - Then: バリデーションエラーが表示される
70
+ - 検証レベル: Integration
71
+
72
+ ### テストシナリオ
73
+
74
+ | No | 手順 | 確認項目 | 期待値 | 結果 | 備考 |
75
+ |----|------|---------|--------|------|------|
76
+ | 1 | POST /api/auth/magic-link (email: "invalid") | ステータスコード | 400 | - | バリデーションエラー |
77
+ | 2 | - | エラーメッセージ | 「有効なメールアドレスを入力してください」 | - | - |
78
+
79
+ ### ステータス: - (未実施)
80
+
81
+ #### エビデンス
82
+ - ログファイル: `qa-tests/evidence/story1/AC1-2-*.log`
83
+
84
+ ---
85
+
86
+ ## Story 1 全体結果サマリー
87
+
88
+ ### 全体結果
89
+ - **全体ステータス**: - (未実施)
90
+ - **完了AC**: 0/9
91
+ - **テスト合格率**: 0% (0/0)
92
+
93
+ ---
94
+
95
+ ## 報告と対応
96
+
97
+ ### 失敗原因分類
98
+ - [ ] **A: 実装ミス** → task-executerへ差し戻し
99
+ - [ ] **B: 要件齟齬** → requirements.md修正
100
+ - [ ] **C: 設計不備** → design.md修正
101
+ - [ ] **D: 環境問題** → qa再実行
@@ -0,0 +1,70 @@
1
+ # Story 2: プロフィール管理 QAテスト結果
2
+
3
+ ## テスト対象
4
+ - **ストーリー**: Story 2 - プロフィール管理
5
+ - **対象AC**: AC2.1〜AC2.3
6
+ - **実装日**: YYYY-MM-DD
7
+ - **テスター**: task-qa
8
+ - **最終更新**: YYYY-MM-DD HH:MM
9
+
10
+ ## テストサマリー
11
+ | ステータス | 件数 |
12
+ |----------|-----|
13
+ | ✅ PASS | 0 |
14
+ | ❌ FAIL | 0 |
15
+ | ⚠️ PARTIAL | 0 |
16
+
17
+ ---
18
+
19
+ ## 必須自動テスト結果
20
+
21
+ ### 結果
22
+ | テスト項目 | ステータス | 備考 |
23
+ |----------|----------|------|
24
+ | ユニットテスト | - | - |
25
+ | E2Eテスト | - | - |
26
+ | Lintチェック | - | - |
27
+ | ビルドチェック | - | - |
28
+ | 型チェック | - | - |
29
+
30
+ ---
31
+
32
+ ## AC2.1: ログイン済みユーザーがプロフィールを取得できる
33
+
34
+ ### 受け入れ条件
35
+ - Given: ユーザーがログイン済み
36
+ - When: GET /api/users/me を呼び出す
37
+ - Then: プロフィール情報がJSON形式で返る
38
+ - 検証レベル: Integration
39
+
40
+ ### テストシナリオ
41
+
42
+ | No | 手順 | 確認項目 | 期待値 | 結果 | 備考 |
43
+ |----|------|---------|--------|------|------|
44
+ | 1 | 認証トークンを取得 | - | - | - | 前提 |
45
+ | 2 | GET /api/users/me (Authorization: Bearer {token}) | ステータスコード | 200 | - | - |
46
+ | 3 | - | レスポンスにemail, nameが含まれる | JSON形式のプロフィール | - | - |
47
+
48
+ ### ステータス: - (未実施)
49
+
50
+ #### エビデンス
51
+ - ログファイル: `qa-tests/evidence/story2/AC2-1-*.log`
52
+
53
+ ---
54
+
55
+ ## Story 2 全体結果サマリー
56
+
57
+ ### 全体結果
58
+ - **全体ステータス**: - (未実施)
59
+ - **完了AC**: 0/3
60
+ - **テスト合格率**: 0% (0/0)
61
+
62
+ ---
63
+
64
+ ## 報告と対応
65
+
66
+ ### 失敗原因分類
67
+ - [ ] **A: 実装ミス** → task-executerへ差し戻し
68
+ - [ ] **B: 要件齟齬** → requirements.md修正
69
+ - [ ] **C: 設計不備** → design.md修正
70
+ - [ ] **D: 環境問題** → qa再実行
@@ -0,0 +1,69 @@
1
+ # Story 3: セキュリティ通知 QAテスト結果
2
+
3
+ ## テスト対象
4
+ - **ストーリー**: Story 3 - セキュリティ通知
5
+ - **対象AC**: AC3.1〜AC3.6
6
+ - **実装日**: YYYY-MM-DD
7
+ - **テスター**: task-qa
8
+ - **最終更新**: YYYY-MM-DD HH:MM
9
+
10
+ ## テストサマリー
11
+ | ステータス | 件数 |
12
+ |----------|-----|
13
+ | ✅ PASS | 0 |
14
+ | ❌ FAIL | 0 |
15
+ | ⚠️ PARTIAL | 0 |
16
+
17
+ ---
18
+
19
+ ## 必須自動テスト結果
20
+
21
+ ### 結果
22
+ | テスト項目 | ステータス | 備考 |
23
+ |----------|----------|------|
24
+ | ユニットテスト | - | - |
25
+ | E2Eテスト | - | - |
26
+ | Lintチェック | - | - |
27
+ | ビルドチェック | - | - |
28
+ | 型チェック | - | - |
29
+
30
+ ---
31
+
32
+ ## AC3.1: 新しいデバイスからログイン時にセキュリティ通知メールが送信される
33
+
34
+ ### 受け入れ条件
35
+ - Given: ユーザーが既にログイン履歴がある
36
+ - When: 新しいデバイスからログイン
37
+ - Then: セキュリティ通知メールが送信される
38
+ - 検証レベル: Integration
39
+
40
+ ### テストシナリオ
41
+
42
+ | No | 手順 | 確認項目 | 期待値 | 結果 | 備考 |
43
+ |----|------|---------|--------|------|------|
44
+ | 1 | 新しいUser-Agentでログインリクエスト | ログイン成功 | 200 OK | - | - |
45
+ | 2 | - | セキュリティ通知メール | メール送信イベント発火 | - | - |
46
+
47
+ ### ステータス: - (未実施)
48
+
49
+ #### エビデンス
50
+ - ログファイル: `qa-tests/evidence/story3/AC3-1-*.log`
51
+
52
+ ---
53
+
54
+ ## Story 3 全体結果サマリー
55
+
56
+ ### 全体結果
57
+ - **全体ステータス**: - (未実施)
58
+ - **完了AC**: 0/6
59
+ - **テスト合格率**: 0% (0/0)
60
+
61
+ ---
62
+
63
+ ## 報告と対応
64
+
65
+ ### 失敗原因分類
66
+ - [ ] **A: 実装ミス** → task-executerへ差し戻し
67
+ - [ ] **B: 要件齟齬** → requirements.md修正
68
+ - [ ] **C: 設計不備** → design.md修正
69
+ - [ ] **D: 環境問題** → qa再実行
@@ -23,6 +23,88 @@
23
23
 
24
24
  ---
25
25
 
26
+ ## 0. ゼロからの統合初期構築フロー
27
+
28
+ 新しいプロジェクトまたは新しい開発者が環境を構築する際の統合フローです。
29
+
30
+ ### 前提条件
31
+
32
+ 以下のツール・アカウントが必要です:
33
+
34
+ | ツール | インストール方法 | 用途 |
35
+ |--------|----------------|------|
36
+ | Volta | `curl https://get.volta.sh \| bash` | Node.jsバージョン管理 |
37
+ | pnpm | `volta install pnpm` | パッケージ管理 |
38
+ | Docker | [Docker Desktop](https://www.docker.com/products/docker-desktop/) | PostgreSQL実行 |
39
+ | GitHub CLI (`gh`) | `brew install gh` | GitHub操作 |
40
+ | Vercel CLI | `pnpm add -g vercel` | Vercelデプロイ |
41
+ | Neon CLI (`neonctl`) | `npm install -g neonctl` | Neonデータベース管理 |
42
+ | dotenvx | `brew install dotenvx/brew/dotenvx` | 環境変数暗号化 |
43
+
44
+ ### 構築ステップ
45
+
46
+ #### Step 1: リポジトリのクローンと依存関係インストール
47
+
48
+ ```bash
49
+ git clone <repository-url>
50
+ cd <project-name>
51
+ pnpm install
52
+ ```
53
+
54
+ #### Step 2: Neon初期設定
55
+
56
+ 1. [Neon Console](https://console.neon.tech/) でAPI Keyを取得
57
+ 2. `.env.personal` に `NEON_API_KEY=<取得したキー>` を設定
58
+ 3. プロジェクト作成・ブランチ設定
59
+
60
+ 詳細は [Neon CLI リファレンス](./neon-cli-reference.md) のセクション5「実践例」を参照。
61
+
62
+ #### Step 3: Vercel初期設定
63
+
64
+ 1. [Vercel Dashboard](https://vercel.com/account/tokens) でトークンを取得
65
+ 2. `.env.personal` に `VERCEL_TOKEN=<取得したトークン>` を設定
66
+ 3. `vercel link --project=<プロジェクト名> --yes` でプロジェクト接続
67
+
68
+ 詳細は [Vercel CLI リファレンス](./vercel-cli-reference.md) を参照。
69
+
70
+ #### Step 4: GitHub Secrets一括設定
71
+
72
+ `.env.keys` から秘密鍵を自動抽出してGitHub Secretsに設定:
73
+
74
+ ```bash
75
+ for key_name in PREVIEW PRODUCTION DEVELOP STAGING; do
76
+ value=$(grep "DOTENV_PRIVATE_KEY_${key_name}" .env.keys | cut -d'=' -f2 | tr -d '"'"'"')
77
+ [ -n "$value" ] && gh secret set "DOTENV_PRIVATE_KEY_${key_name}" --body "$value"
78
+ done
79
+ ```
80
+
81
+ 詳細はセクション6「GitHub Secrets登録」を参照。
82
+
83
+ #### Step 5: ローカル環境変数設定
84
+
85
+ ```bash
86
+ pnpm env:update
87
+ ```
88
+
89
+ ウィザードに従って個人トークンと環境変数を設定。
90
+ 詳細は [環境変数セットアップ](./environment-setup.md) を参照。
91
+
92
+ #### Step 6: 初回起動
93
+
94
+ ```bash
95
+ pnpm dev:setup # 初回セットアップ(DB起動・マイグレーション含む)
96
+ pnpm dev:bg # 開発サーバー起動
97
+ ```
98
+
99
+ #### Step 7: 動作確認
100
+
101
+ - [ ] ローカル開発サーバーにアクセスできる
102
+ - [ ] ログインが正常に動作する
103
+ - [ ] PRを作成してCI(GitHub Actions)が正常に動作する
104
+ - [ ] Preview環境にデプロイされる
105
+
106
+ ---
107
+
26
108
  ## 1. 必要なSecrets一覧
27
109
 
28
110
  ### 必須Secrets
@@ -104,17 +186,19 @@ pnpm env:update
104
186
 
105
187
  Preview環境用のDBブランチは以下のルールで自動作成されます:
106
188
 
107
- | PRブランチ名 | 作成されるDBブランチ名 | 親ブランチ |
108
- |------------|---------------------|----------|
109
- | `feature/user-auth` | `preview/feature-user-auth` | `main` |
110
- | `fix/login-bug` | `preview/fix-login-bug` | `main` |
111
- | `feat/dashboard` | `preview/feat-dashboard` | `main` |
189
+ | 環境 | PR番号 | DBブランチ名 | 説明 |
190
+ |------|-------|------------|------|
191
+ | production | - | production | 本番環境 |
192
+ | develop | - | development | 開発環境 |
193
+ | preview | #123 | preview/pr-123 | PR番号から自動生成 |
112
194
 
113
195
  **重要**:
114
196
  - DBブランチ名はGitブランチ名から自動変換(`/`→`-`、小文字化)
115
197
  - プレフィックス `preview/` が自動付与
116
198
  - PR作成時に自動作成、PRクローズ時に自動削除
117
199
 
200
+ > **Neon CLI/APIの詳細**: [Neon CLI リファレンス](./neon-cli-reference.md) を参照してください。
201
+
118
202
  ### Vercel Postgres
119
203
 
120
204
  ```bash
@@ -306,10 +390,10 @@ gh secret set RAILWAY_SERVICE_ID --body "サービスID"
306
390
  # 2. 「New repository secret」で以下を追加
307
391
 
308
392
  # --- 復号鍵(.env.keysから取得) ---
309
- gh secret set DOTENV_PRIVATE_KEY_PREVIEW --body "$(grep DOTENV_PRIVATE_KEY_PREVIEW .env.keys | cut -d'\"' -f2)"
310
- gh secret set DOTENV_PRIVATE_KEY_PRODUCTION --body "$(grep DOTENV_PRIVATE_KEY_PRODUCTION .env.keys | cut -d'\"' -f2)"
311
- gh secret set DOTENV_PRIVATE_KEY_DEVELOP --body "$(grep DOTENV_PRIVATE_KEY_DEVELOP .env.keys | cut -d'\"' -f2)"
312
- gh secret set DOTENV_PRIVATE_KEY_STAGING --body "$(grep DOTENV_PRIVATE_KEY_STAGING .env.keys | cut -d'\"' -f2)"
393
+ gh secret set DOTENV_PRIVATE_KEY_PREVIEW --body "$(grep DOTENV_PRIVATE_KEY_PREVIEW .env.keys | cut -d= -f2 | tr -d '"'"'"')"
394
+ gh secret set DOTENV_PRIVATE_KEY_PRODUCTION --body "$(grep DOTENV_PRIVATE_KEY_PRODUCTION .env.keys | cut -d= -f2 | tr -d '"'"'"')"
395
+ gh secret set DOTENV_PRIVATE_KEY_DEVELOP --body "$(grep DOTENV_PRIVATE_KEY_DEVELOP .env.keys | cut -d= -f2 | tr -d '"'"'"')"
396
+ gh secret set DOTENV_PRIVATE_KEY_STAGING --body "$(grep DOTENV_PRIVATE_KEY_STAGING .env.keys | cut -d= -f2 | tr -d '"'"'"')"
313
397
 
314
398
  # --- Vercel ---
315
399
  gh secret set VERCEL_TOKEN --body "取得したトークン"
@@ -155,7 +155,6 @@ dotenvx decrypt -f .env.production
155
155
  ├── .env.local # ローカル開発用(暗号化・Git追跡)★
156
156
  ├── .env.develop # dev検証サーバー用(暗号化・Git追跡)
157
157
  ├── .env.production # 本番環境用(暗号化・Git追跡)
158
- ├── .env.ci # CI/CD用(暗号化・Git追跡)
159
158
  ├── .env.keys # 秘密鍵(Git除外・1Password等で共有)
160
159
  ├── .env # .env.localを復号したもの(Git除外)
161
160
  └── .env.personal # 個人用トークン(Git除外)
@@ -316,13 +315,13 @@ git push
316
315
 
317
316
  ```bash
318
317
  # CI用秘密鍵を登録
319
- gh secret set DOTENV_PRIVATE_KEY_CI --body "$(grep DOTENV_PRIVATE_KEY_CI .env.keys | cut -d= -f2)"
318
+ gh secret set DOTENV_PRIVATE_KEY_CI --body "$(grep DOTENV_PRIVATE_KEY_CI .env.keys | cut -d= -f2 | tr -d '"'"'"')"
320
319
 
321
320
  # Preview用秘密鍵を登録(Preview環境を使う場合)
322
- gh secret set DOTENV_PRIVATE_KEY_PREVIEW --body "$(grep DOTENV_PRIVATE_KEY_PREVIEW .env.keys | cut -d= -f2)"
321
+ gh secret set DOTENV_PRIVATE_KEY_PREVIEW --body "$(grep DOTENV_PRIVATE_KEY_PREVIEW .env.keys | cut -d= -f2 | tr -d '"'"'"')"
323
322
 
324
323
  # 本番用秘密鍵を登録(必要に応じて)
325
- gh secret set DOTENV_PRIVATE_KEY_PRODUCTION --body "$(grep DOTENV_PRIVATE_KEY_PRODUCTION .env.keys | cut -d= -f2)"
324
+ gh secret set DOTENV_PRIVATE_KEY_PRODUCTION --body "$(grep DOTENV_PRIVATE_KEY_PRODUCTION .env.keys | cut -d= -f2 | tr -d '"'"'"')"
326
325
  ```
327
326
 
328
327
  ### Vercel環境変数への登録
@@ -489,6 +488,155 @@ dotenvx run -f .env -f .env.local -- <command>
489
488
  - [dotenvx公式ドキュメント](https://dotenvx.com/docs)
490
489
  - [dotenvx暗号化の仕組み](https://dotenvx.com/encryption)
491
490
  - [direnv公式ドキュメント](https://direnv.net/)
491
+
492
+ ## チーム共有設定変更フロー
493
+
494
+ チーム全体で共有する環境変数(`.env.develop`, `.env.preview`, `.env.production` 等)を変更する手順:
495
+
496
+ ### 手順
497
+
498
+ 1. **復号化**: 暗号化されたファイルを復号
499
+ ```bash
500
+ dotenvx decrypt -f .env.develop --stdout > .env.develop.tmp
501
+ ```
502
+
503
+ 2. **編集**: 一時ファイルを編集
504
+ ```bash
505
+ # エディタで .env.develop.tmp を編集
506
+ ```
507
+
508
+ 3. **元ファイルに反映**: 編集内容を元ファイルにコピー
509
+ ```bash
510
+ cp .env.develop.tmp .env.develop
511
+ rm .env.develop.tmp
512
+ ```
513
+
514
+ 4. **再暗号化**: 変更を暗号化
515
+ ```bash
516
+ dotenvx encrypt -f .env.develop
517
+ ```
518
+
519
+ 5. **コミット**: 暗号化されたファイルをコミット
520
+ ```bash
521
+ git add .env.develop
522
+ git commit -m "chore: develop環境の環境変数を更新"
523
+ ```
524
+
525
+ > **⚠️ 警告**: `.env.production` を編集する場合は、本番環境への影響を十分に確認してから行ってください。
526
+
527
+ ## 新規環境変数追加フロー
528
+
529
+ プロジェクトに新しい環境変数を追加する手順:
530
+
531
+ ### 手順
532
+
533
+ 1. **`.env.example` にキーを追加**(デフォルト値またはプレースホルダー)
534
+ ```bash
535
+ # .env.example に追記
536
+ NEW_API_KEY=your-api-key-here
537
+ ```
538
+
539
+ 2. **各環境ファイルに追加**
540
+ - `.env.local` - ローカル開発用の値
541
+ - `.env.develop` - 開発環境用の値
542
+ - `.env.preview` - プレビュー環境用の値
543
+ - `.env.production` - 本番環境用の値
544
+ - `.env.staging` - ステージング環境用の値(該当する場合)
545
+
546
+ 3. **暗号化ファイルの編集**
547
+ 暗号化されたファイル(`.env.local`, `.env.develop`, `.env.production`, `.env.preview`)を編集する場合:
548
+ ```bash
549
+ # 復号してテンポラリファイルに出力
550
+ dotenvx decrypt -f .env.local --stdout > .env.local.tmp
551
+
552
+ # エディタで編集
553
+ vi .env.local.tmp # または好みのエディタ
554
+
555
+ # 元ファイルを削除して編集済みファイルをリネーム
556
+ rm .env.local
557
+ mv .env.local.tmp .env.local
558
+
559
+ # 再暗号化
560
+ dotenvx encrypt -f .env.local
561
+ ```
562
+
563
+ **注意**: 同じ手順を他の環境ファイルにも適用してください。
564
+
565
+ 4. **非暗号化ファイルの編集**
566
+ 非暗号化ファイル(`.env`, `.env.personal`)は直接編集可能:
567
+ ```bash
568
+ # .env.personal を直接編集(GITHUB_TOKEN等の個人トークン)
569
+ vi .env.personal
570
+
571
+ # .env は通常 .env.local から自動生成されるため、直接編集は非推奨
572
+ # .env.local を編集して pnpm dev:setup を再実行する
573
+ ```
574
+
575
+ 5. **環境固有の変数かどうかを確認**
576
+ 新規変数が以下に該当する場合、他環境への展開要否を確認:
577
+ - **全環境共通**: すべての環境ファイルに同じ値を追加
578
+ - **環境固有**: 該当環境のみに追加(例: `PRODUCTION_ONLY_FLAG=true`)
579
+ - **開発専用**: `.env.local`, `.env.develop`, `.env.preview` のみに追加
580
+
581
+ 6. **暗号化ファイルの再暗号化**
582
+ 編集が完了したら、すべての環境ファイルを再暗号化:
583
+ ```bash
584
+ dotenvx encrypt -f .env.local
585
+ dotenvx encrypt -f .env.develop
586
+ dotenvx encrypt -f .env.preview
587
+ dotenvx encrypt -f .env.production
588
+ ```
589
+
590
+ 7. **デプロイ環境への同期**
591
+ 新規環境変数をCI/CDやホスティングサービスに反映させる必要がある場合:
592
+
593
+ - **GitHub Secrets(CI/CD用)**:
594
+ 秘密鍵が変更された場合は [デプロイメントセットアップ](./deployment-setup.md) のセクション6を参照
595
+ ```bash
596
+ # 新規Secretの追加
597
+ gh secret set NEW_API_KEY --body "your-api-key-value"
598
+ ```
599
+
600
+ - **Vercel環境変数(本番/プレビュー用)**:
601
+ 初回は手動同期、以降はGitHub Actionsが自動同期
602
+ ```bash
603
+ # Vercel CLIで設定
604
+ vercel env add NEW_API_KEY production
605
+ vercel env add NEW_API_KEY preview
606
+ ```
607
+
608
+ - **詳細手順**: [deployment-setup.md](./deployment-setup.md) を参照
609
+
610
+ 8. **コミット**
611
+ 暗号化ファイルと `.env.example` の変更をコミット:
612
+ ```bash
613
+ git add .env.example .env.local .env.develop .env.preview .env.production
614
+ git commit -m "chore: NEW_API_KEY 環境変数を追加"
615
+ git push
616
+ ```
617
+
618
+ ## .env.personal のセキュリティ
619
+
620
+ `.env.personal` は個人のAPIトークン・キーを管理するファイルです。
621
+
622
+ ### 管理対象トークン
623
+
624
+ | トークン | 取得先 | 用途 |
625
+ |---------|-------|------|
626
+ | `VERCEL_TOKEN` | [Vercel Dashboard](https://vercel.com/account/tokens) | Vercel CLI認証 |
627
+ | `NEON_API_KEY` | [Neon Console](https://console.neon.tech/account/api-keys) | Neon CLI認証 |
628
+ | `GITHUB_TOKEN` | [GitHub Settings](https://github.com/settings/tokens) | GitHub API認証 |
629
+
630
+ ### セキュリティルール
631
+
632
+ - **Git管理対象外**: `.gitignore` で除外済み
633
+ - **dotenvx暗号化対象外**: 個人ファイルのため暗号化不要
634
+ - **権限設定**: ファイル作成後は必ず実行
635
+ ```bash
636
+ chmod 600 .env.personal
637
+ ```
638
+ - **ローテーション推奨**: 90日ごとにトークンを更新することを推奨
639
+ - **共有禁止**: 他の開発者とトークンを共有しないこと
492
640
  <!-- @einja:managed:end -->
493
641
 
494
642
  ---
@@ -424,6 +424,20 @@ docker compose ps
424
424
  4. **ポート番号を確認**:
425
425
  `worktree.config.json`の`postgres.port`が正しいか確認してください。
426
426
 
427
+ ### `pnpm dev:setup` 失敗時の診断
428
+
429
+ `pnpm dev:setup` コマンドが失敗した場合、以下のテーブルでエラーパターンを診断し、対処してください。
430
+
431
+ | エラーパターン | 診断 | 対処 |
432
+ |---------------|------|------|
433
+ | `ENOENT: no such file or directory, open '.env.keys'` | `.env.keys`不在 | メインworktreeからコピー、または1Password等から取得して手動配置 |
434
+ | `Error: connect ECONNREFUSED 127.0.0.1:25432` | PostgreSQL未起動 | `docker compose up -d postgres` → 10秒待機 → `docker compose exec postgres pg_isready` |
435
+ | `prisma:error Error in schema` | Prismaスキーマエラー | エラーメッセージを確認し、`packages/server-core/prisma/schema.prisma`を修正 |
436
+ | `Node.js version mismatch` / `Unsupported engine` | Node.jsバージョン不一致 | `volta install node@22` または `fnm use 22` |
437
+ | `pnpm: command not found` | pnpm未インストール | `volta install pnpm@10` または `npm i -g pnpm@10` |
438
+ | `EACCES: permission denied` | ファイル権限エラー | 対象ファイルの権限確認(`ls -la`)、必要に応じて`chmod`で修正 |
439
+ | `Cannot find module` | 依存関係不足 | `pnpm install` を再実行、`node_modules`を削除して再インストール |
440
+
427
441
  ### Prismaマイグレーションが失敗する
428
442
 
429
443
  **症状**: `Error: P1001: Can't reach database server`
@@ -527,6 +541,91 @@ pnpm build
527
541
  2. プロジェクトのREADME.md
528
542
  3. GitHub Issuesで既存の問題を検索
529
543
  4. チームメンバーに相談
544
+
545
+ ## Prisma単独セットアップ
546
+
547
+ 開発サーバー全体を起動せずにPrismaのみを操作する場合のコマンド:
548
+
549
+ | コマンド | 説明 | 用途 |
550
+ |---------|------|------|
551
+ | `pnpm db:generate` | Prismaクライアント生成 | スキーマ変更後の型生成 |
552
+ | `pnpm db:push` | スキーマをDBに反映 | プロトタイピング時(マイグレーション不使用) |
553
+ | `pnpm db:migrate:deploy` | マイグレーション実行 | 本番環境・CI環境でのスキーマ適用 |
554
+ | `pnpm db:migrate:dev` | マイグレーション作成・適用 | 開発時の新しいマイグレーション作成 |
555
+ | `pnpm db:studio` | Prisma Studio起動 | ブラウザでのDB閲覧・編集 |
556
+
557
+ ### 使い分け
558
+
559
+ - **開発中のスキーマ変更**: `db:push`(マイグレーションファイルを作成せずに即座に反映)
560
+ - **マイグレーション確定時**: `db:migrate:dev`(マイグレーションファイルを生成)
561
+ - **デプロイ時**: `db:migrate:deploy`(既存マイグレーションを適用)
562
+
563
+ > **注意**: `db:push` はマイグレーション履歴を作成しません。チームで共有する変更は必ず `db:migrate:dev` でマイグレーションを作成してください。
564
+
565
+ ## 包括的ヘルスチェック
566
+
567
+ 開発環境の状態を一括で確認するためのチェック項目:
568
+
569
+ ### 1. ランタイム環境
570
+
571
+ ```bash
572
+ # Node.jsバージョン(v22.16.0が期待値)
573
+ node -v
574
+
575
+ # pnpmバージョン
576
+ pnpm -v
577
+
578
+ # Volta確認
579
+ volta list
580
+ ```
581
+
582
+ ### 2. Docker / PostgreSQL
583
+
584
+ ```bash
585
+ # Dockerコンテナ状態
586
+ docker-compose ps
587
+
588
+ # PostgreSQL接続確認(ポート25432)
589
+ docker-compose exec postgres pg_isready -U postgres -p 5432
590
+ ```
591
+
592
+ ### 3. 環境変数ファイル
593
+
594
+ ```bash
595
+ # 必須ファイルの存在確認
596
+ for f in .env .env.local .env.keys .env.personal; do
597
+ [ -f "$f" ] && echo "✅ $f" || echo "❌ $f が見つかりません"
598
+ done
599
+
600
+ # .env.personalの権限確認
601
+ stat -f "%Lp" .env.personal 2>/dev/null | grep -q "600" && echo "✅ .env.personal: 権限OK (600)" || echo "⚠️ .env.personal: chmod 600 を実行してください"
602
+ ```
603
+
604
+ ### 4. Prismaスキーマ
605
+
606
+ ```bash
607
+ # スキーマ検証
608
+ pnpm db:generate
609
+
610
+ # マイグレーション状態
611
+ pnpm db:migrate:status 2>/dev/null || echo "マイグレーション状態の確認にはDB接続が必要です"
612
+ ```
613
+
614
+ ### 5. 開発サーバー
615
+
616
+ ```bash
617
+ # サーバー状態確認
618
+ pnpm dev:status
619
+ ```
620
+
621
+ ### 6. CLI ツール
622
+
623
+ ```bash
624
+ # 各CLIの存在確認
625
+ for cmd in gh vercel neonctl dotenvx; do
626
+ command -v $cmd >/dev/null 2>&1 && echo "✅ $cmd: $(command -v $cmd)" || echo "❌ $cmd: 未インストール"
627
+ done
628
+ ```
530
629
  <!-- @einja:managed:end -->
531
630
 
532
631
  ---