@einja/dev-cli 0.1.9 → 0.1.11

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 (251) hide show
  1. package/README.md +30 -2
  2. package/dist/cli.js +3 -6
  3. package/dist/cli.js.map +1 -1
  4. package/dist/commands/init.d.ts.map +1 -1
  5. package/dist/commands/init.js +11 -6
  6. package/dist/commands/init.js.map +1 -1
  7. package/dist/commands/list.js +1 -1
  8. package/dist/commands/list.js.map +1 -1
  9. package/dist/commands/sync.d.ts.map +1 -1
  10. package/dist/commands/sync.js +69 -7
  11. package/dist/commands/sync.js.map +1 -1
  12. package/dist/commands/sync.test.js +11 -25
  13. package/dist/commands/sync.test.js.map +1 -1
  14. package/dist/commands/task-loop/index.d.ts.map +1 -1
  15. package/dist/commands/task-loop/index.js +5 -2
  16. package/dist/commands/task-loop/index.js.map +1 -1
  17. package/dist/commands/task-loop/lib/__mocks__/child-process.mock.d.ts +227 -0
  18. package/dist/commands/task-loop/lib/__mocks__/child-process.mock.d.ts.map +1 -0
  19. package/dist/commands/task-loop/lib/__mocks__/child-process.mock.js +351 -0
  20. package/dist/commands/task-loop/lib/__mocks__/child-process.mock.js.map +1 -0
  21. package/dist/commands/task-loop/lib/__mocks__/sample-issues.d.ts +46 -0
  22. package/dist/commands/task-loop/lib/__mocks__/sample-issues.d.ts.map +1 -0
  23. package/dist/commands/task-loop/lib/__mocks__/sample-issues.js +224 -0
  24. package/dist/commands/task-loop/lib/__mocks__/sample-issues.js.map +1 -0
  25. package/dist/commands/task-loop/lib/branch-manager.d.ts.map +1 -1
  26. package/dist/commands/task-loop/lib/branch-manager.js +14 -8
  27. package/dist/commands/task-loop/lib/branch-manager.js.map +1 -1
  28. package/dist/commands/task-loop/lib/branch-manager.test.d.ts +2 -0
  29. package/dist/commands/task-loop/lib/branch-manager.test.d.ts.map +1 -0
  30. package/dist/commands/task-loop/lib/branch-manager.test.js +539 -0
  31. package/dist/commands/task-loop/lib/branch-manager.test.js.map +1 -0
  32. package/dist/commands/task-loop/lib/conflict-handler.js +1 -1
  33. package/dist/commands/task-loop/lib/conflict-handler.js.map +1 -1
  34. package/dist/commands/task-loop/lib/dependency-resolver.test.d.ts +2 -0
  35. package/dist/commands/task-loop/lib/dependency-resolver.test.d.ts.map +1 -0
  36. package/dist/commands/task-loop/lib/dependency-resolver.test.js +1129 -0
  37. package/dist/commands/task-loop/lib/dependency-resolver.test.js.map +1 -0
  38. package/dist/commands/task-loop/lib/gh-setup.d.ts.map +1 -1
  39. package/dist/commands/task-loop/lib/gh-setup.js.map +1 -1
  40. package/dist/commands/task-loop/lib/github-client.d.ts.map +1 -1
  41. package/dist/commands/task-loop/lib/github-client.js +3 -3
  42. package/dist/commands/task-loop/lib/github-client.js.map +1 -1
  43. package/dist/commands/task-loop/lib/github-client.test.d.ts +2 -0
  44. package/dist/commands/task-loop/lib/github-client.test.d.ts.map +1 -0
  45. package/dist/commands/task-loop/lib/github-client.test.js +377 -0
  46. package/dist/commands/task-loop/lib/github-client.test.js.map +1 -0
  47. package/dist/commands/task-loop/lib/issue-parser.js +4 -4
  48. package/dist/commands/task-loop/lib/issue-parser.js.map +1 -1
  49. package/dist/commands/task-loop/lib/issue-parser.test.d.ts +2 -0
  50. package/dist/commands/task-loop/lib/issue-parser.test.d.ts.map +1 -0
  51. package/dist/commands/task-loop/lib/issue-parser.test.js +854 -0
  52. package/dist/commands/task-loop/lib/issue-parser.test.js.map +1 -0
  53. package/dist/commands/task-loop/lib/pull-request-manager.d.ts +35 -0
  54. package/dist/commands/task-loop/lib/pull-request-manager.d.ts.map +1 -0
  55. package/dist/commands/task-loop/lib/pull-request-manager.js +150 -0
  56. package/dist/commands/task-loop/lib/pull-request-manager.js.map +1 -0
  57. package/dist/commands/task-loop/lib/task-number-utils.d.ts +10 -4
  58. package/dist/commands/task-loop/lib/task-number-utils.d.ts.map +1 -1
  59. package/dist/commands/task-loop/lib/task-number-utils.js +19 -10
  60. package/dist/commands/task-loop/lib/task-number-utils.js.map +1 -1
  61. package/dist/commands/task-loop/lib/task-number-utils.test.d.ts +2 -0
  62. package/dist/commands/task-loop/lib/task-number-utils.test.d.ts.map +1 -0
  63. package/dist/commands/task-loop/lib/task-number-utils.test.js +379 -0
  64. package/dist/commands/task-loop/lib/task-number-utils.test.js.map +1 -0
  65. package/dist/commands/task-loop/lib/task-state-manager.d.ts.map +1 -1
  66. package/dist/commands/task-loop/lib/task-state-manager.js +1 -1
  67. package/dist/commands/task-loop/lib/task-state-manager.js.map +1 -1
  68. package/dist/commands/task-loop/lib/task-state-manager.test.d.ts +2 -0
  69. package/dist/commands/task-loop/lib/task-state-manager.test.d.ts.map +1 -0
  70. package/dist/commands/task-loop/lib/task-state-manager.test.js +541 -0
  71. package/dist/commands/task-loop/lib/task-state-manager.test.js.map +1 -0
  72. package/dist/lib/file-system.js +1 -1
  73. package/dist/lib/file-system.js.map +1 -1
  74. package/dist/lib/mcp-config.d.ts.map +1 -1
  75. package/dist/lib/mcp-config.js +8 -4
  76. package/dist/lib/mcp-config.js.map +1 -1
  77. package/dist/lib/mcp-config.test.js +2 -2
  78. package/dist/lib/mcp-config.test.js.map +1 -1
  79. package/dist/lib/merger.d.ts.map +1 -1
  80. package/dist/lib/merger.js.map +1 -1
  81. package/dist/lib/preset-update/cli-repo-detector.test.js.map +1 -1
  82. package/dist/lib/preset-update/file-copier.d.ts +2 -0
  83. package/dist/lib/preset-update/file-copier.d.ts.map +1 -1
  84. package/dist/lib/preset-update/file-copier.js +12 -8
  85. package/dist/lib/preset-update/file-copier.js.map +1 -1
  86. package/dist/lib/preset-update/file-copier.test.js +36 -5
  87. package/dist/lib/preset-update/file-copier.test.js.map +1 -1
  88. package/dist/lib/preset-update/preset-finder.d.ts +1 -1
  89. package/dist/lib/preset-update/preset-finder.d.ts.map +1 -1
  90. package/dist/lib/preset-update/preset-finder.js +1 -1
  91. package/dist/lib/preset-update/preset-finder.js.map +1 -1
  92. package/dist/lib/preset-update/preset-finder.test.js +11 -11
  93. package/dist/lib/preset-update/preset-finder.test.js.map +1 -1
  94. package/dist/lib/preset.js +3 -3
  95. package/dist/lib/preset.js.map +1 -1
  96. package/dist/lib/sync/backup-manager.d.ts.map +1 -1
  97. package/dist/lib/sync/backup-manager.js +1 -1
  98. package/dist/lib/sync/backup-manager.js.map +1 -1
  99. package/dist/lib/sync/backup-manager.test.js +2 -2
  100. package/dist/lib/sync/backup-manager.test.js.map +1 -1
  101. package/dist/lib/sync/batch-processor.d.ts.map +1 -1
  102. package/dist/lib/sync/batch-processor.js.map +1 -1
  103. package/dist/lib/sync/batch-processor.test.js.map +1 -1
  104. package/dist/lib/sync/category-validator.d.ts.map +1 -1
  105. package/dist/lib/sync/category-validator.js.map +1 -1
  106. package/dist/lib/sync/category-validator.test.js +2 -11
  107. package/dist/lib/sync/category-validator.test.js.map +1 -1
  108. package/dist/lib/sync/conflict-reporter.d.ts.map +1 -1
  109. package/dist/lib/sync/conflict-reporter.js +1 -2
  110. package/dist/lib/sync/conflict-reporter.js.map +1 -1
  111. package/dist/lib/sync/conflict-reporter.test.js +2 -7
  112. package/dist/lib/sync/conflict-reporter.test.js.map +1 -1
  113. package/dist/lib/sync/diff-engine.d.ts.map +1 -1
  114. package/dist/lib/sync/diff-engine.js +2 -4
  115. package/dist/lib/sync/diff-engine.js.map +1 -1
  116. package/dist/lib/sync/diff-engine.test.js.map +1 -1
  117. package/dist/lib/sync/file-filter.d.ts.map +1 -1
  118. package/dist/lib/sync/file-filter.js +26 -3
  119. package/dist/lib/sync/file-filter.js.map +1 -1
  120. package/dist/lib/sync/file-filter.test.js +26 -2
  121. package/dist/lib/sync/file-filter.test.js.map +1 -1
  122. package/dist/lib/sync/hash-cache.d.ts.map +1 -1
  123. package/dist/lib/sync/hash-cache.js.map +1 -1
  124. package/dist/lib/sync/hash-cache.test.js +2 -2
  125. package/dist/lib/sync/hash-cache.test.js.map +1 -1
  126. package/dist/lib/sync/integration.test.js +289 -2
  127. package/dist/lib/sync/integration.test.js.map +1 -1
  128. package/dist/lib/sync/marker-processor.d.ts +34 -10
  129. package/dist/lib/sync/marker-processor.d.ts.map +1 -1
  130. package/dist/lib/sync/marker-processor.js +142 -41
  131. package/dist/lib/sync/marker-processor.js.map +1 -1
  132. package/dist/lib/sync/marker-processor.test.js +134 -1
  133. package/dist/lib/sync/marker-processor.test.js.map +1 -1
  134. package/dist/lib/sync/metadata-manager.d.ts.map +1 -1
  135. package/dist/lib/sync/metadata-manager.js.map +1 -1
  136. package/dist/lib/sync/metadata-manager.test.js +4 -6
  137. package/dist/lib/sync/metadata-manager.test.js.map +1 -1
  138. package/dist/lib/sync/performance.test.js +2 -2
  139. package/dist/lib/sync/performance.test.js.map +1 -1
  140. package/dist/lib/sync/seed-synchronizer.d.ts +27 -0
  141. package/dist/lib/sync/seed-synchronizer.d.ts.map +1 -0
  142. package/dist/lib/sync/seed-synchronizer.js +72 -0
  143. package/dist/lib/sync/seed-synchronizer.js.map +1 -0
  144. package/dist/lib/sync/seed-synchronizer.test.d.ts +2 -0
  145. package/dist/lib/sync/seed-synchronizer.test.d.ts.map +1 -0
  146. package/dist/lib/sync/seed-synchronizer.test.js +147 -0
  147. package/dist/lib/sync/seed-synchronizer.test.js.map +1 -0
  148. package/dist/types/index.d.ts.map +1 -1
  149. package/dist/types/preset-update.d.ts +1 -1
  150. package/dist/types/sync.d.ts +4 -2
  151. package/dist/types/sync.d.ts.map +1 -1
  152. package/dist/types/sync.js.map +1 -1
  153. package/package.json +1 -2
  154. package/presets/default/.claude/agents/einja/backend-architect.md +1131 -0
  155. package/presets/{minimal/.claude/agents/einja/frontend → default/.claude/agents/einja}/design-engineer.md +1 -1
  156. package/presets/{minimal/.claude/agents/einja/frontend → default/.claude/agents/einja}/frontend-architect.md +1 -1
  157. package/presets/{minimal/.claude/agents/einja/frontend → default/.claude/agents/einja}/frontend-coder.md +1 -37
  158. package/presets/{minimal → default}/.claude/agents/einja/task/task-committer.md +12 -6
  159. package/presets/{minimal → default}/.claude/agents/einja/task/task-executer.md +9 -9
  160. package/presets/{minimal → default}/.claude/commands/einja/frontend-implement.md +1 -1
  161. package/presets/{minimal → default}/.claude/commands/einja/update-docs-by-task-specs.md +6 -6
  162. package/presets/{minimal/.claude/skills/einja/api-development → default/.claude/skills/einja-api-development}/SKILL.md +5 -5
  163. package/presets/{minimal/.claude/skills/einja/backend-architecture → default/.claude/skills/einja-backend-architecture}/SKILL.md +5 -5
  164. package/presets/{minimal/.claude/skills/einja/coding-standards → default/.claude/skills/einja-coding-standards}/SKILL.md +6 -6
  165. package/presets/{minimal/.claude/skills/einja/component-design → default/.claude/skills/einja-component-design}/SKILL.md +6 -6
  166. package/presets/{minimal/.claude/skills/einja/frontend-development → default/.claude/skills/einja-frontend-development}/SKILL.md +5 -5
  167. package/presets/{minimal/.claude/skills/einja/output-format → default/.claude/skills/einja-output-format}/SKILL.md +54 -5
  168. package/presets/{minimal → default}/preset.yaml +1 -1
  169. package/presets/{minimal → default}/symlinks.json +10 -10
  170. package/scaffolds/cli/preset.yaml +110 -0
  171. package/scaffolds/example/README.md +35 -0
  172. package/scaffolds/example/specs/issues/issue999-example-task/design.md +879 -0
  173. package/scaffolds/example/specs/issues/issue999-example-task/qa-tests/README.md +150 -0
  174. package/scaffolds/example/specs/issues/issue999-example-task/qa-tests/phase1/1-1.md +268 -0
  175. package/scaffolds/example/specs/issues/issue999-example-task/qa-tests/phase1/1-2.md +179 -0
  176. package/scaffolds/example/specs/issues/issue999-example-task/qa-tests/phase1/1-3.md +392 -0
  177. package/scaffolds/example/specs/issues/issue999-example-task/qa-tests/phase1/evidence/.gitkeep +0 -0
  178. package/scaffolds/example/specs/issues/issue999-example-task/qa-tests/phase2/2-1.md +459 -0
  179. package/scaffolds/example/specs/issues/issue999-example-task/qa-tests/phase2/evidence/.gitkeep +0 -0
  180. package/scaffolds/example/specs/issues/issue999-example-task/qa-tests/scenarios.md +125 -0
  181. package/scaffolds/example/specs/issues/issue999-example-task/requirements.md +494 -0
  182. package/scaffolds/example/specs/issues/issue999-example-task/tasks.md +212 -0
  183. package/scaffolds/instructions/deployment-setup.md +458 -0
  184. package/scaffolds/instructions/environment-setup.md +509 -0
  185. package/scaffolds/instructions/local-server-environment-and-worktree.md +539 -0
  186. package/scaffolds/instructions/task-execute.md +649 -0
  187. package/scaffolds/instructions/task-vibe-kanban-loop.md +495 -0
  188. package/scaffolds/memory/archive/.gitkeep +0 -0
  189. package/scaffolds/memory/decisions.md +35 -0
  190. package/scaffolds/memory/patterns.md +37 -0
  191. package/scaffolds/steering/README.md +42 -0
  192. package/scaffolds/steering/acceptance-criteria-and-qa-guide.md +11 -0
  193. package/scaffolds/steering/architecture.md +11 -0
  194. package/scaffolds/steering/branch-strategy.md +11 -0
  195. package/scaffolds/steering/commit-rules.md +12 -1
  196. package/scaffolds/steering/db-schema-design.md +11 -0
  197. package/scaffolds/steering/development/api-development.md +15 -4
  198. package/scaffolds/steering/development/backend-architecture.md +11 -0
  199. package/scaffolds/steering/development/frontend-development.md +11 -0
  200. package/scaffolds/steering/development/review-guidelines.md +11 -0
  201. package/scaffolds/steering/development/testing-strategy.md +85 -0
  202. package/scaffolds/steering/development-workflow.md +11 -0
  203. package/scaffolds/steering/infrastructure/deployment.md +11 -0
  204. package/scaffolds/steering/infrastructure/environment-variables.md +11 -0
  205. package/scaffolds/steering/product.md +11 -0
  206. package/scaffolds/steering/task-management.md +11 -0
  207. package/scaffolds/CLAUDE.md.template +0 -386
  208. /package/presets/{minimal → default}/.claude/agents/einja/docs/docs-updater.md +0 -0
  209. /package/presets/{minimal → default}/.claude/agents/einja/git/conflict-resolver.md +0 -0
  210. /package/presets/{minimal → default}/.claude/agents/einja/specs/spec-design-generator.md +0 -0
  211. /package/presets/{minimal → default}/.claude/agents/einja/specs/spec-qa-generator.md +0 -0
  212. /package/presets/{minimal → default}/.claude/agents/einja/specs/spec-requirements-generator.md +0 -0
  213. /package/presets/{minimal → default}/.claude/agents/einja/specs/spec-tasks-generator.md +0 -0
  214. /package/presets/{minimal → default}/.claude/agents/einja/task/task-modification-analyzer.md +0 -0
  215. /package/presets/{minimal → default}/.claude/agents/einja/task/task-qa.md +0 -0
  216. /package/presets/{minimal → default}/.claude/agents/einja/task/task-reviewer.md +0 -0
  217. /package/presets/{minimal → default}/.claude/commands/einja/spec-create.md +0 -0
  218. /package/presets/{minimal → default}/.claude/commands/einja/start-dev.md +0 -0
  219. /package/presets/{minimal → default}/.claude/commands/einja/sync-cursor-commands.md +0 -0
  220. /package/presets/{minimal → default}/.claude/commands/einja/task-exec.md +0 -0
  221. /package/presets/{minimal → default}/.claude/hooks/einja/biome-format.sh +0 -0
  222. /package/presets/{minimal → default}/.claude/hooks/einja/design-doc-check.sh +0 -0
  223. /package/presets/{minimal → default}/.claude/hooks/einja/detect-secrets.sh +0 -0
  224. /package/presets/{minimal → default}/.claude/hooks/einja/large-file-warning.sh +0 -0
  225. /package/presets/{minimal → default}/.claude/hooks/einja/playwright-resize.sh +0 -0
  226. /package/presets/{minimal → default}/.claude/hooks/einja/typecheck.sh +0 -0
  227. /package/presets/{minimal → default}/.claude/hooks/einja/unset-volta-recursion.sh +0 -0
  228. /package/presets/{minimal → default}/.claude/hooks/einja/validate-git-commit.sh +0 -0
  229. /package/presets/{minimal → default}/.claude/hooks/einja/warn-index-ts.sh +0 -0
  230. /package/presets/{minimal → default}/.claude/hooks/einja/warn-relative-import.sh +0 -0
  231. /package/presets/{minimal → default}/.claude/settings.json +0 -0
  232. /package/presets/{minimal/.claude/skills/einja/coding-standards → default/.claude/skills/einja-coding-standards}/reference/naming-conventions.md +0 -0
  233. /package/presets/{minimal/.claude/skills/einja/coding-standards → default/.claude/skills/einja-coding-standards}/reference/prohibited-patterns.md +0 -0
  234. /package/presets/{minimal/.claude/skills/einja/coding-standards → default/.claude/skills/einja-coding-standards}/reference/typescript-rules.md +0 -0
  235. /package/presets/{minimal/.claude/skills/einja/component-design → default/.claude/skills/einja-component-design}/reference/directory-structure.md +0 -0
  236. /package/presets/{minimal/.claude/skills/einja/component-design → default/.claude/skills/einja-component-design}/reference/props-patterns.md +0 -0
  237. /package/presets/{minimal/.claude/skills/einja/component-design → default/.claude/skills/einja-component-design}/reference/styling-guide.md +0 -0
  238. /package/presets/{minimal/.claude/skills/einja/conflict-resolver → default/.claude/skills/einja-conflict-resolver}/SKILL.md +0 -0
  239. /package/presets/{minimal/.claude/skills/einja/general-context-loader → default/.claude/skills/einja-general-context-loader}/SKILL.md +0 -0
  240. /package/presets/{minimal/.claude/skills/einja/spec-context-loader → default/.claude/skills/einja-spec-context-loader}/SKILL.md +0 -0
  241. /package/presets/{minimal/.claude/skills/einja/task-commit → default/.claude/skills/einja-task-commit}/SKILL.md +0 -0
  242. /package/presets/{minimal/.claude/skills/einja/task-qa → default/.claude/skills/einja-task-qa}/SKILL.md +0 -0
  243. /package/presets/{minimal/.claude/skills/einja/task-qa → default/.claude/skills/einja-task-qa}/reference/failure-patterns.md +0 -0
  244. /package/presets/{minimal/.claude/skills/einja/task-qa → default/.claude/skills/einja-task-qa}/reference/troubleshooting.md +0 -0
  245. /package/presets/{minimal/.claude/skills/einja/task-qa → default/.claude/skills/einja-task-qa}/reference/usage-patterns.md +0 -0
  246. /package/presets/{minimal/.claude/skills/einja/task-qa → default/.claude/skills/einja-task-qa}/templates/qa-test-template.md +0 -0
  247. /package/{templates → scaffolds/templates}/README.md +0 -0
  248. /package/{templates → scaffolds/templates}/design-simple.md.template +0 -0
  249. /package/{templates → scaffolds/templates}/design.md.template +0 -0
  250. /package/{templates → scaffolds/templates}/qa-test.md.template +0 -0
  251. /package/{templates → scaffolds/templates}/requirements.md.template +0 -0
@@ -0,0 +1,212 @@
1
+ # 実装計画サンプル
2
+
3
+ このファイルは、タスク一覧の標準構造、フェーズ構成、タスク記述形式を示すサンプルです。
4
+
5
+ **📖 タスク階層の詳細は [タスク管理ガイドライン](../../../../steering/task-management.md) を参照**
6
+
7
+ ## 概要
8
+
9
+ 本ドキュメントは、サンプル機能の実装タスク一覧です。以下のユーザーストーリーを実装します:
10
+
11
+ - **Story 1**: ユーザー認証機能の実装(AC1.1-AC1.4)
12
+ - **Story 2**: プロフィール管理機能の実装(AC2.1-AC2.3)
13
+
14
+ **タスク階層構造:**
15
+ - Phase(フェーズ): 1, 2...(単一の数字)
16
+ - タスクグループ: 1.1, 1.2...(チェックボックス付き、1-4時間)
17
+ - タスク: 1.1.1, 1.1.2...(チェックボックスなし、15-60分)
18
+ - サブタスク: タスクの下に箇条書き
19
+
20
+ ---
21
+
22
+ ## Phase 1: 認証・プロフィール管理基盤構築
23
+
24
+ - [ ] 1.1 ユーザー認証機能実装
25
+
26
+ - 1.1.1 データベーススキーマ設計と実装
27
+ - Prisma schema.prismaにUserモデルを定義(id、email、name、createdAt、updatedAt)
28
+ - Sessionモデルを定義(id、userId、token、expiresAt)
29
+ - Accountモデルを定義(OAuth用、provider、providerAccountId)
30
+ - 適切なインデックスとリレーションを設定
31
+ - マイグレーションを作成(pnpm db:migrate:dev --name init)
32
+ - マイグレーションを実行し、データベースにテーブルを作成
33
+ - **要件**: Story 1
34
+ - **依存関係**: なし
35
+ - **完了条件**: Prismaスキーマが定義され、マイグレーションが実行され、データベースにテーブルが作成されていること(AC1.1を満たす)
36
+ - **対応設計**: design.md「データベース設計」セクション(L100-L150)
37
+ - **シナリオテスト**: なし(DB設計のみ、UIフロー未実装のため)
38
+
39
+ - 1.1.2 認証ロジック実装
40
+ - src/auth/magic-link.tsを作成
41
+ - generateMagicLink関数を実装(トークン生成、有効期限設定)
42
+ - verifyMagicLink関数を実装(トークン検証、セッション作成)
43
+ - メール送信サービスと連携
44
+ - エラーハンドリング実装(無効なトークン、期限切れ等)
45
+ - **要件**: Story 1
46
+ - **依存関係**: 1.1.1
47
+ - **完了条件**: Magic Link認証ロジックが実装され、トークン生成・検証が正常に動作すること(AC1.2を満たす)
48
+ - **対応設計**: design.md「認証ロジック」セクション(L200-L250)
49
+ - **シナリオテスト**: なし(認証ロジックのみ、UIフロー未実装のため)
50
+
51
+ - 1.1.3 API Routes実装とテスト
52
+ - app/api/auth/magic-link/route.tsを作成
53
+ - POST /api/auth/magic-linkハンドラーを実装(メールアドレス受付、Magic Link送信)
54
+ - app/api/auth/verify/route.tsを作成
55
+ - GET /api/auth/verifyハンドラーを実装(トークン検証、セッション作成、リダイレクト)
56
+ - zodバリデーションを適用
57
+ - エラーレスポンスを適切に返却
58
+ - E2Eテストファイルを作成(tests/e2e/auth.spec.ts)
59
+ - Magic Link送信テストケースを作成(有効なメールアドレス、無効なメールアドレス)
60
+ - トークン検証テストケースを作成(有効なトークン、無効なトークン、期限切れトークン)
61
+ - セッション作成テストケースを作成
62
+ - 全テストケースを実行
63
+ - **要件**: Story 1
64
+ - **依存関係**: 1.1.2
65
+ - **完了条件**: 認証APIが実装され、Magic Link送信とトークン検証が正常に動作すること。Story 1の受け入れ基準AC1.1-AC1.3を満たすE2Eテストが通ること
66
+ - **対応設計**: design.md「API設計」セクション(L300-L350)、「テスト戦略」E2Eテストセクション(L500-L550)
67
+ - **シナリオテスト**: なし(API実装のみ、UIフロー未実装のため)
68
+
69
+ - [ ] 1.2 プロフィール管理機能実装
70
+
71
+ - 1.2.1 プロフィール用データベーススキーマ拡張
72
+ - Prisma schema.prismaのUserモデルにbio、avatar、locationフィールドを追加
73
+ - マイグレーションを作成(pnpm db:migrate:dev --name add_profile_fields)
74
+ - マイグレーションを実行
75
+ - **要件**: Story 2
76
+ - **依存関係**: 1.1.1
77
+ - **完了条件**: Userモデルにプロフィールフィールドが追加され、マイグレーションが完了していること(AC2.1を満たす)
78
+ - **対応設計**: design.md「データベース設計」セクション(L160-L180)
79
+ - **シナリオテスト**: なし(DBスキーマ拡張のみ、UIフロー未実装のため)
80
+
81
+ - 1.2.2 プロフィール更新API実装とテスト
82
+ - app/api/users/me/route.tsを作成
83
+ - GET /api/users/meハンドラーを実装(認証確認、プロフィール取得)
84
+ - app/api/users/profile/route.tsを作成
85
+ - PUT /api/users/profileハンドラーを実装(認証確認、プロフィール更新)
86
+ - zodバリデーションを適用(bio最大500文字、location最大100文字等)
87
+ - エラーハンドリング実装
88
+ - E2Eテストファイルを作成(tests/e2e/profile.spec.ts)
89
+ - プロフィール取得テストケースを作成(認証済み、未認証)
90
+ - プロフィール更新テストケースを作成(有効なデータ、無効なデータ、認証なし)
91
+ - バリデーションテストケースを作成(bio文字数制限、location文字数制限)
92
+ - 全テストケースを実行
93
+ - **要件**: Story 2
94
+ - **依存関係**: 1.2.1
95
+ - **完了条件**: プロフィールAPIが実装され、取得・更新が正常に動作すること。Story 2の受け入れ基準AC2.1-AC2.2を満たすE2Eテストが通ること
96
+ - **対応設計**: design.md「API設計」セクション(L360-L400)、「テスト戦略」E2Eテストセクション(L560-L600)
97
+ - **シナリオテスト**: シナリオ1 Step 1-3(部分実行:API認証まで)
98
+
99
+ ---
100
+
101
+ ## Phase 1完了確認
102
+
103
+ - [ ] 1.X フェーズ1完了条件確認
104
+
105
+ - 1.X.1 フェーズ1全タスク完了確認
106
+ - タスクグループ1.1: ユーザー認証機能実装の全タスク完了確認(1.1.1-1.1.3)
107
+ - タスクグループ1.2: プロフィール管理機能実装の全タスク完了確認(1.2.1-1.2.2)
108
+ - 全シナリオテストの成功確認
109
+ - コードレビュー完了確認
110
+ - デプロイ可能な状態であることを確認
111
+ - **要件**: Story 1, Story 2
112
+ - **依存関係**: 1.1.3, 1.2.2
113
+ - **完了条件**: フェーズ1の全タスクグループが完了し、受け入れ基準**AC1.1-AC1.3、AC2.1-AC2.2**を満たすこと。認証機能・プロフィール管理機能が正常動作し、全E2Eテストが成功、Biomeエラー0件を維持していること
114
+ - **対応設計**: design.md 全セクション
115
+ - **シナリオテスト**: シナリオ1 全Step(リグレッション確認)
116
+
117
+ ---
118
+
119
+ ## Phase 2: UI実装
120
+
121
+ - [ ] 2.1 認証UI実装
122
+
123
+ - 2.1.1 ログインページ実装とテスト
124
+ - app/(auth)/login/page.tsxを作成
125
+ - メールアドレス入力フォームを実装(React Hook Form + zod)
126
+ - POST /api/auth/magic-link呼び出し処理を実装
127
+ - ローディング状態表示を実装
128
+ - エラーメッセージ表示を実装
129
+ - 成功メッセージ表示を実装(「メールを確認してください」等)
130
+ - E2Eテストでログインフロー検証
131
+ - アクセシビリティチェック
132
+ - **要件**: Story 1
133
+ - **依存関係**: Phase 1完了
134
+ - **完了条件**: ログインページが実装され、Magic Link送信フォームが正常に動作すること(AC1.4を満たす)
135
+ - **対応設計**: design.md「UI設計」セクション(L700-L750)
136
+ - **シナリオテスト**: シナリオ1 全Step(フル実行)
137
+
138
+ ---
139
+
140
+ ## Phase 2完了確認
141
+
142
+ - [ ] 2.X フェーズ2完了条件確認
143
+
144
+ - 2.X.1 フェーズ2全タスク完了確認
145
+ - タスクグループ2.1: 認証UI実装の全タスク完了確認(2.1.1)
146
+ - 全シナリオテストの成功確認
147
+ - UIコンポーネントのアクセシビリティ確認
148
+ - レスポンシブデザイン確認
149
+ - **要件**: Story 1
150
+ - **依存関係**: 2.1.1
151
+ - **完了条件**: フェーズ2の全タスクグループが完了し、受け入れ基準**AC1.4**を満たすこと。認証UIが正常動作し、レスポンシブデザイン・アクセシビリティ基準を満たしていること
152
+ - **対応設計**: design.md「UI設計」セクション
153
+ - **シナリオテスト**: シナリオ1 全Step(リグレッション確認)
154
+
155
+ ---
156
+
157
+ ## 記述ルールのまとめ
158
+
159
+ ### タスク階層(4階層)
160
+ - **Phase(フェーズ)**: 最上位単位(1, 2, 3...)
161
+ - **タスクグループ**: Vibe-KanbanタスクとPRの作成単位(1.1, 1.2...)、**チェックボックス付き**(`- [ ]`)、1-4時間
162
+ - **タスク**: 作業単位・コミット単位(1.1.1, 1.1.2...)、**チェックボックスなし**、15-60分
163
+ - **サブタスク**: タスク内の詳細作業項目、**箇条書き**(`-`)
164
+
165
+ ### タスクグループの粒度
166
+ - 1つの受け入れ条件を満たす/1つの機能が動作する状態
167
+ - 1PR・1デプロイ・1QAテスト対象として適切な単位
168
+ - 実装工数の目安: 1-4時間
169
+
170
+ ### タスクの粒度
171
+ - 具体的な作業項目
172
+ - 個別コミット単位
173
+ - 実装工数の目安: 15-60分
174
+
175
+ ### フォーマット規則
176
+
177
+ **タスクグループ**:
178
+ ```markdown
179
+ - [ ] 1.1 タスクグループ名
180
+ ```
181
+
182
+ **タスク**(2スペースインデント):
183
+ ```markdown
184
+ - 1.1.1 タスク名
185
+ ```
186
+
187
+ **サブタスク・メタデータ**(4スペースインデント):
188
+ ```markdown
189
+ - サブタスク内容
190
+ - **要件**: Story X
191
+ - **依存関係**: なし または 依存先タスク番号
192
+ - **完了条件**: 完了条件(AC番号を含める)
193
+ - **対応設計**: design.md「セクション名」
194
+ - **シナリオテスト**: 該当シナリオまたは「なし(理由)」
195
+ ```
196
+
197
+ ### メタデータ形式
198
+ - **要件**: `**要件**:` で始まる(例: `**要件**: Story 1`)
199
+ - **依存関係**: `**依存関係**:` で始まる(例: `**依存関係**: 1.1.1` または `**依存関係**: Phase 1完了`)
200
+ - **完了条件**: `**完了条件**:` で始まる。必ず受け入れ基準番号(AC形式)を含める(例: `**完了条件**: AC1.1を満たす`)
201
+ - **対応設計**: `**対応設計**:` で始まる(例: `**対応設計**: design.md「セクション名」`)
202
+ - **シナリオテスト**: `**シナリオテスト**:` で始まる(**全タスクに必須**、該当なければ「なし」と理由を明記)
203
+ - 該当なし: `**シナリオテスト**: なし(DB設計のみ、UIフロー未実装のため)`
204
+ - 部分実行: `**シナリオテスト**: シナリオ1 Step 1-3(部分実行:説明)`
205
+ - フル実行: `**シナリオテスト**: シナリオ1 全Step(フル実行)`
206
+ - リグレッション: `**シナリオテスト**: シナリオ1 全Step(リグレッション:説明)`
207
+
208
+ ### フェーズ完了確認
209
+ - 各フェーズの最後に必ず配置
210
+ - 全タスクグループの完了を確認
211
+ - 完了条件に対応する全ての受け入れ基準番号(AC形式)を列挙
212
+ - 次フェーズ移行基準は完了条件に含めて記載
@@ -0,0 +1,458 @@
1
+ <!-- @einja:managed:start -->
2
+ # デプロイセットアップ手順
3
+
4
+ 本番環境へのデプロイに必要な設定手順をまとめたドキュメントです。
5
+
6
+ 設計方針については以下を参照してください:
7
+ - [デプロイメント・CI/CD設計方針](../steering/infrastructure/deployment.md)
8
+ - [環境変数設計方針](../steering/infrastructure/environment-variables.md)
9
+
10
+ ---
11
+
12
+ ## 目次
13
+
14
+ 1. [必要なSecrets一覧](#1-必要なsecrets一覧)
15
+ 2. [データベース設定](#2-データベース設定)
16
+ 3. [Vercel設定](#3-vercel設定)
17
+ 4. [Turborepo Remote Cache設定](#4-turborepo-remote-cache設定)
18
+ 5. [Railway設定](#5-railway設定)
19
+ 6. [GitHub Secrets登録](#6-github-secrets登録)
20
+ 7. [Docker設定](#7-docker設定)
21
+ 8. [動作確認](#8-動作確認)
22
+ 9. [トラブルシューティング](#9-トラブルシューティング)
23
+
24
+ ---
25
+
26
+ ## 1. 必要なSecrets一覧
27
+
28
+ ### 必須Secrets
29
+
30
+ | 変数名 | 説明 | 用途 | GitHub Actions | Vercel |
31
+ |--------|------|------|:--------------:|:------:|
32
+ | `DOTENV_PRIVATE_KEY_CI` | CI環境用復号鍵 | CI/CD | ◯ | - |
33
+ | `DOTENV_PRIVATE_KEY_PRODUCTION` | 本番環境用復号鍵 | ビルド | ◯ | ◯ |
34
+ | `TURBO_TOKEN` | Turborepo Remote Cacheトークン | ビルド高速化 | ◯ | - |
35
+ | `TURBO_TEAM` | VercelチームID | ビルド高速化 | ◯ | - |
36
+
37
+ ### オプション(手動デプロイ・拡張用)
38
+
39
+ | 変数名 | 説明 | 用途 | GitHub Actions | Vercel |
40
+ |--------|------|------|:--------------:|:------:|
41
+ | `VERCEL_TOKEN` | Vercelデプロイトークン | 手動デプロイ | ◯ | - |
42
+ | `VERCEL_ORG_ID` | Vercel組織ID | 手動デプロイ | ◯ | - |
43
+ | `VERCEL_WEB_PROJECT_ID` | webプロジェクトID | 手動デプロイ | ◯ | - |
44
+ | `RAILWAY_TOKEN` | Railway APIトークン | Railwayデプロイ | ◯ | - |
45
+ | `RAILWAY_SERVICE_ID` | RailwayサービスID | Railwayデプロイ | ◯ | - |
46
+
47
+ ---
48
+
49
+ ## 2. データベース設定
50
+
51
+ ### Supabase(推奨)
52
+
53
+ ```bash
54
+ # 1. https://supabase.com でアカウント作成
55
+
56
+ # 2. 「New Project」でプロジェクト作成
57
+ # - Region: Northeast Asia (Tokyo)
58
+ # - Database Password: 設定してメモ
59
+
60
+ # 3. Settings > Database > Connection string > URI をコピー
61
+
62
+ # 4. [YOUR-PASSWORD] を設定したパスワードに置換
63
+ ```
64
+
65
+ ### Neon
66
+
67
+ ```bash
68
+ # 1. https://neon.tech でアカウント作成
69
+ # 2. 「Create a project」でプロジェクト作成
70
+ # 3. Connection Details > Connection string をコピー
71
+ ```
72
+
73
+ ### Vercel Postgres
74
+
75
+ ```bash
76
+ # 1. Vercel Dashboard > Storage > Create Database > Postgres
77
+ # 2. 作成後、Connect タブから接続文字列を取得
78
+ ```
79
+
80
+ ---
81
+
82
+ ## 3. Vercel設定
83
+
84
+ ### プロジェクト作成
85
+
86
+ ```bash
87
+ # 1. https://vercel.com でGitHubアカウントでログイン
88
+
89
+ # 2. 「Add New...」>「Project」でGitHubリポジトリを選択
90
+
91
+ # 3. 設定:
92
+ # - Project Name: 任意(例: einja-web)
93
+ # - Root Directory: apps/web
94
+ # - Framework Preset: Next.js
95
+ # - Build Command: cd ../.. && npx turbo run build --filter=web
96
+ # - Output Directory: .next
97
+ # - Install Command: pnpm install
98
+
99
+ # 4. 「Deploy」をクリック
100
+ ```
101
+
102
+ ### 環境変数設定
103
+
104
+ Vercel Dashboard > 対象プロジェクト > Settings > Environment Variables
105
+
106
+ | Key | Value | Environment |
107
+ |-----|-------|-------------|
108
+ | `DOTENV_PRIVATE_KEY_PRODUCTION` | `.env.keys`から取得 | Production |
109
+ | `DATABASE_URL` | 暗号化ファイルに含まれる | - |
110
+ | `NEXTAUTH_SECRET` | 暗号化ファイルに含まれる | - |
111
+
112
+ ### ローカルからのVercel CLI操作
113
+
114
+ ```bash
115
+ # Vercel CLIインストール
116
+ npm i -g vercel
117
+
118
+ # プロジェクトリンク
119
+ cd apps/web
120
+ vercel link
121
+
122
+ # プレビューデプロイ
123
+ vercel
124
+
125
+ # 本番デプロイ
126
+ vercel --prod
127
+ ```
128
+
129
+ ---
130
+
131
+ ## 4. Turborepo Remote Cache設定
132
+
133
+ ### Step 1: Turboアカウントログイン
134
+
135
+ ```bash
136
+ npx turbo login
137
+ # ブラウザが開き、Vercelにログインを求められます
138
+ ```
139
+
140
+ ### Step 2: プロジェクトをリンク
141
+
142
+ ```bash
143
+ npx turbo link
144
+ # プロンプトでVercelの組織/チームを選択
145
+ # リンク完了すると .turbo/config.json が生成されます
146
+ ```
147
+
148
+ ### Step 3: トークン取得
149
+
150
+ ```bash
151
+ # TURBO_TOKEN: Vercel Dashboard > Account Settings > Tokens > Create Token
152
+ # トークン名: einja-ci-turbo-token
153
+ # Scope: Full Access(またはプロジェクト限定)
154
+
155
+ # TURBO_TEAM: .turbo/config.json から取得
156
+ cat .turbo/config.json
157
+ # {"teamId": "team_xxxxxxxxx", "apiUrl": "https://vercel.com/api"}
158
+ # teamId の値が TURBO_TEAM
159
+ ```
160
+
161
+ ### Step 4: GitHub Secretsに登録
162
+
163
+ ```bash
164
+ gh secret set TURBO_TOKEN --body "取得したトークン"
165
+ gh secret set TURBO_TEAM --body "team_xxxxxxxxx"
166
+ ```
167
+
168
+ ---
169
+
170
+ ## 5. Railway設定
171
+
172
+ ### プロジェクト作成
173
+
174
+ ```bash
175
+ # 1. https://railway.app でGitHubアカウントでログイン
176
+ # 2. 「New Project」>「Deploy from GitHub repo」
177
+ # 3. リポジトリを選択
178
+ # 4. Root Directory: apps/cron-worker
179
+ # 5. Variables タブで環境変数を設定
180
+ ```
181
+
182
+ ### railway.toml設定
183
+
184
+ **配置場所**: `apps/cron-worker/railway.toml`
185
+
186
+ ```toml
187
+ [build]
188
+ builder = "DOCKERFILE"
189
+ dockerfilePath = "apps/cron-worker/Dockerfile"
190
+
191
+ [deploy]
192
+ startCommand = "echo 'Cron worker deployed'"
193
+
194
+ # Cronジョブ定義
195
+ [[crons]]
196
+ command = "pnpm job:cleanup"
197
+ schedule = "0 0 * * *" # 毎日午前0時
198
+
199
+ [[crons]]
200
+ command = "pnpm job:email-digest"
201
+ schedule = "0 9 * * *" # 毎日午前9時
202
+
203
+ [[crons]]
204
+ command = "pnpm job:health-check"
205
+ schedule = "*/5 * * * *" # 5分ごと
206
+ ```
207
+
208
+ ### Railway CLI操作
209
+
210
+ ```bash
211
+ # Railway CLIインストール
212
+ npm i -g @railway/cli
213
+
214
+ # ログイン
215
+ railway login
216
+
217
+ # プロジェクトリンク
218
+ cd apps/cron-worker
219
+ railway link
220
+
221
+ # デプロイ
222
+ railway up
223
+
224
+ # 環境変数確認
225
+ railway variables
226
+
227
+ # 環境変数追加
228
+ railway variables set DATABASE_URL=postgresql://...
229
+ ```
230
+
231
+ ### GitHub Actionsからの自動デプロイ(オプション)
232
+
233
+ ```bash
234
+ # Railway Dashboard > Account Settings > Tokens > Create Token
235
+ gh secret set RAILWAY_TOKEN --body "取得したトークン"
236
+
237
+ # Service > Settings > Service ID
238
+ gh secret set RAILWAY_SERVICE_ID --body "サービスID"
239
+ ```
240
+
241
+ ---
242
+
243
+ ## 6. GitHub Secrets登録
244
+
245
+ ### 登録手順
246
+
247
+ ```bash
248
+ # 1. GitHub リポジトリ > Settings > Secrets and variables > Actions
249
+ # 2. 「New repository secret」で以下を追加
250
+
251
+ # 必須
252
+ gh secret set DOTENV_PRIVATE_KEY_CI --body "$(grep DOTENV_PRIVATE_KEY_CI .env.keys | cut -d= -f2)"
253
+ gh secret set TURBO_TOKEN --body "取得したトークン"
254
+ gh secret set TURBO_TEAM --body "team_xxxxxxxxx"
255
+
256
+ # オプション(手動デプロイ用)
257
+ gh secret set VERCEL_TOKEN --body "取得したトークン"
258
+ gh secret set VERCEL_ORG_ID --body "team_xxxxxxxxx"
259
+ gh secret set VERCEL_WEB_PROJECT_ID --body "prj_xxxxxxxxx"
260
+ ```
261
+
262
+ ### 登録確認
263
+
264
+ ```bash
265
+ gh secret list
266
+ ```
267
+
268
+ ---
269
+
270
+ ## 7. Docker設定
271
+
272
+ ### Dockerfile(Cron Worker用)
273
+
274
+ **配置場所**: `apps/cron-worker/Dockerfile`
275
+
276
+ ```dockerfile
277
+ FROM node:20-alpine AS base
278
+
279
+ # pnpmインストール
280
+ RUN npm install -g pnpm@8
281
+
282
+ # 依存関係インストール
283
+ FROM base AS dependencies
284
+ WORKDIR /app
285
+ COPY package.json pnpm-lock.yaml pnpm-workspace.yaml ./
286
+ COPY apps/cron-worker/package.json ./apps/cron-worker/
287
+ COPY packages/*/package.json ./packages/
288
+ RUN pnpm install --frozen-lockfile
289
+
290
+ # ビルド
291
+ FROM base AS build
292
+ WORKDIR /app
293
+ COPY . .
294
+ COPY --from=dependencies /app/node_modules ./node_modules
295
+ RUN pnpm turbo run build --filter=cron-worker
296
+
297
+ # 実行環境
298
+ FROM base AS runner
299
+ WORKDIR /app
300
+ COPY --from=build /app/apps/cron-worker/dist ./dist
301
+ COPY --from=build /app/node_modules ./node_modules
302
+ COPY --from=build /app/package.json ./
303
+
304
+ ENV NODE_ENV=production
305
+
306
+ CMD ["echo", "Cron worker ready"]
307
+ ```
308
+
309
+ ### Docker Compose(ローカル開発用)
310
+
311
+ **配置場所**: `docker-compose.yml`
312
+
313
+ ```yaml
314
+ version: '3.8'
315
+
316
+ services:
317
+ postgres:
318
+ image: postgres:16-alpine
319
+ ports:
320
+ - "${POSTGRES_PORT:-35432}:5432"
321
+ environment:
322
+ POSTGRES_USER: postgres
323
+ POSTGRES_PASSWORD: postgres
324
+ POSTGRES_DB: einja
325
+ volumes:
326
+ - postgres_data:/var/lib/postgresql/data
327
+
328
+ volumes:
329
+ postgres_data:
330
+ ```
331
+
332
+ ---
333
+
334
+ ## 8. 動作確認
335
+
336
+ ### Vercel
337
+
338
+ ```bash
339
+ # デプロイ完了後、生成されたURLにアクセス
340
+ # ログイン機能が動作することを確認
341
+ ```
342
+
343
+ ### GitHub Actions
344
+
345
+ ```bash
346
+ # PRを作成してCIが実行されることを確認
347
+ # Remote Cacheが有効な場合、ログに以下が表示される
348
+ # >>> TURBO Turborepo Remote Cache enabled
349
+ # web:build: cache hit, replaying logs
350
+ ```
351
+
352
+ ### Railway
353
+
354
+ ```bash
355
+ # Dashboard > Deployments でデプロイ状況を確認
356
+ # Logs タブでアプリケーションログを確認
357
+
358
+ # 手動実行でテスト
359
+ railway run pnpm job:health-check
360
+ ```
361
+
362
+ ---
363
+
364
+ ## 9. トラブルシューティング
365
+
366
+ ### キャッシュが効かない
367
+
368
+ **原因**: `TURBO_TOKEN`または`TURBO_TEAM`が未設定
369
+
370
+ ```bash
371
+ # GitHub Secretsを確認
372
+ gh secret list
373
+
374
+ # トークンを再設定
375
+ turbo login
376
+ turbo token
377
+ gh secret set TURBO_TOKEN --body "new-token"
378
+ ```
379
+
380
+ ### デプロイが失敗する
381
+
382
+ **原因**: 環境変数が未設定またはdotenvx復号エラー
383
+
384
+ ```bash
385
+ # Vercel環境変数を確認
386
+ vercel env ls
387
+
388
+ # 秘密鍵が正しいか確認
389
+ dotenvx run -f .env.production -- echo "OK"
390
+
391
+ # 環境変数追加
392
+ vercel env add DOTENV_PRIVATE_KEY_PRODUCTION production
393
+ ```
394
+
395
+ ### ビルドが失敗する
396
+
397
+ **原因**: 型エラーまたは依存関係の不整合
398
+
399
+ ```bash
400
+ # ローカルで再現
401
+ pnpm install
402
+ pnpm turbo run typecheck
403
+ pnpm turbo run build
404
+
405
+ # 依存関係をリセット
406
+ rm -rf node_modules
407
+ rm pnpm-lock.yaml
408
+ pnpm install
409
+ ```
410
+
411
+ ### Remote Caching is not enabled
412
+
413
+ **原因**: TURBO_TOKENまたはTURBO_TEAMが正しくない
414
+
415
+ ```bash
416
+ # .turbo/config.jsonのteamIdとGitHub SecretsのTURBO_TEAMが一致するか確認
417
+ cat .turbo/config.json
418
+
419
+ # Vercelトークンの有効期限を確認
420
+ # Vercel Dashboard > Account Settings > Tokens
421
+ ```
422
+
423
+ ### Authorization failed
424
+
425
+ **原因**: TURBO_TOKENが無効または権限不足
426
+
427
+ ```bash
428
+ # Vercel Dashboardで新しいトークンを生成
429
+ # トークンのScopeが適切か確認(Full AccessまたはRead/Write権限)
430
+ # GitHub Secretsを更新
431
+ gh secret set TURBO_TOKEN --body "new-token"
432
+ ```
433
+
434
+ ---
435
+
436
+ ## 関連ドキュメント
437
+
438
+ - [環境変数セットアップ手順](./environment-setup.md)
439
+ - [デプロイメント・CI/CD設計方針](../steering/infrastructure/deployment.md)
440
+ - [環境変数設計方針](../steering/infrastructure/environment-variables.md)
441
+
442
+ ## 参考リンク
443
+
444
+ - [Turborepo Remote Caching Documentation](https://turbo.build/repo/docs/core-concepts/remote-caching)
445
+ - [Vercel Dashboard - Tokens](https://vercel.com/account/tokens)
446
+ - [Vercel CLI Documentation](https://vercel.com/docs/cli)
447
+ - [Railway Documentation](https://docs.railway.app/)
448
+ - [GitHub Actions - Encrypted secrets](https://docs.github.com/en/actions/security-guides/encrypted-secrets)
449
+ <!-- @einja:managed:end -->
450
+
451
+ ---
452
+
453
+ <!-- @einja:seed:start id="deployment-setup-project" -->
454
+ ## プロジェクト固有の設定
455
+
456
+ <!-- このセクションはプロジェクト固有の内容を追記する場所です -->
457
+ <!-- einja syncで上書きされません -->
458
+ <!-- @einja:seed:end -->