@einja/dev-cli 0.1.6

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 (243) hide show
  1. package/README.md +179 -0
  2. package/dist/cli.d.ts +2 -0
  3. package/dist/cli.d.ts.map +1 -0
  4. package/dist/cli.js +49 -0
  5. package/dist/cli.js.map +1 -0
  6. package/dist/commands/init.d.ts +3 -0
  7. package/dist/commands/init.d.ts.map +1 -0
  8. package/dist/commands/init.js +243 -0
  9. package/dist/commands/init.js.map +1 -0
  10. package/dist/commands/list.d.ts +2 -0
  11. package/dist/commands/list.d.ts.map +1 -0
  12. package/dist/commands/list.js +23 -0
  13. package/dist/commands/list.js.map +1 -0
  14. package/dist/commands/sync.d.ts +7 -0
  15. package/dist/commands/sync.d.ts.map +1 -0
  16. package/dist/commands/sync.js +294 -0
  17. package/dist/commands/sync.js.map +1 -0
  18. package/dist/commands/sync.test.d.ts +2 -0
  19. package/dist/commands/sync.test.d.ts.map +1 -0
  20. package/dist/commands/sync.test.js +593 -0
  21. package/dist/commands/sync.test.js.map +1 -0
  22. package/dist/commands/task-loop.d.ts +11 -0
  23. package/dist/commands/task-loop.d.ts.map +1 -0
  24. package/dist/commands/task-loop.js +81 -0
  25. package/dist/commands/task-loop.js.map +1 -0
  26. package/dist/index.d.ts +4 -0
  27. package/dist/index.d.ts.map +1 -0
  28. package/dist/index.js +3 -0
  29. package/dist/index.js.map +1 -0
  30. package/dist/lib/file-system.d.ts +39 -0
  31. package/dist/lib/file-system.d.ts.map +1 -0
  32. package/dist/lib/file-system.js +79 -0
  33. package/dist/lib/file-system.js.map +1 -0
  34. package/dist/lib/mcp-config.d.ts +43 -0
  35. package/dist/lib/mcp-config.d.ts.map +1 -0
  36. package/dist/lib/mcp-config.js +109 -0
  37. package/dist/lib/mcp-config.js.map +1 -0
  38. package/dist/lib/mcp-config.test.d.ts +2 -0
  39. package/dist/lib/mcp-config.test.d.ts.map +1 -0
  40. package/dist/lib/mcp-config.test.js +285 -0
  41. package/dist/lib/mcp-config.test.js.map +1 -0
  42. package/dist/lib/merger.d.ts +41 -0
  43. package/dist/lib/merger.d.ts.map +1 -0
  44. package/dist/lib/merger.js +164 -0
  45. package/dist/lib/merger.js.map +1 -0
  46. package/dist/lib/preset-update/cli-repo-detector.d.ts +35 -0
  47. package/dist/lib/preset-update/cli-repo-detector.d.ts.map +1 -0
  48. package/dist/lib/preset-update/cli-repo-detector.js +83 -0
  49. package/dist/lib/preset-update/cli-repo-detector.js.map +1 -0
  50. package/dist/lib/preset-update/cli-repo-detector.test.d.ts +2 -0
  51. package/dist/lib/preset-update/cli-repo-detector.test.d.ts.map +1 -0
  52. package/dist/lib/preset-update/cli-repo-detector.test.js +120 -0
  53. package/dist/lib/preset-update/cli-repo-detector.test.js.map +1 -0
  54. package/dist/lib/preset-update/file-copier.d.ts +59 -0
  55. package/dist/lib/preset-update/file-copier.d.ts.map +1 -0
  56. package/dist/lib/preset-update/file-copier.js +220 -0
  57. package/dist/lib/preset-update/file-copier.js.map +1 -0
  58. package/dist/lib/preset-update/file-copier.test.d.ts +2 -0
  59. package/dist/lib/preset-update/file-copier.test.d.ts.map +1 -0
  60. package/dist/lib/preset-update/file-copier.test.js +297 -0
  61. package/dist/lib/preset-update/file-copier.test.js.map +1 -0
  62. package/dist/lib/preset-update/preset-finder.d.ts +39 -0
  63. package/dist/lib/preset-update/preset-finder.d.ts.map +1 -0
  64. package/dist/lib/preset-update/preset-finder.js +92 -0
  65. package/dist/lib/preset-update/preset-finder.js.map +1 -0
  66. package/dist/lib/preset-update/preset-finder.test.d.ts +2 -0
  67. package/dist/lib/preset-update/preset-finder.test.d.ts.map +1 -0
  68. package/dist/lib/preset-update/preset-finder.test.js +128 -0
  69. package/dist/lib/preset-update/preset-finder.test.js.map +1 -0
  70. package/dist/lib/preset.d.ts +14 -0
  71. package/dist/lib/preset.d.ts.map +1 -0
  72. package/dist/lib/preset.js +52 -0
  73. package/dist/lib/preset.js.map +1 -0
  74. package/dist/lib/sync/backup-manager.d.ts +50 -0
  75. package/dist/lib/sync/backup-manager.d.ts.map +1 -0
  76. package/dist/lib/sync/backup-manager.js +117 -0
  77. package/dist/lib/sync/backup-manager.js.map +1 -0
  78. package/dist/lib/sync/backup-manager.test.d.ts +2 -0
  79. package/dist/lib/sync/backup-manager.test.d.ts.map +1 -0
  80. package/dist/lib/sync/backup-manager.test.js +155 -0
  81. package/dist/lib/sync/backup-manager.test.js.map +1 -0
  82. package/dist/lib/sync/batch-processor.d.ts +27 -0
  83. package/dist/lib/sync/batch-processor.d.ts.map +1 -0
  84. package/dist/lib/sync/batch-processor.js +46 -0
  85. package/dist/lib/sync/batch-processor.js.map +1 -0
  86. package/dist/lib/sync/batch-processor.test.d.ts +2 -0
  87. package/dist/lib/sync/batch-processor.test.d.ts.map +1 -0
  88. package/dist/lib/sync/batch-processor.test.js +110 -0
  89. package/dist/lib/sync/batch-processor.test.js.map +1 -0
  90. package/dist/lib/sync/category-validator.d.ts +36 -0
  91. package/dist/lib/sync/category-validator.d.ts.map +1 -0
  92. package/dist/lib/sync/category-validator.js +46 -0
  93. package/dist/lib/sync/category-validator.js.map +1 -0
  94. package/dist/lib/sync/category-validator.test.d.ts +2 -0
  95. package/dist/lib/sync/category-validator.test.d.ts.map +1 -0
  96. package/dist/lib/sync/category-validator.test.js +89 -0
  97. package/dist/lib/sync/category-validator.test.js.map +1 -0
  98. package/dist/lib/sync/conflict-reporter.d.ts +57 -0
  99. package/dist/lib/sync/conflict-reporter.d.ts.map +1 -0
  100. package/dist/lib/sync/conflict-reporter.js +81 -0
  101. package/dist/lib/sync/conflict-reporter.js.map +1 -0
  102. package/dist/lib/sync/conflict-reporter.test.d.ts +2 -0
  103. package/dist/lib/sync/conflict-reporter.test.d.ts.map +1 -0
  104. package/dist/lib/sync/conflict-reporter.test.js +132 -0
  105. package/dist/lib/sync/conflict-reporter.test.js.map +1 -0
  106. package/dist/lib/sync/diff-engine.d.ts +28 -0
  107. package/dist/lib/sync/diff-engine.d.ts.map +1 -0
  108. package/dist/lib/sync/diff-engine.js +118 -0
  109. package/dist/lib/sync/diff-engine.js.map +1 -0
  110. package/dist/lib/sync/diff-engine.test.d.ts +2 -0
  111. package/dist/lib/sync/diff-engine.test.d.ts.map +1 -0
  112. package/dist/lib/sync/diff-engine.test.js +133 -0
  113. package/dist/lib/sync/diff-engine.test.js.map +1 -0
  114. package/dist/lib/sync/file-filter.d.ts +40 -0
  115. package/dist/lib/sync/file-filter.d.ts.map +1 -0
  116. package/dist/lib/sync/file-filter.js +171 -0
  117. package/dist/lib/sync/file-filter.js.map +1 -0
  118. package/dist/lib/sync/file-filter.test.d.ts +2 -0
  119. package/dist/lib/sync/file-filter.test.d.ts.map +1 -0
  120. package/dist/lib/sync/file-filter.test.js +179 -0
  121. package/dist/lib/sync/file-filter.test.js.map +1 -0
  122. package/dist/lib/sync/hash-cache.d.ts +34 -0
  123. package/dist/lib/sync/hash-cache.d.ts.map +1 -0
  124. package/dist/lib/sync/hash-cache.js +51 -0
  125. package/dist/lib/sync/hash-cache.js.map +1 -0
  126. package/dist/lib/sync/hash-cache.test.d.ts +2 -0
  127. package/dist/lib/sync/hash-cache.test.d.ts.map +1 -0
  128. package/dist/lib/sync/hash-cache.test.js +110 -0
  129. package/dist/lib/sync/hash-cache.test.js.map +1 -0
  130. package/dist/lib/sync/integration.test.d.ts +2 -0
  131. package/dist/lib/sync/integration.test.d.ts.map +1 -0
  132. package/dist/lib/sync/integration.test.js +317 -0
  133. package/dist/lib/sync/integration.test.js.map +1 -0
  134. package/dist/lib/sync/marker-processor.d.ts +54 -0
  135. package/dist/lib/sync/marker-processor.d.ts.map +1 -0
  136. package/dist/lib/sync/marker-processor.js +208 -0
  137. package/dist/lib/sync/marker-processor.js.map +1 -0
  138. package/dist/lib/sync/marker-processor.test.d.ts +2 -0
  139. package/dist/lib/sync/marker-processor.test.d.ts.map +1 -0
  140. package/dist/lib/sync/marker-processor.test.js +245 -0
  141. package/dist/lib/sync/marker-processor.test.js.map +1 -0
  142. package/dist/lib/sync/metadata-manager.d.ts +46 -0
  143. package/dist/lib/sync/metadata-manager.d.ts.map +1 -0
  144. package/dist/lib/sync/metadata-manager.js +129 -0
  145. package/dist/lib/sync/metadata-manager.js.map +1 -0
  146. package/dist/lib/sync/metadata-manager.test.d.ts +2 -0
  147. package/dist/lib/sync/metadata-manager.test.d.ts.map +1 -0
  148. package/dist/lib/sync/metadata-manager.test.js +137 -0
  149. package/dist/lib/sync/metadata-manager.test.js.map +1 -0
  150. package/dist/lib/sync/performance.test.d.ts +2 -0
  151. package/dist/lib/sync/performance.test.d.ts.map +1 -0
  152. package/dist/lib/sync/performance.test.js +126 -0
  153. package/dist/lib/sync/performance.test.js.map +1 -0
  154. package/dist/types/index.d.ts +59 -0
  155. package/dist/types/index.d.ts.map +1 -0
  156. package/dist/types/index.js +2 -0
  157. package/dist/types/index.js.map +1 -0
  158. package/dist/types/preset-update.d.ts +106 -0
  159. package/dist/types/preset-update.d.ts.map +1 -0
  160. package/dist/types/preset-update.js +5 -0
  161. package/dist/types/preset-update.js.map +1 -0
  162. package/dist/types/sync.d.ts +169 -0
  163. package/dist/types/sync.d.ts.map +1 -0
  164. package/dist/types/sync.js +19 -0
  165. package/dist/types/sync.js.map +1 -0
  166. package/package.json +72 -0
  167. package/presets/minimal/.claude/agents/einja/docs/docs-updater.md +161 -0
  168. package/presets/minimal/.claude/agents/einja/frontend/design-engineer.md +685 -0
  169. package/presets/minimal/.claude/agents/einja/frontend/frontend-architect.md +747 -0
  170. package/presets/minimal/.claude/agents/einja/frontend/frontend-coder.md +441 -0
  171. package/presets/minimal/.claude/agents/einja/git/conflict-resolver.md +148 -0
  172. package/presets/minimal/.claude/agents/einja/specs/spec-design-generator.md +462 -0
  173. package/presets/minimal/.claude/agents/einja/specs/spec-qa-generator.md +466 -0
  174. package/presets/minimal/.claude/agents/einja/specs/spec-requirements-generator.md +416 -0
  175. package/presets/minimal/.claude/agents/einja/specs/spec-tasks-generator.md +608 -0
  176. package/presets/minimal/.claude/agents/einja/task/task-committer.md +82 -0
  177. package/presets/minimal/.claude/agents/einja/task/task-executer.md +352 -0
  178. package/presets/minimal/.claude/agents/einja/task/task-modification-analyzer.md +369 -0
  179. package/presets/minimal/.claude/agents/einja/task/task-qa.md +74 -0
  180. package/presets/minimal/.claude/agents/einja/task/task-reviewer.md +169 -0
  181. package/presets/minimal/.claude/commands/einja/frontend-implement.md +322 -0
  182. package/presets/minimal/.claude/commands/einja/spec-create.md +254 -0
  183. package/presets/minimal/.claude/commands/einja/start-dev.md +98 -0
  184. package/presets/minimal/.claude/commands/einja/sync-cursor-commands.md +203 -0
  185. package/presets/minimal/.claude/commands/einja/task-exec.md +390 -0
  186. package/presets/minimal/.claude/commands/einja/update-docs-by-task-specs.md +448 -0
  187. package/presets/minimal/.claude/hooks/einja/biome-format.sh +49 -0
  188. package/presets/minimal/.claude/hooks/einja/design-doc-check.sh +61 -0
  189. package/presets/minimal/.claude/hooks/einja/detect-secrets.sh +62 -0
  190. package/presets/minimal/.claude/hooks/einja/large-file-warning.sh +42 -0
  191. package/presets/minimal/.claude/hooks/einja/playwright-resize.sh +36 -0
  192. package/presets/minimal/.claude/hooks/einja/typecheck.sh +37 -0
  193. package/presets/minimal/.claude/hooks/einja/unset-volta-recursion.sh +32 -0
  194. package/presets/minimal/.claude/hooks/einja/validate-git-commit.sh +239 -0
  195. package/presets/minimal/.claude/hooks/einja/warn-index-ts.sh +34 -0
  196. package/presets/minimal/.claude/hooks/einja/warn-relative-import.sh +48 -0
  197. package/presets/minimal/.claude/settings.json +174 -0
  198. package/presets/minimal/.claude/skills/einja/api-development/SKILL.md +14 -0
  199. package/presets/minimal/.claude/skills/einja/backend-architecture/SKILL.md +14 -0
  200. package/presets/minimal/.claude/skills/einja/coding-standards/SKILL.md +120 -0
  201. package/presets/minimal/.claude/skills/einja/coding-standards/reference/naming-conventions.md +107 -0
  202. package/presets/minimal/.claude/skills/einja/coding-standards/reference/prohibited-patterns.md +169 -0
  203. package/presets/minimal/.claude/skills/einja/coding-standards/reference/typescript-rules.md +247 -0
  204. package/presets/minimal/.claude/skills/einja/component-design/SKILL.md +109 -0
  205. package/presets/minimal/.claude/skills/einja/component-design/reference/directory-structure.md +117 -0
  206. package/presets/minimal/.claude/skills/einja/component-design/reference/props-patterns.md +159 -0
  207. package/presets/minimal/.claude/skills/einja/component-design/reference/styling-guide.md +200 -0
  208. package/presets/minimal/.claude/skills/einja/conflict-resolver/SKILL.md +190 -0
  209. package/presets/minimal/.claude/skills/einja/frontend-development/SKILL.md +14 -0
  210. package/presets/minimal/.claude/skills/einja/general-context-loader/SKILL.md +254 -0
  211. package/presets/minimal/.claude/skills/einja/output-format/SKILL.md +137 -0
  212. package/presets/minimal/.claude/skills/einja/spec-context-loader/SKILL.md +177 -0
  213. package/presets/minimal/.claude/skills/einja/task-commit/SKILL.md +269 -0
  214. package/presets/minimal/.claude/skills/einja/task-qa/SKILL.md +306 -0
  215. package/presets/minimal/.claude/skills/einja/task-qa/reference/failure-patterns.md +69 -0
  216. package/presets/minimal/.claude/skills/einja/task-qa/reference/troubleshooting.md +65 -0
  217. package/presets/minimal/.claude/skills/einja/task-qa/reference/usage-patterns.md +52 -0
  218. package/presets/minimal/.claude/skills/einja/task-qa/templates/qa-test-template.md +128 -0
  219. package/presets/minimal/preset.yaml +111 -0
  220. package/presets/minimal/symlinks.json +45 -0
  221. package/scaffolds/.mcp.json +45 -0
  222. package/scaffolds/CLAUDE.md.template +318 -0
  223. package/scaffolds/steering/README.md +170 -0
  224. package/scaffolds/steering/acceptance-criteria-and-qa-guide.md +415 -0
  225. package/scaffolds/steering/architecture.md +481 -0
  226. package/scaffolds/steering/branch-strategy.md +362 -0
  227. package/scaffolds/steering/commit-rules.md +217 -0
  228. package/scaffolds/steering/db-schema-design.md +609 -0
  229. package/scaffolds/steering/development/api-development.md +783 -0
  230. package/scaffolds/steering/development/backend-architecture.md +731 -0
  231. package/scaffolds/steering/development/frontend-development.md +1537 -0
  232. package/scaffolds/steering/development/review-guidelines.md +365 -0
  233. package/scaffolds/steering/development/testing-strategy.md +819 -0
  234. package/scaffolds/steering/development-workflow.md +429 -0
  235. package/scaffolds/steering/infrastructure/deployment.md +277 -0
  236. package/scaffolds/steering/infrastructure/environment-variables.md +298 -0
  237. package/scaffolds/steering/product.md +540 -0
  238. package/scaffolds/steering/task-management.md +367 -0
  239. package/templates/README.md +159 -0
  240. package/templates/design-simple.md.template +172 -0
  241. package/templates/design.md.template +327 -0
  242. package/templates/qa-test.md.template +125 -0
  243. package/templates/requirements.md.template +254 -0
@@ -0,0 +1,481 @@
1
+ # システムアーキテクチャ概要
2
+
3
+ ## 概要
4
+
5
+ このドキュメントでは、Turborepo + Next.jsモノレポプロジェクトの全体像を、図を中心に説明します。
6
+
7
+ バックエンド・フロントエンド横断で、リポジトリ内のアプリケーションとパッケージがどのように関連し、どのような技術スタックで構成されているかを理解できます。
8
+
9
+ ---
10
+
11
+ ## 目次
12
+
13
+ 1. [システム構成図](#1-システム構成図)
14
+ 2. [アプリケーション](#2-アプリケーション)
15
+ 3. [共有パッケージ](#3-共有パッケージ)
16
+ 4. [依存関係グラフ](#4-依存関係グラフ)
17
+ 5. [技術スタック](#5-技術スタック)
18
+ 6. [デプロイ先](#6-デプロイ先)
19
+ 7. [環境管理](#7-環境管理)
20
+
21
+ ---
22
+
23
+ ## 1. システム構成図
24
+
25
+ ### モノレポ全体構成
26
+
27
+ ```mermaid
28
+ graph TB
29
+ subgraph "Monorepo Root"
30
+ RootConfig[Root Configuration<br/>biome.json<br/>tsconfig.base.json<br/>.env + .env.local]
31
+
32
+ subgraph "Apps"
33
+ WebApp[web<br/>Next.js 14 App Router<br/>Port: 3000 or dynamic]
34
+ AdminApp[admin<br/>Next.js 14 App Router<br/>Port: 3001 or dynamic]
35
+ CronWorker[cron-worker<br/>CLI Jobs (tsx)<br/>On demand execution]
36
+ end
37
+
38
+ subgraph "Shared Packages"
39
+ ServerCore[@repo/server-core<br/>Domain Layer<br/>Infrastructure Layer<br/>Prisma Client<br/>(Application層は各アプリに配置)]
40
+ end
41
+
42
+ subgraph "Environment Management"
43
+ DotenvCLI[dotenv-cli<br/>Hierarchical env loading]
44
+ WorktreeScript[scripts/worktree/dev.ts<br/>Dynamic port allocation]
45
+ end
46
+ end
47
+
48
+ subgraph "External Services"
49
+ Vercel[Vercel Platform<br/>Deployment + Remote Cache]
50
+ PostgreSQL[(PostgreSQL<br/>Database)]
51
+ Railway[Railway<br/>Cron Worker Host]
52
+ Resend[Resend<br/>Email Service]
53
+ S3[S3/Cloudflare R2<br/>Storage]
54
+ end
55
+
56
+ RootConfig -.->|Inherits Config| WebApp
57
+ RootConfig -.->|Inherits Config| AdminApp
58
+ RootConfig -.->|Inherits Config| CronWorker
59
+ RootConfig -.->|Inherits Config| ServerCore
60
+
61
+ DotenvCLI -.->|Load .env| WebApp
62
+ DotenvCLI -.->|Load .env| AdminApp
63
+ DotenvCLI -.->|Load .env| CronWorker
64
+
65
+ WorktreeScript -.->|Set ENV vars| WebApp
66
+ WorktreeScript -.->|Set ENV vars| AdminApp
67
+ WorktreeScript -.->|Set ENV vars| CronWorker
68
+
69
+ WebApp --> ServerCore
70
+ AdminApp --> ServerCore
71
+ CronWorker --> ServerCore
72
+
73
+ ServerCore -->|Connect| PostgreSQL
74
+ ServerCore -->|Email| Resend
75
+ ServerCore -->|Storage| S3
76
+
77
+ WebApp -.->|Deploy| Vercel
78
+ AdminApp -.->|Deploy| Vercel
79
+ CronWorker -.->|Deploy| Railway
80
+
81
+ WebApp -.->|Cache| Vercel
82
+ AdminApp -.->|Cache| Vercel
83
+ CronWorker -.->|Cache| Vercel
84
+ ```
85
+
86
+ ### ディレクトリ構造
87
+
88
+ ```
89
+ project-root/
90
+ ├── apps/ # アプリケーション層
91
+ │ ├── web/ # ユーザー向けWebアプリ
92
+ │ │ ├── src/
93
+ │ │ │ ├── app/ # Next.js App Router
94
+ │ │ │ ├── application/ # アプリケーション層(UseCases)⭐
95
+ │ │ │ ├── components/ # Reactコンポーネント
96
+ │ │ │ ├── lib/ # ライブラリ(Hono Client、API呼び出し)
97
+ │ │ │ └── hooks/ # カスタムフック(Tanstack Query)
98
+ │ │ └── package.json
99
+ │ ├── admin/ # 管理画面
100
+ │ │ ├── src/
101
+ │ │ │ ├── app/
102
+ │ │ │ ├── application/ # アプリケーション層(UseCases)⭐
103
+ │ │ │ ├── components/
104
+ │ │ │ ├── lib/
105
+ │ │ │ └── hooks/
106
+ │ │ └── package.json
107
+ │ └── cron-worker/ # バッチ処理・定期実行
108
+ │ ├── src/
109
+ │ │ ├── application/ # アプリケーション層(UseCases)⭐
110
+ │ │ └── jobs/ # CLIジョブ定義
111
+ │ └── package.json
112
+
113
+ ├── packages/ # 共有パッケージ層
114
+ │ └── server-core/ # サーバーサイド共通ロジック
115
+ │ ├── src/
116
+ │ │ ├── core/ # アーキテクチャのコア(Result型等)
117
+ │ │ ├── domain/ # ドメイン層
118
+ │ │ └── infrastructure/ # インフラ層
119
+ │ └── package.json
120
+
121
+ ├── scripts/ # スクリプト
122
+ │ └── worktree/
123
+ │ └── dev.ts # Worktree用ポート計算
124
+
125
+ ├── .github/ # CI/CD
126
+ │ └── workflows/
127
+ │ ├── ci.yml
128
+ │ └── deploy.yml
129
+
130
+ ├── turbo.json # Turborepoパイプライン設定
131
+ ├── pnpm-workspace.yaml # pnpmワークスペース
132
+ ├── biome.json # Linter/Formatter
133
+ ├── tsconfig.base.json # TypeScript基本設定
134
+ ├── .env # 環境変数(ルート)
135
+ └── .env.local # 環境変数(ローカル)
136
+ ```
137
+
138
+ ---
139
+
140
+ ## 2. アプリケーション
141
+
142
+ ### 2.1 web(ユーザー向けWebアプリ)
143
+
144
+ | 項目 | 内容 |
145
+ |------|------|
146
+ | **フレームワーク** | Next.js 14 App Router |
147
+ | **ポート** | 3000(デフォルト) or Worktree動的割り当て |
148
+ | **用途** | エンドユーザー向けのフロントエンド機能 |
149
+ | **主要機能** | 投稿一覧・作成・詳細、ユーザー認証 |
150
+ | **デプロイ先** | Vercel |
151
+
152
+ **技術構成**:
153
+ - **UI**: React 18 + Tailwind CSS
154
+ - **データフェッチング**: Tanstack Query + Hono Client
155
+ - **フォーム管理**: React Hook Form + zodResolver
156
+ - **バリデーション**: Zod
157
+
158
+ ### 2.2 admin(管理画面)
159
+
160
+ | 項目 | 内容 |
161
+ |------|------|
162
+ | **フレームワーク** | Next.js 14 App Router |
163
+ | **ポート** | 3001(デフォルト) or Worktree動的割り当て |
164
+ | **用途** | システム管理者向けの管理機能 |
165
+ | **主要機能** | 投稿管理、ユーザー管理、システム設定 |
166
+ | **デプロイ先** | Vercel |
167
+
168
+ **技術構成**:
169
+ - webと同様(React、Tanstack Query、React Hook Form)
170
+ - 管理者専用のUIコンポーネント
171
+
172
+ ### 2.3 cron-worker(バッチ処理・定期実行)
173
+
174
+ | 項目 | 内容 |
175
+ |------|------|
176
+ | **実行形式** | CLI(tsxによる直接実行) |
177
+ | **用途** | バックグラウンドジョブ、定期実行タスク |
178
+ | **主要機能** | データクリーンアップ、メール送信、集計処理 |
179
+ | **デプロイ先** | Railway(Cron設定) |
180
+
181
+ **技術構成**:
182
+ - Node.js CLI(tsxランタイム)
183
+ - JobCoordinatorによるジョブロック機構
184
+ - @repo/server-coreへの直接アクセス
185
+
186
+ **Cronスケジュール例**:
187
+ ```yaml
188
+ # railway.toml
189
+ [[crons]]
190
+ command = "pnpm job:cleanup"
191
+ schedule = "0 0 * * *" # 毎日午前0時
192
+
193
+ [[crons]]
194
+ command = "pnpm job:email-digest"
195
+ schedule = "0 9 * * *" # 毎日午前9時
196
+ ```
197
+
198
+ ---
199
+
200
+ ## 3. 共有パッケージ
201
+
202
+ ### @repo/server-core
203
+
204
+ **用途**: サーバーサイドの共通ロジックを一元管理
205
+
206
+ **提供機能**:
207
+ - **Domain層**: エンティティ、バリューオブジェクト、リポジトリインターフェース
208
+ - **Infrastructure層**: Prisma実装、Mapper、外部サービス連携
209
+ - **Utils**: Result型、エラークラス、共通関数
210
+
211
+ **注意**: Application層(UseCases)は各アプリケーション(web、admin、cron-worker)に配置します。
212
+
213
+ **依存関係**:
214
+ - web → @repo/server-core
215
+ - admin → @repo/server-core
216
+ - cron-worker → @repo/server-core
217
+
218
+ **主要コンポーネント**:
219
+
220
+ | コンポーネント | 役割 |
221
+ |--------------|------|
222
+ | **Prisma Client** | データベースアクセス(型安全なORM) |
223
+ | **Repository** | データアクセスの抽象化 |
224
+ | **Mapper** | Prismaモデル ⇔ Domainエンティティ変換 |
225
+ | **Validator** | Zodスキーマによるバリデーション |
226
+ | **Result型** | 例外を使わないエラーハンドリング |
227
+
228
+ **各アプリケーション固有のコンポーネント**:
229
+
230
+ | コンポーネント | 配置場所 | 役割 |
231
+ |--------------|---------|------|
232
+ | **UseCase** | apps/*/src/application/ | アプリ固有のビジネスロジック(オブジェクトリテラル形式) |
233
+
234
+ ---
235
+
236
+ ## 4. 依存関係グラフ
237
+
238
+ ### パッケージ依存関係
239
+
240
+ ```mermaid
241
+ graph TD
242
+ subgraph "Layer 1: Root Configuration"
243
+ RootConfig[Root Config Files<br/>biome.json<br/>tsconfig.base.json]
244
+ end
245
+
246
+ subgraph "Layer 2: Shared Package"
247
+ ServerCore[@repo/server-core<br/>Domain + Infrastructure<br/>Prisma Client]
248
+ end
249
+
250
+ subgraph "Layer 3: Applications"
251
+ Web[web<br/>Local Components]
252
+ Admin[admin<br/>Local Components]
253
+ Cron[cron-worker<br/>Background Jobs]
254
+ end
255
+
256
+ RootConfig -.->|Inherits| ServerCore
257
+ RootConfig -.->|Inherits| Web
258
+ RootConfig -.->|Inherits| Admin
259
+ RootConfig -.->|Inherits| Cron
260
+
261
+ ServerCore --> Web
262
+ ServerCore --> Admin
263
+ ServerCore --> Cron
264
+
265
+ style RootConfig fill:#e1f5ff
266
+ style ServerCore fill:#fff3e0
267
+ style Web fill:#e8f5e9
268
+ style Admin fill:#e8f5e9
269
+ style Cron fill:#e8f5e9
270
+ ```
271
+
272
+ ### ビルド依存関係(Turborepo)
273
+
274
+ ```mermaid
275
+ graph LR
276
+ ServerCore[@repo/server-core]
277
+ Web[web]
278
+ Admin[admin]
279
+ Cron[cron-worker]
280
+
281
+ ServerCore -->|build| Web
282
+ ServerCore -->|build| Admin
283
+ ServerCore -->|build| Cron
284
+
285
+ style ServerCore fill:#fff3e0
286
+ style Web fill:#e8f5e9
287
+ style Admin fill:#e8f5e9
288
+ style Cron fill:#e8f5e9
289
+ ```
290
+
291
+ **ビルド順序**:
292
+ 1. @repo/server-coreをビルド
293
+ 2. web、admin、cron-workerを並列ビルド
294
+
295
+ ---
296
+
297
+ ## 5. 技術スタック
298
+
299
+ ### モノレポ管理
300
+
301
+ | カテゴリ | 技術 | 用途 |
302
+ |---------|------|------|
303
+ | モノレポ管理 | Turborepo 1.x | ビルドオーケストレーション |
304
+ | パッケージマネージャー | pnpm 8.x | ワークスペース管理 |
305
+ | CI/CD | GitHub Actions | 自動化 |
306
+ | リモートキャッシュ | Vercel Remote Cache | ビルド成果物共有 |
307
+
308
+ ### フレームワーク
309
+
310
+ | カテゴリ | 技術 | 用途 |
311
+ |---------|------|------|
312
+ | フレームワーク | Next.js 14.x | Web/Admin |
313
+ | APIフレームワーク | Hono 4.x | 型安全なWebフレームワーク |
314
+ | 言語 | TypeScript 5.x | 型安全性 |
315
+ | UI | React 18.x | フロントエンド |
316
+ | スタイリング | Tailwind CSS 3.x | CSS |
317
+
318
+ ### データベース・ORM
319
+
320
+ | カテゴリ | 技術 | 用途 |
321
+ |---------|------|------|
322
+ | ORM | Prisma 5.x | データアクセス |
323
+ | データベース | PostgreSQL 15.x | データストア |
324
+
325
+ ### データ管理
326
+
327
+ | カテゴリ | 技術 | 用途 |
328
+ |---------|------|------|
329
+ | データフェッチング | Tanstack Query 5.x | キャッシング・状態管理 |
330
+ | フォーム管理 | React Hook Form 7.x | フォームバリデーション |
331
+ | バリデーション | Zod 3.x | スキーマ検証 |
332
+
333
+ ### 開発ツール
334
+
335
+ | カテゴリ | 技術 | 用途 |
336
+ |---------|------|------|
337
+ | Linter & Formatter | Biome 1.9.4+ | コード品質・フォーマット |
338
+ | 環境変数管理 | dotenv-cli 7.3.0 | 階層的env読み込み |
339
+ | 日付処理 | date-fns 3.x | 日付ユーティリティ |
340
+
341
+ ### 外部サービス
342
+
343
+ | カテゴリ | 技術 | 用途 |
344
+ |---------|------|------|
345
+ | メール送信 | Resend | Email Service |
346
+ | ストレージ | AWS S3 / Cloudflare R2 | ファイル保存 |
347
+
348
+ ---
349
+
350
+ ## 6. デプロイ先
351
+
352
+ ### デプロイアーキテクチャ
353
+
354
+ ```mermaid
355
+ graph TB
356
+ subgraph "Development"
357
+ DevLocal[ローカル開発<br/>pnpm dev:bg]
358
+ end
359
+
360
+ subgraph "CI/CD"
361
+ GitHubActions[GitHub Actions<br/>lint/test/build]
362
+ VercelCache[Vercel Remote Cache<br/>ビルド成果物]
363
+ end
364
+
365
+ subgraph "Production"
366
+ VercelProd[Vercel<br/>web + admin]
367
+ RailwayProd[Railway<br/>cron-worker]
368
+ end
369
+
370
+ subgraph "External"
371
+ PostgreSQL[(PostgreSQL)]
372
+ Resend[Resend]
373
+ S3[S3/R2]
374
+ end
375
+
376
+ DevLocal -->|git push| GitHubActions
377
+ GitHubActions -->|cache| VercelCache
378
+ GitHubActions -->|deploy| VercelProd
379
+ GitHubActions -->|deploy| RailwayProd
380
+
381
+ VercelProd --> PostgreSQL
382
+ RailwayProd --> PostgreSQL
383
+ VercelProd --> Resend
384
+ RailwayProd --> Resend
385
+ VercelProd --> S3
386
+ RailwayProd --> S3
387
+ ```
388
+
389
+ ### デプロイ先詳細
390
+
391
+ | アプリケーション | デプロイ先 | 方式 | URL |
392
+ |----------------|-----------|------|-----|
393
+ | **web** | Vercel | Next.js Standaloneビルド | https://web.example.com |
394
+ | **admin** | Vercel | Next.js Standaloneビルド | https://admin.example.com |
395
+ | **cron-worker** | Railway | Dockerコンテナ | - |
396
+
397
+ **デプロイトリガー**:
398
+ - main ブランチへのpush → 本番環境デプロイ
399
+ - PR作成 → プレビュー環境デプロイ(Vercelのみ)
400
+
401
+ ---
402
+
403
+ ## 7. 環境管理
404
+
405
+ ### 環境変数の階層
406
+
407
+ ```mermaid
408
+ graph TD
409
+ RootEnv[ルート .env<br/>共通設定]
410
+ RootEnvLocal[ルート .env.local<br/>ローカル設定]
411
+ AppEnvLocal[アプリ .env.local<br/>アプリ固有設定]
412
+
413
+ RootEnv --> RootEnvLocal
414
+ RootEnvLocal --> AppEnvLocal
415
+
416
+ AppEnvLocal --> WebApp[web]
417
+ AppEnvLocal --> AdminApp[admin]
418
+ AppEnvLocal --> CronApp[cron-worker]
419
+ ```
420
+
421
+ **読み込み順序**:
422
+ 1. ルート `.env`(共通設定)
423
+ 2. ルート `.env.local`(ローカルオーバーライド)
424
+ 3. アプリ `.env.local`(アプリ固有設定)
425
+
426
+ ### Worktree対応
427
+
428
+ **ブランチ別ポート自動割り当て**:
429
+
430
+ ```typescript
431
+ // scripts/worktree/dev.ts
432
+ import crypto from 'crypto'
433
+
434
+ export function calculatePorts(branchName: string): WorktreePorts {
435
+ const hash = crypto.createHash('md5').update(branchName).digest('hex')
436
+ const seed = parseInt(hash.substring(0, 4), 16)
437
+
438
+ return {
439
+ PORT_WEB: 3000 + (seed % 7000),
440
+ PORT_ADMIN: PORT_WEB + 1,
441
+ PORT_WORKER: PORT_WEB + 2,
442
+ POSTGRES_PORT: 5432 + (seed % 1000),
443
+ }
444
+ }
445
+ ```
446
+
447
+ **利点**:
448
+ - 複数ブランチの同時起動が可能
449
+ - ポート競合が自動的に回避される
450
+
451
+ ---
452
+
453
+ ## まとめ
454
+
455
+ このプロジェクトは、以下の構成で開発されています:
456
+
457
+ 1. **3つのアプリケーション**:
458
+ - web(ユーザー向け)→ Vercel
459
+ - admin(管理画面)→ Vercel
460
+ - cron-worker(バッチ)→ Railway
461
+
462
+ 2. **1つの共有パッケージ**:
463
+ - @repo/server-core(サーバーサイド共通ロジック)
464
+
465
+ 3. **モノレポ管理**:
466
+ - Turborepo(高速ビルド)
467
+ - pnpm workspaces(依存関係管理)
468
+ - Vercel Remote Cache(80%ビルド時間削減)
469
+
470
+ 4. **統一されたツールチェーン**:
471
+ - TypeScript(型安全性)
472
+ - Biome(Linter/Formatter)
473
+ - Prisma(ORM)
474
+ - Hono(API)
475
+ - Tanstack Query(データフェッチング)
476
+
477
+ より詳細な設計情報は、以下のドキュメントを参照してください:
478
+ - **[バックエンドアーキテクチャ](development/backend-architecture.md)** - 4層アーキテクチャ、デザインパターン
479
+ - **[API開発ガイド](development/api-development.md)** - Hono API実装
480
+ - **[フロントエンド開発ガイド](development/frontend-development.md)** - React、Tanstack Query
481
+ - **[CI/CDパイプライン](infrastructure/ci-cd.md)** - ビルド・デプロイ自動化