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