GLANZ. CREATIVE WORKS
Git

ブランチ戦略

ブランチ構成、運用フロー、命名規則、保護ルール設定

ブランチ構成

Gitのブランチは以下の2つを基本として維持します。

  • develop: 開発とステージング環境用のブランチ
  • main: 本番環境と常に同じ状態を保持するブランチ
ブランチモデルについて
プロジェクトの規模や要件に応じて、GitHub FlowやGitLab Flowなど、他のブランチ戦略を採用しても構いません。

運用フロー

主な開発フローは次のとおりです。

  1. develop からトピックブランチ(例: feature/xxxfix/yyy)を作成する。
  2. ローカルで作業し、必要なコミットを行う。
  3. トピックブランチを PR で develop へマージしてステージング環境で動作確認を行う。
  4. テストやステージングでの確認が完了したら、リリース準備を進める。
  5. リリース時に developmain に反映し、本番へデプロイする。
main ブランチが存在しない場合
プロジェクト開始時に main ブランチが未作成であれば、ローカルで main を作成してリモートへプッシュし、その後 develop から main への PR を作成してマージしてください。

必要に応じてリリースタグを作成して公開します。

git tag releaseYYYYMMDD
git push origin releaseYYYYMMDD

ブランチの命名規則

ブランチ名は短くても意味が伝わることが重要です。初期段階で若干雑になっても差し支えありませんが、リリース後はチームで読みやすい命名ルールに従うことを推奨します。

基本的な命名パターン

  • 機能追加: feature/<機能名>
  • バグ修正: fix/<修正内容>
  • 緊急対応: hotfix/<対応内容>
  • リファクタリング: refactor/<対象>
  • ドキュメント: docs/<内容>
  • チケット参照: feature/<チケット番号> など(例: feature/backlog1234
最優先すべきは「他の人が見て内容や目的が分かりやすいこと」です。 チケット番号や Issue 番号を含めても構いません。

命名例

feature/user-authentication
fix/login-validation-error
hotfix/payment-gateway-timeout
refactor/api-error-handling
docs/setup-guide

直接Pushの禁止(ブランチ保護)

ブランチ運用の安全性を確保するため、main ブランチと develop ブランチには保護ルールを設定することを推奨します。これらのルールにより、意図しない変更や事故を防ぎ、安定した開発フローを維持できます。

main ブランチへの反映について
main への直接 push は原則禁止とします。必ず PR(マージリクエスト)経由でのマージを行ってください。 また、運用に合わせてレビューや承認フローを適切に設定してください。
例にあげる保護ルール(JSON ファイル)は GitHub における設定例です。
GitLab、Bitbucket、その他の Git ホスティングサービスでは設定方法が異なります。

develop ブランチの保護設定

develop ブランチは開発の中心となるブランチのため、以下の保護ルールを適用します:

  • ブランチ削除の禁止
  • 強制プッシュ(non-fast-forward)の禁止
  • プルリクエスト経由でのマージ必須
developブランチ保護設定
develop-branch-protection.json
{
  "id": 8265848,
  "name": "Develop branch protection",
  "target": "branch",
  "source_type": "Repository",
  "source": "GLANZ-CREATIVE/develop-branch-protection",
  "enforcement": "active",
  "conditions": {
    "ref_name": {
      "exclude": [],
      "include": ["refs/heads/develop"]
    }
  },
  "rules": [
    {
      "type": "deletion"
    },
    {
      "type": "non_fast_forward"
    },
    {
      "type": "pull_request",
      "parameters": {
        "required_approving_review_count": 0,
        "dismiss_stale_reviews_on_push": false,
        "require_code_owner_review": false,
        "require_last_push_approval": false,
        "required_review_thread_resolution": false,
        "automatic_copilot_code_review_enabled": false,
        "allowed_merge_methods": ["merge", "squash", "rebase"]
      }
    }
  ],
  "bypass_actors": []
}

main ブランチの保護設定

main ブランチは本番環境と同期する重要なブランチのため、より厳格な保護ルールを適用します:

  • ブランチ削除の禁止
  • 強制プッシュ(non-fast-forward)の禁止
  • プルリクエスト経由でのマージ必須
  • マージ方法: merge のみ許可(履歴の保持を重視)
mainブランチ保護設定
main-branch-protection.json
{
  "id": 8264380,
  "name": "Main Protection",
  "target": "branch",
  "source_type": "Repository",
  "source": "GLANZ-CREATIVE/main-branch-protection",
  "enforcement": "active",
  "conditions": {
    "ref_name": {
      "exclude": [],
      "include": ["refs/heads/main"]
    }
  },
  "rules": [
    {
      "type": "deletion"
    },
    {
      "type": "non_fast_forward"
    },
    {
      "type": "pull_request",
      "parameters": {
        "required_approving_review_count": 0,
        "dismiss_stale_reviews_on_push": false,
        "require_code_owner_review": false,
        "require_last_push_approval": false,
        "required_review_thread_resolution": false,
        "automatic_copilot_code_review_enabled": false,
        "allowed_merge_methods": ["merge"]
      }
    }
  ],
  "bypass_actors": []
}

保護ルールのカスタマイズ

プロジェクトの規模やチーム構成に応じて、以下の設定を検討してください:

  • レビュー必須人数: required_approving_review_count を1以上に設定
  • コードオーナー承認: require_code_owner_review を true に設定
  • ステータスチェック: CI/CDの成功を必須条件にする
  • 管理者バイパス: bypass_actors で特定のユーザーやチームに例外を設定
プロジェクトのルールやクライアントの要件に従って適切に設定してください。 特に本番環境に直結するリポジトリでは、より厳格なルールを適用することを推奨します。