[テンプレ]ブランチ戦略・デプロイメント

関連テンプレ構成
テンプレート
# ブランチ戦略・デプロイメント

## 採用ブランチモデル

### 採用モデル: Git Flow

本プロジェクトでは **Git Flow** モデルを採用する。

### 採用背景・目的

**背景:**
- 複数機能の並行開発が必要
- 本番環境への影響を最小限に抑えたい
- リリースサイクルが計画的(2週間〜1ヶ月ごと)
- 緊急バグ修正への迅速な対応が必要

**目的:**
- **品質管理**: リリース前の十分なテスト期間を確保
- **並行開発**: 複数の機能開発を独立して進行
- **安定性**: 本番ブランチ(main)の安定性を維持
- **トレーサビリティ**: リリースバージョンとコードの対応を明確化
- **緊急対応**: ホットフィックスによる迅速な本番修正

```mermaid
gitGraph
    commit
    branch develop
    checkout develop
    commit
    branch feature/login
    checkout feature/login
    commit
    commit
    checkout develop
    merge feature/login
    branch release/v1.0
    checkout release/v1.0
    commit
    checkout main
    merge release/v1.0 tag: "v1.0.0"
    checkout develop
    merge release/v1.0
```

## ブランチ種別と役割

| ブランチ種別 | 命名規則 | 役割 | 派生元 | マージ先 |
|------------|---------|------|--------|---------|
| main | `main` | 本番環境リリース用 | - | - |
| develop | `develop` | 開発用の最新コード | main | main(リリース時) |
| feature | `feature/機能名` | 機能開発 | develop | develop |
| release | `release/バージョン` | リリース準備 | develop | main, develop |
| hotfix | `hotfix/修正内容` | 緊急バグ修正 | main | main, develop |

## ブランチ運用フロー

### 機能開発フロー
```mermaid
graph LR
    A[develop] -->|作成| B[feature/xxx]
    B -->|開発| C[コミット]
    C -->|PR作成| D[コードレビュー]
    D -->|承認| E[developへマージ]
    E --> F[ブランチ削除]
```

1. developブランチから feature ブランチを作成
2. 機能開発を実施
3. プルリクエスト作成、コードレビュー実施
4. レビュー承認後、developへマージ
5. featureブランチを削除

### リリースフロー
1. developブランチから release ブランチを作成
2. リリース準備作業(バージョン番号更新、軽微な修正)
3. テスト実施
4. mainブランチへマージし、タグ付け
5. developブランチへもマージ
6. releaseブランチを削除

### ホットフィックスフロー
1. mainブランチから hotfix ブランチを作成
2. 緊急修正を実施
3. mainブランチへマージし、タグ付け
4. developブランチへもマージ
5. hotfixブランチを削除

## 8.2.4 コミットメッセージ規約

Conventional Commits形式を採用する。

**フォーマット:**
```
<type>(<scope>): <subject>

<body>

<footer>
```

**type の種類:**
- `feat`: 新機能
- `fix`: バグ修正
- `docs`: ドキュメント変更
- `style`: コードスタイル変更(機能に影響なし)
- `refactor`: リファクタリング
- `test`: テストコード追加・修正
- `chore`: ビルドプロセスやツールの変更

**:**
```
feat(auth): ユーザーログイン機能を追加

- JWTトークンによる認証を実装
- ログイン画面のUI作成
- セッション管理機能の追加

Closes #123
```

---

## デロイメント戦略

### フロー設計の背景・目的

**背景:**
- 各環境での検証ステップが必要
- 本番環境への影響を最小限に抑えたい
- デプロイ頻度が高い(週1回以上)
- 人的ミスを防止したい

**目的:**
- **段階的検証**: 開発→ステージング→本番の順で段階的に検証
- **自動化**: 人的ミスの削減と効率化
- **安全性**: 本番デプロイ前の承認プロセス
- **迅速性**: 開発環境への即座の反映
- **トレーサビリティ**: デプロイ履歴の記録

### デプロイメントフロー

```mermaid
graph TD
    A[開発完了] --> B[developブランチ]
    B -->|自動デプロイ| C[開発環境]
    B --> D[releaseブランチ作成]
    D -->|自動デプロイ| E[ステージング環境]
    E --> F[テスト・検証]
    F -->|承認| G[mainブランチへマージ]
    G -->|手動承認後| H[本番環境デプロイ]
```

### 環境別デプロイ方式

| 環境 | トリガー | 承認 | デプロイ方式 | 目的 |
|------|---------|------|-------------|------|
| 開発環境 | developへのマージ | 不要 | 自動デプロイ | 迅速なフィードバック |
| ステージング環境 | releaseブランチ作成 | 不要 | 自動デプロイ | 本番同等環境での検証 |
| 本番環境 | mainへのマージ | 必要 | 手動承認後自動デプロイ | 安全性の確保 |

### ロールバック手順

本番環境で問題が発生した場合の緊急ロールバック手順:

1. 前バージョンのタグを確認
2. デプロイツールから前バージョンを選択
3. ロールバック実行
4. 動作確認
5. インシデント報告書作成

**: AWS CodeDeployでのロールバック**
```bash
aws deploy stop-deployment --deployment-id d-XXXXXXXXX
aws deploy create-deployment \
  --application-name myapp \
  --deployment-group-name production \
  --s3-location bucket=myapp-deploy,key=v1.0.0.zip,bundleType=zip
```

### デプロイ時チェックリスト

- [ ] テストがすべて成功しているか
- [ ] マイグレーションスクリプトの確認
- [ ] 環境変数の設定確認
- [ ] ロールバック手順の確認
- [ ] 監視・アラート設定の確認
- [ ] ステークホルダーへの通知
- [ ] デプロイ後の動作確認項目の準備

---

## 環境管理

### 環境構成

```mermaid
graph TB
    subgraph 開発環境
    D1[開発者PC]
    D2[共有開発サーバー]
    end
    
    subgraph ステージング環境
    S1[Webサーバー]
    S2[DBサーバー]
    end
    
    subgraph 本番環境
    P1[Webサーバー]
    P2[DBサーバー]
    P3[キャッシュサーバー]
    end
    
    D1 --> D2
    D2 --> S1
    S1 --> P1
```

### 環境変数管理

| 環境 | 管理方法 | 設定ファイル |
|------|---------|-------------|
| ローカル | `.env.local` | Git管理外 |
| 開発 | AWS Parameter Store | IaCで管理 |
| ステージング | AWS Secrets Manager | IaCで管理 |
| 本番 | AWS Secrets Manager | IaCで管理 |

### データベース管理

- マイグレーションツール: Flyway / Liquibase
- バージョン管理: すべてのスキーマ変更をマイグレーションスクリプトで管理
- 適用順序: 開発環境 → ステージング環境 → 本番環境
プレビュー

ブランチ戦略・デプロイメント

採用ブランチモデル

採用モデル: Git Flow

本プロジェクトでは Git Flow モデルを採用する。

採用背景・目的

背景:

  • 複数機能の並行開発が必要
  • 本番環境への影響を最小限に抑えたい
  • リリースサイクルが計画的(2週間〜1ヶ月ごと)
  • 緊急バグ修正への迅速な対応が必要

目的:

  • 品質管理: リリース前の十分なテスト期間を確保
  • 並行開発: 複数の機能開発を独立して進行
  • 安定性: 本番ブランチ(main)の安定性を維持
  • トレーサビリティ: リリースバージョンとコードの対応を明確化
  • 緊急対応: ホットフィックスによる迅速な本番修正
gitGraph
    commit
    branch develop
    checkout develop
    commit
    branch feature/login
    checkout feature/login
    commit
    commit
    checkout develop
    merge feature/login
    branch release/v1.0
    checkout release/v1.0
    commit
    checkout main
    merge release/v1.0 tag: "v1.0.0"
    checkout develop
    merge release/v1.0

ブランチ種別と役割

ブランチ種別 命名規則 役割 派生元 マージ先
main main 本番環境リリース用 - -
develop develop 開発用の最新コード main main(リリース時)
feature feature/機能名 機能開発 develop develop
release release/バージョン リリース準備 develop main, develop
hotfix hotfix/修正内容 緊急バグ修正 main main, develop

ブランチ運用フロー

機能開発フロー
graph LR
    A[develop] -->|作成| B[feature/xxx]
    B -->|開発| C[コミット]
    C -->|PR作成| D[コードレビュー]
    D -->|承認| E[developへマージ]
    E --> F[ブランチ削除]
  1. developブランチから feature ブランチを作成
  2. 機能開発を実施
  3. プルリクエスト作成、コードレビュー実施
  4. レビュー承認後、developへマージ
  5. featureブランチを削除
リリースフロー
  1. developブランチから release ブランチを作成
  2. リリース準備作業(バージョン番号更新、軽微な修正)
  3. テスト実施
  4. mainブランチへマージし、タグ付け
  5. developブランチへもマージ
  6. releaseブランチを削除
ホットフィックスフロー
  1. mainブランチから hotfix ブランチを作成
  2. 緊急修正を実施
  3. mainブランチへマージし、タグ付け
  4. developブランチへもマージ
  5. hotfixブランチを削除

8.2.4 コミットメッセージ規約

Conventional Commits形式を採用する。

フォーマット:

<type>(<scope>): <subject>

<body>

<footer>

type の種類:

  • feat: 新機能
  • fix: バグ修正
  • docs: ドキュメント変更
  • style: コードスタイル変更(機能に影響なし)
  • refactor: リファクタリング
  • test: テストコード追加・修正
  • chore: ビルドプロセスやツールの変更

例:

feat(auth): ユーザーログイン機能を追加

- JWTトークンによる認証を実装
- ログイン画面のUI作成
- セッション管理機能の追加

Closes #123

デロイメント戦略

フロー設計の背景・目的

背景:

  • 各環境での検証ステップが必要
  • 本番環境への影響を最小限に抑えたい
  • デプロイ頻度が高い(週1回以上)
  • 人的ミスを防止したい

目的:

  • 段階的検証: 開発→ステージング→本番の順で段階的に検証
  • 自動化: 人的ミスの削減と効率化
  • 安全性: 本番デプロイ前の承認プロセス
  • 迅速性: 開発環境への即座の反映
  • トレーサビリティ: デプロイ履歴の記録
デプロイメントフロー
graph TD
    A[開発完了] --> B[developブランチ]
    B -->|自動デプロイ| C[開発環境]
    B --> D[releaseブランチ作成]
    D -->|自動デプロイ| E[ステージング環境]
    E --> F[テスト・検証]
    F -->|承認| G[mainブランチへマージ]
    G -->|手動承認後| H[本番環境デプロイ]
環境別デプロイ方式
環境 トリガー 承認 デプロイ方式 目的
開発環境 developへのマージ 不要 自動デプロイ 迅速なフィードバック
ステージング環境 releaseブランチ作成 不要 自動デプロイ 本番同等環境での検証
本番環境 mainへのマージ 必要 手動承認後自動デプロイ 安全性の確保
ロールバック手順

本番環境で問題が発生した場合の緊急ロールバック手順:

  1. 前バージョンのタグを確認
  2. デプロイツールから前バージョンを選択
  3. ロールバック実行
  4. 動作確認
  5. インシデント報告書作成

例: AWS CodeDeployでのロールバック

aws deploy stop-deployment --deployment-id d-XXXXXXXXX
aws deploy create-deployment \\
  --application-name myapp \\
  --deployment-group-name production \\
  --s3-location bucket=myapp-deploy,key=v1.0.0.zip,bundleType=zip
デプロイ時チェックリスト
テストがすべて成功しているか
マイグレーションスクリプトの確認
環境変数の設定確認
ロールバック手順の確認
監視・アラート設定の確認
ステークホルダーへの通知
デプロイ後の動作確認項目の準備

環境管理

環境構成
graph TB
    subgraph 開発環境
    D1[開発者PC]
    D2[共有開発サーバー]
    end

    subgraph ステージング環境
    S1[Webサーバー]
    S2[DBサーバー]
    end

    subgraph 本番環境
    P1[Webサーバー]
    P2[DBサーバー]
    P3[キャッシュサーバー]
    end

    D1 --> D2
    D2 --> S1
    S1 --> P1
環境変数管理
環境 管理方法 設定ファイル
ローカル .env.local Git管理外
開発 AWS Parameter Store IaCで管理
ステージング AWS Secrets Manager IaCで管理
本番 AWS Secrets Manager IaCで管理
データベース管理
  • マイグレーションツール: Flyway / Liquibase
  • バージョン管理: すべてのスキーマ変更をマイグレーションスクリプトで管理
  • 適用順序: 開発環境 → ステージング環境 → 本番環境