GitLab「Protected Branches」は、ただの「鍵」ではない。事故ゼロで加速するデプロイ戦略の極意
現場のテックリードとして日々GitLabを叩いていると、多くのチームが「Protected Branches(保護ブランチ)」を単なる「マージ制限機能」としてしか捉えていないことに危機感を覚える。
Protected Branchesは、「人間が犯すミスをシステムレベルで無効化する」ための最強のセーフティネットだ。これを使わずして、現代の高速なCI/CDは語れない。本稿では、GitLabの保護ブランチを極限まで活用し、開発スピードと安全性を両立させるための「現場の最適解」を伝授する。
—
1. なぜ「権限設定」が開発スピードを加速させるのか?
「自由こそが開発スピードを生む」という幻想を捨てろ。制約があるからこそ、エンジニアはレビューに集中し、デプロイに対する心理的安全性が確保される。
GitLabの保護ブランチ設定において、私が必ず守らせている黄金律は以下の3点だ。
1. Direct Pushの禁止: `main`や`production`への直接プッシュは、いかなる権限を持つ人間であっても物理的に不可能にする。
2. マージ権限の最小化: コードの品質を担保できない人間は、マージボタンを押させない。
3. Code Ownerの強制: 誰がそのコードのオーナーかを明示し、自動的にレビュアーを割り当てる。
実践:最強の保護ブランチ設定
`Settings > Repository > Protected Branches` で以下の設定を適用せよ。
- Allowed to merge: `Maintainers` のみに制限。
- Allowed to push: `No one`(これが最重要。事故の9割はここを空けていることで発生する)。
- Require code owner approval: 必須。 `CODEOWNERS` ファイルと連動させ、特定のディレクトリ(例: `infra/`, `config/`)には必ずシニアエンジニアの承認を挟む。
—
2. 開発効率を底上げする「現場のハック」
キーボードショートカットで操作を爆速化
GitLabのUIをマウスでカチカチしている時間は無駄だ。以下のショートカットを手に覚え込ませろ。
- `g` + `i`: どこにいてもIssue一覧へ。
- `g` + `m`: Merge Request一覧へ。
- `Shift` + `s`: 検索バーへジャンプ。
- `a`: MR画面で「Assign to me」。
神プラグイン:GitLab Workflow (VS Code)
IDEを離れるな。`GitLab Workflow`拡張機能を入れることで、MRの作成、レビューコメントの確認、CIパイプラインの状況確認がエディタ内で完結する。コンテキストスイッチを最小化することが、フロー状態を維持する鍵だ。
—
3. 設定ファイル(CI/CD)のベストプラクティス
保護ブランチで安全を担保したら、次はCIの高速化だ。`gitlab-ci.yml` は「DRY(Don’t Repeat Yourself)」を徹底せよ。
.gitlab-ci.yml
共通の設定をincludeで切り出し、管理コストを最小化する
include:
- local: ‘/ci/templates/docker-build.yml’
- local: ‘/ci/templates/test-base.yml’
variables:
# パイプラインの無駄な実行を防ぐための最適化
GIT_DEPTH: 1
stages:
- test
- deploy
保護ブランチのみで実行されるジョブの定義
production_deploy:
stage: deploy
script:
- ./scripts/deploy.sh
rules:
- if: $CI_COMMIT_BRANCH == $CI_DEFAULT_BRANCH # mainブランチのみ実行
when: manual # 本番デプロイは必ず人の手で承認(ボタン押下)させる
environment:
name: production
—
4. チーム開発を崩壊させない「共有化ルール」
どれほどツールを固めても、運用ルールがガバガバでは意味がない。私のチームでは以下のルールを「絶対」としている。
1. MRのタイトルにはプレフィックスを付ける: `feat:`, `fix:`, `refactor:`, `chore:` を必須化し、Gitログを自動生成可能にする。
2. Squash Mergeの強制: リポジトリの履歴を汚す「マージコミットの嵐」を防ぐため、GitLab設定で `Squash commits when merging` をデフォルトでONにする。
3. CIパスなしはレビューしない: レビュアーは、CIがすべてグリーンであることを確認してから初めてコードを読む。
—
最後に:エンジニアが目指すべき場所
Protected Branchesは「縛り」ではない。「エンジニアが安心して、恐れずにコードを書き、デプロイできるためのインフラ」だ。
ミスを個人の注意に依存するチームは、いずれ必ず大きな事故を起こす。システムで防げることはシステムに任せ、人間は「価値あるロジック」を考えることに脳のリソースを割く。これこそが、世界最高峰のDevOpsチームが到達している領域だ。
さあ、今日から君のGitLabリポジトリを「要塞」に変え、チームの生産性を劇的に向上させてくれ。健闘を祈る。