@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.
- package/README.md +179 -0
- package/dist/cli.d.ts +2 -0
- package/dist/cli.d.ts.map +1 -0
- package/dist/cli.js +49 -0
- package/dist/cli.js.map +1 -0
- package/dist/commands/init.d.ts +3 -0
- package/dist/commands/init.d.ts.map +1 -0
- package/dist/commands/init.js +243 -0
- package/dist/commands/init.js.map +1 -0
- package/dist/commands/list.d.ts +2 -0
- package/dist/commands/list.d.ts.map +1 -0
- package/dist/commands/list.js +23 -0
- package/dist/commands/list.js.map +1 -0
- package/dist/commands/sync.d.ts +7 -0
- package/dist/commands/sync.d.ts.map +1 -0
- package/dist/commands/sync.js +294 -0
- package/dist/commands/sync.js.map +1 -0
- package/dist/commands/sync.test.d.ts +2 -0
- package/dist/commands/sync.test.d.ts.map +1 -0
- package/dist/commands/sync.test.js +593 -0
- package/dist/commands/sync.test.js.map +1 -0
- package/dist/commands/task-loop.d.ts +11 -0
- package/dist/commands/task-loop.d.ts.map +1 -0
- package/dist/commands/task-loop.js +81 -0
- package/dist/commands/task-loop.js.map +1 -0
- package/dist/index.d.ts +4 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +3 -0
- package/dist/index.js.map +1 -0
- package/dist/lib/file-system.d.ts +39 -0
- package/dist/lib/file-system.d.ts.map +1 -0
- package/dist/lib/file-system.js +79 -0
- package/dist/lib/file-system.js.map +1 -0
- package/dist/lib/mcp-config.d.ts +43 -0
- package/dist/lib/mcp-config.d.ts.map +1 -0
- package/dist/lib/mcp-config.js +109 -0
- package/dist/lib/mcp-config.js.map +1 -0
- package/dist/lib/mcp-config.test.d.ts +2 -0
- package/dist/lib/mcp-config.test.d.ts.map +1 -0
- package/dist/lib/mcp-config.test.js +285 -0
- package/dist/lib/mcp-config.test.js.map +1 -0
- package/dist/lib/merger.d.ts +41 -0
- package/dist/lib/merger.d.ts.map +1 -0
- package/dist/lib/merger.js +164 -0
- package/dist/lib/merger.js.map +1 -0
- package/dist/lib/preset-update/cli-repo-detector.d.ts +35 -0
- package/dist/lib/preset-update/cli-repo-detector.d.ts.map +1 -0
- package/dist/lib/preset-update/cli-repo-detector.js +83 -0
- package/dist/lib/preset-update/cli-repo-detector.js.map +1 -0
- package/dist/lib/preset-update/cli-repo-detector.test.d.ts +2 -0
- package/dist/lib/preset-update/cli-repo-detector.test.d.ts.map +1 -0
- package/dist/lib/preset-update/cli-repo-detector.test.js +120 -0
- package/dist/lib/preset-update/cli-repo-detector.test.js.map +1 -0
- package/dist/lib/preset-update/file-copier.d.ts +59 -0
- package/dist/lib/preset-update/file-copier.d.ts.map +1 -0
- package/dist/lib/preset-update/file-copier.js +220 -0
- package/dist/lib/preset-update/file-copier.js.map +1 -0
- package/dist/lib/preset-update/file-copier.test.d.ts +2 -0
- package/dist/lib/preset-update/file-copier.test.d.ts.map +1 -0
- package/dist/lib/preset-update/file-copier.test.js +297 -0
- package/dist/lib/preset-update/file-copier.test.js.map +1 -0
- package/dist/lib/preset-update/preset-finder.d.ts +39 -0
- package/dist/lib/preset-update/preset-finder.d.ts.map +1 -0
- package/dist/lib/preset-update/preset-finder.js +92 -0
- package/dist/lib/preset-update/preset-finder.js.map +1 -0
- package/dist/lib/preset-update/preset-finder.test.d.ts +2 -0
- package/dist/lib/preset-update/preset-finder.test.d.ts.map +1 -0
- package/dist/lib/preset-update/preset-finder.test.js +128 -0
- package/dist/lib/preset-update/preset-finder.test.js.map +1 -0
- package/dist/lib/preset.d.ts +14 -0
- package/dist/lib/preset.d.ts.map +1 -0
- package/dist/lib/preset.js +52 -0
- package/dist/lib/preset.js.map +1 -0
- package/dist/lib/sync/backup-manager.d.ts +50 -0
- package/dist/lib/sync/backup-manager.d.ts.map +1 -0
- package/dist/lib/sync/backup-manager.js +117 -0
- package/dist/lib/sync/backup-manager.js.map +1 -0
- package/dist/lib/sync/backup-manager.test.d.ts +2 -0
- package/dist/lib/sync/backup-manager.test.d.ts.map +1 -0
- package/dist/lib/sync/backup-manager.test.js +155 -0
- package/dist/lib/sync/backup-manager.test.js.map +1 -0
- package/dist/lib/sync/batch-processor.d.ts +27 -0
- package/dist/lib/sync/batch-processor.d.ts.map +1 -0
- package/dist/lib/sync/batch-processor.js +46 -0
- package/dist/lib/sync/batch-processor.js.map +1 -0
- package/dist/lib/sync/batch-processor.test.d.ts +2 -0
- package/dist/lib/sync/batch-processor.test.d.ts.map +1 -0
- package/dist/lib/sync/batch-processor.test.js +110 -0
- package/dist/lib/sync/batch-processor.test.js.map +1 -0
- package/dist/lib/sync/category-validator.d.ts +36 -0
- package/dist/lib/sync/category-validator.d.ts.map +1 -0
- package/dist/lib/sync/category-validator.js +46 -0
- package/dist/lib/sync/category-validator.js.map +1 -0
- package/dist/lib/sync/category-validator.test.d.ts +2 -0
- package/dist/lib/sync/category-validator.test.d.ts.map +1 -0
- package/dist/lib/sync/category-validator.test.js +89 -0
- package/dist/lib/sync/category-validator.test.js.map +1 -0
- package/dist/lib/sync/conflict-reporter.d.ts +57 -0
- package/dist/lib/sync/conflict-reporter.d.ts.map +1 -0
- package/dist/lib/sync/conflict-reporter.js +81 -0
- package/dist/lib/sync/conflict-reporter.js.map +1 -0
- package/dist/lib/sync/conflict-reporter.test.d.ts +2 -0
- package/dist/lib/sync/conflict-reporter.test.d.ts.map +1 -0
- package/dist/lib/sync/conflict-reporter.test.js +132 -0
- package/dist/lib/sync/conflict-reporter.test.js.map +1 -0
- package/dist/lib/sync/diff-engine.d.ts +28 -0
- package/dist/lib/sync/diff-engine.d.ts.map +1 -0
- package/dist/lib/sync/diff-engine.js +118 -0
- package/dist/lib/sync/diff-engine.js.map +1 -0
- package/dist/lib/sync/diff-engine.test.d.ts +2 -0
- package/dist/lib/sync/diff-engine.test.d.ts.map +1 -0
- package/dist/lib/sync/diff-engine.test.js +133 -0
- package/dist/lib/sync/diff-engine.test.js.map +1 -0
- package/dist/lib/sync/file-filter.d.ts +40 -0
- package/dist/lib/sync/file-filter.d.ts.map +1 -0
- package/dist/lib/sync/file-filter.js +171 -0
- package/dist/lib/sync/file-filter.js.map +1 -0
- package/dist/lib/sync/file-filter.test.d.ts +2 -0
- package/dist/lib/sync/file-filter.test.d.ts.map +1 -0
- package/dist/lib/sync/file-filter.test.js +179 -0
- package/dist/lib/sync/file-filter.test.js.map +1 -0
- package/dist/lib/sync/hash-cache.d.ts +34 -0
- package/dist/lib/sync/hash-cache.d.ts.map +1 -0
- package/dist/lib/sync/hash-cache.js +51 -0
- package/dist/lib/sync/hash-cache.js.map +1 -0
- package/dist/lib/sync/hash-cache.test.d.ts +2 -0
- package/dist/lib/sync/hash-cache.test.d.ts.map +1 -0
- package/dist/lib/sync/hash-cache.test.js +110 -0
- package/dist/lib/sync/hash-cache.test.js.map +1 -0
- package/dist/lib/sync/integration.test.d.ts +2 -0
- package/dist/lib/sync/integration.test.d.ts.map +1 -0
- package/dist/lib/sync/integration.test.js +317 -0
- package/dist/lib/sync/integration.test.js.map +1 -0
- package/dist/lib/sync/marker-processor.d.ts +54 -0
- package/dist/lib/sync/marker-processor.d.ts.map +1 -0
- package/dist/lib/sync/marker-processor.js +208 -0
- package/dist/lib/sync/marker-processor.js.map +1 -0
- package/dist/lib/sync/marker-processor.test.d.ts +2 -0
- package/dist/lib/sync/marker-processor.test.d.ts.map +1 -0
- package/dist/lib/sync/marker-processor.test.js +245 -0
- package/dist/lib/sync/marker-processor.test.js.map +1 -0
- package/dist/lib/sync/metadata-manager.d.ts +46 -0
- package/dist/lib/sync/metadata-manager.d.ts.map +1 -0
- package/dist/lib/sync/metadata-manager.js +129 -0
- package/dist/lib/sync/metadata-manager.js.map +1 -0
- package/dist/lib/sync/metadata-manager.test.d.ts +2 -0
- package/dist/lib/sync/metadata-manager.test.d.ts.map +1 -0
- package/dist/lib/sync/metadata-manager.test.js +137 -0
- package/dist/lib/sync/metadata-manager.test.js.map +1 -0
- package/dist/lib/sync/performance.test.d.ts +2 -0
- package/dist/lib/sync/performance.test.d.ts.map +1 -0
- package/dist/lib/sync/performance.test.js +126 -0
- package/dist/lib/sync/performance.test.js.map +1 -0
- package/dist/types/index.d.ts +59 -0
- package/dist/types/index.d.ts.map +1 -0
- package/dist/types/index.js +2 -0
- package/dist/types/index.js.map +1 -0
- package/dist/types/preset-update.d.ts +106 -0
- package/dist/types/preset-update.d.ts.map +1 -0
- package/dist/types/preset-update.js +5 -0
- package/dist/types/preset-update.js.map +1 -0
- package/dist/types/sync.d.ts +169 -0
- package/dist/types/sync.d.ts.map +1 -0
- package/dist/types/sync.js +19 -0
- package/dist/types/sync.js.map +1 -0
- package/package.json +72 -0
- package/presets/minimal/.claude/agents/einja/docs/docs-updater.md +161 -0
- package/presets/minimal/.claude/agents/einja/frontend/design-engineer.md +685 -0
- package/presets/minimal/.claude/agents/einja/frontend/frontend-architect.md +747 -0
- package/presets/minimal/.claude/agents/einja/frontend/frontend-coder.md +441 -0
- package/presets/minimal/.claude/agents/einja/git/conflict-resolver.md +148 -0
- package/presets/minimal/.claude/agents/einja/specs/spec-design-generator.md +462 -0
- package/presets/minimal/.claude/agents/einja/specs/spec-qa-generator.md +466 -0
- package/presets/minimal/.claude/agents/einja/specs/spec-requirements-generator.md +416 -0
- package/presets/minimal/.claude/agents/einja/specs/spec-tasks-generator.md +608 -0
- package/presets/minimal/.claude/agents/einja/task/task-committer.md +82 -0
- package/presets/minimal/.claude/agents/einja/task/task-executer.md +352 -0
- package/presets/minimal/.claude/agents/einja/task/task-modification-analyzer.md +369 -0
- package/presets/minimal/.claude/agents/einja/task/task-qa.md +74 -0
- package/presets/minimal/.claude/agents/einja/task/task-reviewer.md +169 -0
- package/presets/minimal/.claude/commands/einja/frontend-implement.md +322 -0
- package/presets/minimal/.claude/commands/einja/spec-create.md +254 -0
- package/presets/minimal/.claude/commands/einja/start-dev.md +98 -0
- package/presets/minimal/.claude/commands/einja/sync-cursor-commands.md +203 -0
- package/presets/minimal/.claude/commands/einja/task-exec.md +390 -0
- package/presets/minimal/.claude/commands/einja/update-docs-by-task-specs.md +448 -0
- package/presets/minimal/.claude/hooks/einja/biome-format.sh +49 -0
- package/presets/minimal/.claude/hooks/einja/design-doc-check.sh +61 -0
- package/presets/minimal/.claude/hooks/einja/detect-secrets.sh +62 -0
- package/presets/minimal/.claude/hooks/einja/large-file-warning.sh +42 -0
- package/presets/minimal/.claude/hooks/einja/playwright-resize.sh +36 -0
- package/presets/minimal/.claude/hooks/einja/typecheck.sh +37 -0
- package/presets/minimal/.claude/hooks/einja/unset-volta-recursion.sh +32 -0
- package/presets/minimal/.claude/hooks/einja/validate-git-commit.sh +239 -0
- package/presets/minimal/.claude/hooks/einja/warn-index-ts.sh +34 -0
- package/presets/minimal/.claude/hooks/einja/warn-relative-import.sh +48 -0
- package/presets/minimal/.claude/settings.json +174 -0
- package/presets/minimal/.claude/skills/einja/api-development/SKILL.md +14 -0
- package/presets/minimal/.claude/skills/einja/backend-architecture/SKILL.md +14 -0
- package/presets/minimal/.claude/skills/einja/coding-standards/SKILL.md +120 -0
- package/presets/minimal/.claude/skills/einja/coding-standards/reference/naming-conventions.md +107 -0
- package/presets/minimal/.claude/skills/einja/coding-standards/reference/prohibited-patterns.md +169 -0
- package/presets/minimal/.claude/skills/einja/coding-standards/reference/typescript-rules.md +247 -0
- package/presets/minimal/.claude/skills/einja/component-design/SKILL.md +109 -0
- package/presets/minimal/.claude/skills/einja/component-design/reference/directory-structure.md +117 -0
- package/presets/minimal/.claude/skills/einja/component-design/reference/props-patterns.md +159 -0
- package/presets/minimal/.claude/skills/einja/component-design/reference/styling-guide.md +200 -0
- package/presets/minimal/.claude/skills/einja/conflict-resolver/SKILL.md +190 -0
- package/presets/minimal/.claude/skills/einja/frontend-development/SKILL.md +14 -0
- package/presets/minimal/.claude/skills/einja/general-context-loader/SKILL.md +254 -0
- package/presets/minimal/.claude/skills/einja/output-format/SKILL.md +137 -0
- package/presets/minimal/.claude/skills/einja/spec-context-loader/SKILL.md +177 -0
- package/presets/minimal/.claude/skills/einja/task-commit/SKILL.md +269 -0
- package/presets/minimal/.claude/skills/einja/task-qa/SKILL.md +306 -0
- package/presets/minimal/.claude/skills/einja/task-qa/reference/failure-patterns.md +69 -0
- package/presets/minimal/.claude/skills/einja/task-qa/reference/troubleshooting.md +65 -0
- package/presets/minimal/.claude/skills/einja/task-qa/reference/usage-patterns.md +52 -0
- package/presets/minimal/.claude/skills/einja/task-qa/templates/qa-test-template.md +128 -0
- package/presets/minimal/preset.yaml +111 -0
- package/presets/minimal/symlinks.json +45 -0
- package/scaffolds/.mcp.json +45 -0
- package/scaffolds/CLAUDE.md.template +318 -0
- package/scaffolds/steering/README.md +170 -0
- package/scaffolds/steering/acceptance-criteria-and-qa-guide.md +415 -0
- package/scaffolds/steering/architecture.md +481 -0
- package/scaffolds/steering/branch-strategy.md +362 -0
- package/scaffolds/steering/commit-rules.md +217 -0
- package/scaffolds/steering/db-schema-design.md +609 -0
- package/scaffolds/steering/development/api-development.md +783 -0
- package/scaffolds/steering/development/backend-architecture.md +731 -0
- package/scaffolds/steering/development/frontend-development.md +1537 -0
- package/scaffolds/steering/development/review-guidelines.md +365 -0
- package/scaffolds/steering/development/testing-strategy.md +819 -0
- package/scaffolds/steering/development-workflow.md +429 -0
- package/scaffolds/steering/infrastructure/deployment.md +277 -0
- package/scaffolds/steering/infrastructure/environment-variables.md +298 -0
- package/scaffolds/steering/product.md +540 -0
- package/scaffolds/steering/task-management.md +367 -0
- package/templates/README.md +159 -0
- package/templates/design-simple.md.template +172 -0
- package/templates/design.md.template +327 -0
- package/templates/qa-test.md.template +125 -0
- 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)** - ビルド・デプロイ自動化
|