@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,277 @@
|
|
|
1
|
+
# デプロイメント・CI/CD設計方針
|
|
2
|
+
|
|
3
|
+
## 概要
|
|
4
|
+
|
|
5
|
+
このドキュメントでは、プロジェクトのデプロイメントとCI/CDパイプラインの**設計方針**を説明します。
|
|
6
|
+
|
|
7
|
+
具体的な設定手順については以下を参照してください:
|
|
8
|
+
- [デプロイセットアップ手順](../../instructions/deployment-setup.md)
|
|
9
|
+
- [環境変数セットアップ手順](../../instructions/environment-setup.md)
|
|
10
|
+
|
|
11
|
+
---
|
|
12
|
+
|
|
13
|
+
## 目次
|
|
14
|
+
|
|
15
|
+
1. [デプロイメントアーキテクチャ](#1-デプロイメントアーキテクチャ)
|
|
16
|
+
2. [プラットフォーム選定理由](#2-プラットフォーム選定理由)
|
|
17
|
+
3. [CI/CDパイプライン設計](#3-cicdパイプライン設計)
|
|
18
|
+
4. [キャッシュ戦略](#4-キャッシュ戦略)
|
|
19
|
+
5. [Worktree対応設計](#5-worktree対応設計)
|
|
20
|
+
6. [ロールバック戦略](#6-ロールバック戦略)
|
|
21
|
+
|
|
22
|
+
---
|
|
23
|
+
|
|
24
|
+
## 1. デプロイメントアーキテクチャ
|
|
25
|
+
|
|
26
|
+
### 全体構成
|
|
27
|
+
|
|
28
|
+
```mermaid
|
|
29
|
+
graph TB
|
|
30
|
+
subgraph "GitHub Repository"
|
|
31
|
+
Main[main branch]
|
|
32
|
+
Feature[feature branches]
|
|
33
|
+
end
|
|
34
|
+
|
|
35
|
+
subgraph "Vercel Platform"
|
|
36
|
+
WebProd[web - Production]
|
|
37
|
+
WebPreview[web - Preview]
|
|
38
|
+
end
|
|
39
|
+
|
|
40
|
+
subgraph "Railway Platform"
|
|
41
|
+
CronProd[cron-worker - Production]
|
|
42
|
+
CronStaging[cron-worker - Staging]
|
|
43
|
+
end
|
|
44
|
+
|
|
45
|
+
subgraph "Database"
|
|
46
|
+
DB[(PostgreSQL)]
|
|
47
|
+
end
|
|
48
|
+
|
|
49
|
+
Main -->|Auto Deploy| WebProd
|
|
50
|
+
Main -->|Auto Deploy| CronProd
|
|
51
|
+
|
|
52
|
+
Feature -->|PR Deploy| WebPreview
|
|
53
|
+
Feature -->|Manual Deploy| CronStaging
|
|
54
|
+
|
|
55
|
+
WebProd --> DB
|
|
56
|
+
CronProd --> DB
|
|
57
|
+
```
|
|
58
|
+
|
|
59
|
+
### デプロイメント対象
|
|
60
|
+
|
|
61
|
+
| アプリケーション | プラットフォーム | デプロイトリガー | 環境 |
|
|
62
|
+
|----------------|--------------|--------------|------|
|
|
63
|
+
| web | Vercel | main push, PR作成 | Production, Preview |
|
|
64
|
+
| cron-worker | Railway | main push | Production |
|
|
65
|
+
|
|
66
|
+
---
|
|
67
|
+
|
|
68
|
+
## 2. プラットフォーム選定理由
|
|
69
|
+
|
|
70
|
+
### Vercel(Web/Admin)
|
|
71
|
+
|
|
72
|
+
**選定理由**:
|
|
73
|
+
- Next.jsの開発元であり、最適化が保証されている
|
|
74
|
+
- Edge NetworkによるグローバルCDN配信
|
|
75
|
+
- Preview Deploymentsによる迅速なレビュー
|
|
76
|
+
- Turborepo Remote Cacheとの統合
|
|
77
|
+
|
|
78
|
+
**採用機能**:
|
|
79
|
+
- Standalone Build(コンテナサイズ最小化)
|
|
80
|
+
- ISR(Incremental Static Regeneration)
|
|
81
|
+
- Edge Middleware
|
|
82
|
+
|
|
83
|
+
### Railway(Cron Worker)
|
|
84
|
+
|
|
85
|
+
**選定理由**:
|
|
86
|
+
- ネイティブCronジョブサポート
|
|
87
|
+
- Dockerコンテナのシンプルなデプロイ
|
|
88
|
+
- 環境変数のシームレスな管理
|
|
89
|
+
- 従量課金で低コスト運用可能
|
|
90
|
+
|
|
91
|
+
**採用機能**:
|
|
92
|
+
- Cron Job Scheduling
|
|
93
|
+
- Docker Image Deploy
|
|
94
|
+
- Health Checks
|
|
95
|
+
|
|
96
|
+
---
|
|
97
|
+
|
|
98
|
+
## 3. CI/CDパイプライン設計
|
|
99
|
+
|
|
100
|
+
### パイプラインフロー
|
|
101
|
+
|
|
102
|
+
```mermaid
|
|
103
|
+
sequenceDiagram
|
|
104
|
+
participant Dev as 開発者
|
|
105
|
+
participant GH as GitHub
|
|
106
|
+
participant CI as GitHub Actions
|
|
107
|
+
participant Turbo as Turborepo
|
|
108
|
+
participant Cache as Vercel Cache
|
|
109
|
+
participant Vercel as Vercel
|
|
110
|
+
participant Railway as Railway
|
|
111
|
+
|
|
112
|
+
Dev->>GH: git push
|
|
113
|
+
GH->>CI: Workflow トリガー
|
|
114
|
+
CI->>CI: 環境セットアップ
|
|
115
|
+
CI->>Turbo: turbo login
|
|
116
|
+
Turbo->>Cache: キャッシュ認証
|
|
117
|
+
|
|
118
|
+
CI->>Turbo: turbo run lint
|
|
119
|
+
Turbo->>Cache: キャッシュチェック
|
|
120
|
+
Cache-->>Turbo: キャッシュヒット/ミス
|
|
121
|
+
Turbo-->>CI: Lint完了
|
|
122
|
+
|
|
123
|
+
CI->>Turbo: turbo run build
|
|
124
|
+
Turbo->>Cache: キャッシュチェック
|
|
125
|
+
Turbo->>Turbo: ビルド実行
|
|
126
|
+
Turbo->>Cache: 結果アップロード
|
|
127
|
+
Turbo-->>CI: ビルド完了
|
|
128
|
+
|
|
129
|
+
CI->>Turbo: turbo run test
|
|
130
|
+
Turbo-->>CI: テスト完了
|
|
131
|
+
|
|
132
|
+
alt main ブランチ
|
|
133
|
+
CI->>Vercel: web デプロイ
|
|
134
|
+
CI->>Railway: cron-worker デプロイ
|
|
135
|
+
end
|
|
136
|
+
|
|
137
|
+
CI-->>Dev: ステータス通知
|
|
138
|
+
```
|
|
139
|
+
|
|
140
|
+
### ステージ構成
|
|
141
|
+
|
|
142
|
+
| ステージ | タスク | 並列実行 | キャッシュ |
|
|
143
|
+
|---------|-------|---------|----------|
|
|
144
|
+
| Setup | pnpm install, turbo login | - | ✅ |
|
|
145
|
+
| Lint | turbo run lint | ✅ | ✅ |
|
|
146
|
+
| Type Check | turbo run typecheck | ✅ | ✅ |
|
|
147
|
+
| Test | turbo run test | ✅ | ✅ |
|
|
148
|
+
| Build | turbo run build | ✅ | ✅ |
|
|
149
|
+
| Deploy | Vercel, Railway | ✅ | ❌ |
|
|
150
|
+
|
|
151
|
+
### 設計方針
|
|
152
|
+
|
|
153
|
+
1. **高速フィードバック**: Lint・Type Checkを並列実行し、早期エラー検出
|
|
154
|
+
2. **キャッシュ最大活用**: Turborepo Remote Cacheで86%の時間削減
|
|
155
|
+
3. **環境分離**: dotenvxによる暗号化環境変数でセキュアなCI/CD
|
|
156
|
+
|
|
157
|
+
---
|
|
158
|
+
|
|
159
|
+
## 4. キャッシュ戦略
|
|
160
|
+
|
|
161
|
+
### Turborepo Remote Cache
|
|
162
|
+
|
|
163
|
+
**設計方針**:
|
|
164
|
+
- ビルド成果物をVercel Remote Cacheに保存
|
|
165
|
+
- チーム間でキャッシュを共有し、ビルド時間を大幅短縮
|
|
166
|
+
- 環境変数の変更時は自動でキャッシュ無効化
|
|
167
|
+
|
|
168
|
+
### キャッシュ対象
|
|
169
|
+
|
|
170
|
+
| タスク | キャッシュ | 理由 |
|
|
171
|
+
|--------|----------|------|
|
|
172
|
+
| build | ✅ | ビルド成果物を再利用 |
|
|
173
|
+
| lint | ✅ | ソースコード未変更時はスキップ |
|
|
174
|
+
| typecheck | ✅ | 型定義未変更時はスキップ |
|
|
175
|
+
| test | ✅ | テストコード・対象未変更時はスキップ |
|
|
176
|
+
| dev | ❌ | 開発サーバーは継続実行 |
|
|
177
|
+
| db:* | ❌ | データベース操作は冪等性なし |
|
|
178
|
+
|
|
179
|
+
### キャッシュ効果
|
|
180
|
+
|
|
181
|
+
| タスク | キャッシュなし | キャッシュあり | 削減率 |
|
|
182
|
+
|--------|--------------|--------------|--------|
|
|
183
|
+
| lint | 10s | 2s | 80% |
|
|
184
|
+
| typecheck | 15s | 3s | 80% |
|
|
185
|
+
| build | 45s | 5s | 89% |
|
|
186
|
+
| test | 30s | 4s | 87% |
|
|
187
|
+
| **合計** | **100s** | **14s** | **86%** |
|
|
188
|
+
|
|
189
|
+
---
|
|
190
|
+
|
|
191
|
+
## 5. Worktree対応設計
|
|
192
|
+
|
|
193
|
+
### 課題
|
|
194
|
+
|
|
195
|
+
複数のブランチを並行開発する際、ポート番号が衝突する問題がある。
|
|
196
|
+
|
|
197
|
+
### 解決策
|
|
198
|
+
|
|
199
|
+
SHA-256ハッシュベースの動的ポート割り当てを採用。
|
|
200
|
+
|
|
201
|
+
**設計方針**:
|
|
202
|
+
1. ブランチ名からSHA-256ハッシュを生成
|
|
203
|
+
2. ハッシュ値からポート番号を算出(衝突確率を最小化)
|
|
204
|
+
3. 環境変数に自動設定し、Turborepoに引き継ぎ
|
|
205
|
+
|
|
206
|
+
### ポート割り当て設計
|
|
207
|
+
|
|
208
|
+
```mermaid
|
|
209
|
+
sequenceDiagram
|
|
210
|
+
participant Dev as 開発者
|
|
211
|
+
participant Script as scripts/worktree/dev.ts
|
|
212
|
+
participant Git as Git
|
|
213
|
+
participant Calc as calculatePorts
|
|
214
|
+
participant Turbo as Turborepo
|
|
215
|
+
participant App as web/cron-worker
|
|
216
|
+
|
|
217
|
+
Dev->>Script: pnpm dev
|
|
218
|
+
Script->>Git: git branch --show-current
|
|
219
|
+
Git-->>Script: ブランチ名(例: feature/auth)
|
|
220
|
+
Script->>Calc: calculatePorts(branch)
|
|
221
|
+
Calc->>Calc: SHA-256ハッシュ計算
|
|
222
|
+
Calc-->>Script: ポート番号セット
|
|
223
|
+
Note over Script: PORT_WEB=3120<br/>POSTGRES_PORT=35432
|
|
224
|
+
Script->>Script: process.env設定
|
|
225
|
+
Script->>Script: DATABASE_URL組み立て
|
|
226
|
+
Script->>Turbo: pnpm turbo run dev
|
|
227
|
+
Turbo->>App: 各アプリ起動
|
|
228
|
+
App-->>Dev: ブランチ固有ポートで起動完了
|
|
229
|
+
```
|
|
230
|
+
|
|
231
|
+
### ポート範囲設計
|
|
232
|
+
|
|
233
|
+
| ポート | 範囲 | 用途 |
|
|
234
|
+
|--------|------|------|
|
|
235
|
+
| PORT_WEB | 3000-3999 | Webアプリ |
|
|
236
|
+
| POSTGRES_PORT | 35432 (固定) | PostgreSQL |
|
|
237
|
+
|
|
238
|
+
---
|
|
239
|
+
|
|
240
|
+
## 6. ロールバック戦略
|
|
241
|
+
|
|
242
|
+
### 設計方針
|
|
243
|
+
|
|
244
|
+
1. **即時ロールバック**: デプロイ履歴から1クリックで前バージョンに戻す
|
|
245
|
+
2. **DB互換性**: マイグレーションは常に後方互換を維持
|
|
246
|
+
3. **Feature Flags**: 大きな変更はフラグで制御し、段階的リリース
|
|
247
|
+
|
|
248
|
+
### Vercelロールバック
|
|
249
|
+
|
|
250
|
+
**方針**: Instant Rollbackを活用し、ダウンタイムなしでロールバック
|
|
251
|
+
|
|
252
|
+
1. Vercel Dashboardで過去のデプロイを選択
|
|
253
|
+
2. "Promote to Production" で即座に切り替え
|
|
254
|
+
3. DNS/CDN自動更新で反映
|
|
255
|
+
|
|
256
|
+
### Railwayロールバック
|
|
257
|
+
|
|
258
|
+
**方針**: Dockerイメージタグによるバージョン管理
|
|
259
|
+
|
|
260
|
+
1. 各デプロイにgit SHAタグを付与
|
|
261
|
+
2. 問題発生時は前バージョンのイメージを再デプロイ
|
|
262
|
+
|
|
263
|
+
### データベースロールバック
|
|
264
|
+
|
|
265
|
+
**方針**: 破壊的マイグレーションを避け、後方互換を維持
|
|
266
|
+
|
|
267
|
+
- カラム削除は2フェーズで実施(非推奨化 → 削除)
|
|
268
|
+
- 型変更は新カラム追加 → データ移行 → 旧カラム削除
|
|
269
|
+
- インデックス追加は`CREATE CONCURRENTLY`で無停止実行
|
|
270
|
+
|
|
271
|
+
---
|
|
272
|
+
|
|
273
|
+
## 関連ドキュメント
|
|
274
|
+
|
|
275
|
+
- [環境変数設計方針](./environment-variables.md)
|
|
276
|
+
- [デプロイセットアップ手順](../../instructions/deployment-setup.md)
|
|
277
|
+
- [環境変数セットアップ手順](../../instructions/environment-setup.md)
|
|
@@ -0,0 +1,298 @@
|
|
|
1
|
+
# 環境変数設計方針
|
|
2
|
+
|
|
3
|
+
## 概要
|
|
4
|
+
|
|
5
|
+
このドキュメントでは、環境変数管理の**設計方針**と**dotenvx採用理由**を説明します。
|
|
6
|
+
|
|
7
|
+
具体的な設定手順については以下を参照してください:
|
|
8
|
+
- [環境変数セットアップ手順](../../instructions/environment-setup.md)
|
|
9
|
+
|
|
10
|
+
---
|
|
11
|
+
|
|
12
|
+
## 目次
|
|
13
|
+
|
|
14
|
+
1. [設計原則](#1-設計原則)
|
|
15
|
+
2. [ローカル開発のファイル構成](#2-ローカル開発のファイル構成)
|
|
16
|
+
3. [dotenvx採用理由](#3-dotenvx採用理由)
|
|
17
|
+
4. [ファイル構成設計](#4-ファイル構成設計)
|
|
18
|
+
5. [階層的ロード設計](#5-階層的ロード設計)
|
|
19
|
+
6. [命名規約](#6-命名規約)
|
|
20
|
+
7. [シークレット管理方針](#7-シークレット管理方針)
|
|
21
|
+
|
|
22
|
+
---
|
|
23
|
+
|
|
24
|
+
## 1. 設計原則
|
|
25
|
+
|
|
26
|
+
### 環境変数管理の三原則
|
|
27
|
+
|
|
28
|
+
1. **暗号化**: 秘密情報は必ず暗号化してGit管理
|
|
29
|
+
2. **環境分離**: 開発・ステージング・本番で明確に分離
|
|
30
|
+
3. **ローカル優先**: ローカル開発では復号不要で即座に起動可能
|
|
31
|
+
|
|
32
|
+
### 環境別の管理方針
|
|
33
|
+
|
|
34
|
+
| 環境 | 管理ファイル | 暗号化 | Git追跡 |
|
|
35
|
+
|------|-------------|--------|--------|
|
|
36
|
+
| ローカル開発 | `.env.local` → `.env` + `.env.personal` | ✅ | `.env.local`のみ |
|
|
37
|
+
| dev検証 | `.env.development` | ✅ | ✅ |
|
|
38
|
+
| ステージング | `.env.staging` | ✅ | ✅ |
|
|
39
|
+
| 本番 | `.env.production` | ✅ | ✅ |
|
|
40
|
+
| CI/CD | `.env.ci` | ✅ | ✅ |
|
|
41
|
+
|
|
42
|
+
**ポイント**: ローカル開発も暗号化ファイル(`.env.local`)を使用。`pnpm dev:setup`で復号して`.env`を生成。
|
|
43
|
+
|
|
44
|
+
---
|
|
45
|
+
|
|
46
|
+
## 2. ローカル開発のファイル構成
|
|
47
|
+
|
|
48
|
+
### ファイルの関係
|
|
49
|
+
|
|
50
|
+
```
|
|
51
|
+
┌─────────────────────────────────────────────────────────────────┐
|
|
52
|
+
│ .env.local(暗号化済み・Gitで共有) │
|
|
53
|
+
│ ├─ DATABASE_URL=encrypted:xxxxx... │
|
|
54
|
+
│ ├─ AUTH_SECRET=encrypted:xxxxx... │
|
|
55
|
+
│ └─ チーム全員が使う共通設定 │
|
|
56
|
+
└─────────────────────────────────────────────────────────────────┘
|
|
57
|
+
│
|
|
58
|
+
│ pnpm dev:setup で自動復号
|
|
59
|
+
▼
|
|
60
|
+
┌─────────────────────────────────────────────────────────────────┐
|
|
61
|
+
│ .env(平文・Gitで共有しない) │
|
|
62
|
+
│ ├─ DATABASE_URL=postgresql://... │
|
|
63
|
+
│ ├─ AUTH_SECRET=your-secret-key │
|
|
64
|
+
│ └─ direnvが読み込む作業用ファイル │
|
|
65
|
+
│ ⚠️ pnpm dev で毎回再生成される │
|
|
66
|
+
└─────────────────────────────────────────────────────────────────┘
|
|
67
|
+
+
|
|
68
|
+
┌─────────────────────────────────────────────────────────────────┐
|
|
69
|
+
│ .env.personal(平文・Gitで共有しない) │
|
|
70
|
+
│ ├─ GITHUB_TOKEN=ghp_xxxx...(あなた専用) │
|
|
71
|
+
│ └─ 個人固有のトークン │
|
|
72
|
+
└─────────────────────────────────────────────────────────────────┘
|
|
73
|
+
```
|
|
74
|
+
|
|
75
|
+
### 各ファイルの役割
|
|
76
|
+
|
|
77
|
+
| ファイル | 暗号化 | Git追跡 | 内容 | 編集するとき |
|
|
78
|
+
|---------|:-----:|:------:|------|------------|
|
|
79
|
+
| `.env.local` | ✅ | ✅ | ローカル開発の共通設定 | チーム共有の設定を変更したいとき |
|
|
80
|
+
| `.env` | ❌ | ❌ | ↑を復号したもの | **直接編集しない**(pnpm devで再生成) |
|
|
81
|
+
| `.env.personal` | ❌ | ❌ | 個人トークン | 自分のトークンを設定するとき |
|
|
82
|
+
|
|
83
|
+
### よくある質問
|
|
84
|
+
|
|
85
|
+
**Q: なぜ `.env.local` を direnv で直接読まないの?**
|
|
86
|
+
|
|
87
|
+
A: `.env.local` は暗号化されているため、direnv では読めません。
|
|
88
|
+
`pnpm dev:setup` が復号して `.env` を作成し、それを direnv が読みます。
|
|
89
|
+
|
|
90
|
+
**Q: チームで共有する設定を変えたいときは?**
|
|
91
|
+
|
|
92
|
+
A: `pnpm env:update` を実行して「チーム共有設定を変更」を選択します。
|
|
93
|
+
対話式で復号→編集→再暗号化まで案内されます。
|
|
94
|
+
|
|
95
|
+
**Q: 個人のGITHUB_TOKENはどこに書く?**
|
|
96
|
+
|
|
97
|
+
A: `pnpm env:update` を実行して「個人トークンを設定」を選択するか、
|
|
98
|
+
直接 `.env.personal` を編集します。このファイルはGitに含まれません。
|
|
99
|
+
|
|
100
|
+
**Q: pnpm dev を実行すると秘密情報が消える?**
|
|
101
|
+
|
|
102
|
+
A: `.env` は毎回再生成されますが、秘密情報は `.env.local`(暗号化)から
|
|
103
|
+
マージされます。個人トークンは `.env.personal` に書いておけば消えません。
|
|
104
|
+
|
|
105
|
+
---
|
|
106
|
+
|
|
107
|
+
## 3. dotenvx採用理由
|
|
108
|
+
|
|
109
|
+
### 課題
|
|
110
|
+
|
|
111
|
+
従来の環境変数管理には以下の問題があった:
|
|
112
|
+
|
|
113
|
+
1. **秘密情報の共有困難**: `.env`ファイルをGit管理できず、チーム間で安全に共有できない
|
|
114
|
+
2. **環境間の不整合**: 手動設定によるミスで環境ごとに設定が異なる
|
|
115
|
+
3. **CI/CDでの秘密管理**: GitHub Secretsの数が増え、管理が煩雑
|
|
116
|
+
|
|
117
|
+
### dotenvxの解決策
|
|
118
|
+
|
|
119
|
+
**dotenvx**は環境変数を暗号化し、安全にGit管理できるツール:
|
|
120
|
+
|
|
121
|
+
```
|
|
122
|
+
┌─────────────────────────────────────────────────────────────┐
|
|
123
|
+
│ dotenvx暗号化フロー │
|
|
124
|
+
├─────────────────────────────────────────────────────────────┤
|
|
125
|
+
│ │
|
|
126
|
+
│ .env.production dotenvx encrypt 暗号化済み │
|
|
127
|
+
│ ┌──────────────┐ ────────────────> ┌──────────┐ │
|
|
128
|
+
│ │ SECRET=plain │ │ encrypted │ │
|
|
129
|
+
│ │ API_KEY=xxx │ │ xxxxxxxx │ │
|
|
130
|
+
│ └──────────────┘ └──────────┘ │
|
|
131
|
+
│ │ │ │
|
|
132
|
+
│ │ │ │
|
|
133
|
+
│ ▼ ▼ │
|
|
134
|
+
│ .gitignore Git追跡可能 │
|
|
135
|
+
│ (Git除外) │
|
|
136
|
+
│ │
|
|
137
|
+
│ .env.keys(秘密鍵) │
|
|
138
|
+
│ ┌──────────────────────────────────────────────────────┐ │
|
|
139
|
+
│ │ DOTENV_PRIVATE_KEY_PRODUCTION=xxxx │ │
|
|
140
|
+
│ │ DOTENV_PRIVATE_KEY_STAGING=xxxx │ │
|
|
141
|
+
│ └──────────────────────────────────────────────────────┘ │
|
|
142
|
+
│ │ │
|
|
143
|
+
│ ▼ │
|
|
144
|
+
│ .gitignore(Git除外)+ 1Password等で安全に保管 │
|
|
145
|
+
│ │
|
|
146
|
+
└─────────────────────────────────────────────────────────────┘
|
|
147
|
+
```
|
|
148
|
+
|
|
149
|
+
### 採用メリット
|
|
150
|
+
|
|
151
|
+
| 観点 | 従来手法 | dotenvx |
|
|
152
|
+
|------|---------|---------|
|
|
153
|
+
| Git管理 | ❌ 不可 | ✅ 暗号化して可能 |
|
|
154
|
+
| チーム共有 | ❌ 手動共有 | ✅ Git経由で自動 |
|
|
155
|
+
| CI/CD設定 | ❌ 多数のSecrets | ✅ 1つの秘密鍵のみ |
|
|
156
|
+
| 環境一貫性 | ❌ 手動で不整合 | ✅ コードと同期 |
|
|
157
|
+
| 監査証跡 | ❌ なし | ✅ Gitコミット履歴 |
|
|
158
|
+
|
|
159
|
+
---
|
|
160
|
+
|
|
161
|
+
## 4. ファイル構成設計
|
|
162
|
+
|
|
163
|
+
### ファイル一覧
|
|
164
|
+
|
|
165
|
+
| ファイル | Git追跡 | 暗号化 | 役割 |
|
|
166
|
+
|---------|:------:|:-----:|------|
|
|
167
|
+
| `.env.example` | ✅ | ❌ | `.env`の参考テンプレート |
|
|
168
|
+
| `.env.personal.example` | ✅ | ❌ | 個人用トークンのテンプレート |
|
|
169
|
+
| `.env.local` | ✅ | ✅ | ローカル開発用(チーム共有) |
|
|
170
|
+
| `.env.development` | ✅ | ✅ | dev検証サーバー用 |
|
|
171
|
+
| `.env.staging` | ✅ | ✅ | ステージング用 |
|
|
172
|
+
| `.env.production` | ✅ | ✅ | 本番環境用 |
|
|
173
|
+
| `.env.ci` | ✅ | ✅ | CI/CD用 |
|
|
174
|
+
| `.env.keys` | ❌ | - | 全環境の秘密鍵(1Password等で共有) |
|
|
175
|
+
| `.env` | ❌ | ❌ | `.env.local`を復号したもの |
|
|
176
|
+
| `.env.personal` | ❌ | ❌ | 個人固有のトークン |
|
|
177
|
+
|
|
178
|
+
### ディレクトリ構成
|
|
179
|
+
|
|
180
|
+
```
|
|
181
|
+
プロジェクトルート/
|
|
182
|
+
├── .env.example # 参考テンプレート(Git追跡)
|
|
183
|
+
├── .env.personal.example # 個人用トークンテンプレート(Git追跡)
|
|
184
|
+
├── .env.local # ローカル開発用・暗号化済み(Git追跡)★
|
|
185
|
+
├── .env.development # dev検証・暗号化済み(Git追跡)
|
|
186
|
+
├── .env.staging # ステージング・暗号化済み(Git追跡)
|
|
187
|
+
├── .env.production # 本番・暗号化済み(Git追跡)
|
|
188
|
+
├── .env.ci # CI/CD・暗号化済み(Git追跡)
|
|
189
|
+
├── .env.keys # 秘密鍵(Git除外・1Password等で共有)
|
|
190
|
+
├── .env # .env.localを復号したもの(Git除外)
|
|
191
|
+
└── .env.personal # 個人用トークン(Git除外)
|
|
192
|
+
```
|
|
193
|
+
|
|
194
|
+
**★ポイント**: `.env.local`は暗号化されてGitで共有。`pnpm dev:setup`で復号して`.env`が生成される。
|
|
195
|
+
|
|
196
|
+
---
|
|
197
|
+
|
|
198
|
+
## 5. 階層的ロード設計
|
|
199
|
+
|
|
200
|
+
### ローカル開発時のフロー
|
|
201
|
+
|
|
202
|
+
```mermaid
|
|
203
|
+
sequenceDiagram
|
|
204
|
+
participant Dev as 開発者
|
|
205
|
+
participant Setup as pnpm dev:setup
|
|
206
|
+
participant Direnv as direnv
|
|
207
|
+
participant App as アプリケーション
|
|
208
|
+
|
|
209
|
+
Dev->>Setup: pnpm dev:setup(初回のみ)
|
|
210
|
+
Setup->>Setup: .env.local(暗号化)を復号
|
|
211
|
+
Setup->>Setup: .env を生成
|
|
212
|
+
Setup->>Setup: .env.personal をテンプレートから作成
|
|
213
|
+
Setup-->>Dev: セットアップ完了
|
|
214
|
+
|
|
215
|
+
Dev->>Direnv: ディレクトリに入る
|
|
216
|
+
Direnv->>Direnv: .env を読み込み
|
|
217
|
+
Direnv->>Direnv: .env.personal を読み込み(オーバーライド)
|
|
218
|
+
Note over Direnv: .env.personal > .env
|
|
219
|
+
|
|
220
|
+
Dev->>App: pnpm dev
|
|
221
|
+
App-->>Dev: 開発サーバー起動完了
|
|
222
|
+
```
|
|
223
|
+
|
|
224
|
+
### ロード順序(後勝ち)
|
|
225
|
+
|
|
226
|
+
1. **`.env`**: チーム共有設定(`.env.local`から復号して自動生成)
|
|
227
|
+
2. **`.env.personal`**: 個人固有のトークン(GITHUB_TOKEN等)
|
|
228
|
+
|
|
229
|
+
### 設計意図
|
|
230
|
+
|
|
231
|
+
- **全環境で暗号化を統一**: ローカル開発もデプロイ環境と同じ暗号化方式
|
|
232
|
+
- **個人トークンの分離**: `.env.personal`で個人固有の設定を管理
|
|
233
|
+
- **direnv連携**: ディレクトリに入るだけで環境変数が自動ロード
|
|
234
|
+
|
|
235
|
+
---
|
|
236
|
+
|
|
237
|
+
## 6. 命名規約
|
|
238
|
+
|
|
239
|
+
### 環境変数の命名
|
|
240
|
+
|
|
241
|
+
| プレフィックス | 用途 | 例 |
|
|
242
|
+
|--------------|------|-----|
|
|
243
|
+
| `NEXT_PUBLIC_` | クライアント側で使用 | `NEXT_PUBLIC_API_URL` |
|
|
244
|
+
| `DATABASE_` | データベース関連 | `DATABASE_URL` |
|
|
245
|
+
| `NEXTAUTH_` | 認証関連 | `NEXTAUTH_SECRET` |
|
|
246
|
+
| `TURBO_` | Turborepo関連 | `TURBO_TOKEN` |
|
|
247
|
+
| `PORT_` | ポート番号 | `PORT_WEB` |
|
|
248
|
+
| `DOTENV_` | dotenvx関連 | `DOTENV_PRIVATE_KEY_PRODUCTION` |
|
|
249
|
+
|
|
250
|
+
### 環境識別子
|
|
251
|
+
|
|
252
|
+
| 識別子 | 説明 |
|
|
253
|
+
|--------|------|
|
|
254
|
+
| `_LOCAL` | ローカル開発用 |
|
|
255
|
+
| `_DEVELOPMENT` | dev検証環境用 |
|
|
256
|
+
| `_STAGING` | ステージング環境用 |
|
|
257
|
+
| `_PRODUCTION` | 本番環境用 |
|
|
258
|
+
| `_CI` | CI/CD環境用 |
|
|
259
|
+
|
|
260
|
+
---
|
|
261
|
+
|
|
262
|
+
## 7. シークレット管理方針
|
|
263
|
+
|
|
264
|
+
### 秘密鍵の保管
|
|
265
|
+
|
|
266
|
+
**`.env.keys`の保管先**:
|
|
267
|
+
|
|
268
|
+
| 保管場所 | 用途 | アクセス権限 |
|
|
269
|
+
|---------|------|------------|
|
|
270
|
+
| 1Password | チーム共有 | 開発者全員 |
|
|
271
|
+
| GitHub Secrets | CI/CD | GitHub Actions |
|
|
272
|
+
| Vercel Dashboard | 本番デプロイ | 管理者のみ |
|
|
273
|
+
| Railway Variables | Cronワーカー | 管理者のみ |
|
|
274
|
+
|
|
275
|
+
### GitHub Secretsの最小化
|
|
276
|
+
|
|
277
|
+
dotenvx採用により、GitHub Secretsは**環境ごとに1つの秘密鍵のみ**に削減:
|
|
278
|
+
|
|
279
|
+
| Secret名 | 用途 |
|
|
280
|
+
|---------|------|
|
|
281
|
+
| `DOTENV_PRIVATE_KEY_CI` | CI/CD環境の復号 |
|
|
282
|
+
| `DOTENV_PRIVATE_KEY_PRODUCTION` | 本番デプロイ時の復号 |
|
|
283
|
+
|
|
284
|
+
**注**: `DOTENV_PRIVATE_KEY_LOCAL`はローカル開発用なのでGitHub Secretsには不要。`.env.keys`でチーム内共有。
|
|
285
|
+
|
|
286
|
+
### ローテーション方針
|
|
287
|
+
|
|
288
|
+
1. **定期ローテーション**: 90日ごとに秘密鍵を更新
|
|
289
|
+
2. **漏洩時対応**: 即座に全環境の秘密鍵を再生成
|
|
290
|
+
3. **手順**: `dotenvx encrypt`で新しい鍵を生成し、保管先を更新
|
|
291
|
+
|
|
292
|
+
---
|
|
293
|
+
|
|
294
|
+
## 関連ドキュメント
|
|
295
|
+
|
|
296
|
+
- [デプロイメント・CI/CD設計方針](./deployment.md)
|
|
297
|
+
- [環境変数セットアップ手順](../../instructions/environment-setup.md)
|
|
298
|
+
- [デプロイセットアップ手順](../../instructions/deployment-setup.md)
|