こんにちは。現場で泥臭いトラブルを何度も乗り越えてきたエンジニアです。
大規模なチーム開発をしていると、必ずこんな悩みが出てきます。「なぜ誰かが毎回コミットメッセージを適当にするんだ?」「なぜ巨大なバイナリファイルをリポジトリに入れてしまうんだ?」「署名のない怪しいコミットが混ざっているぞ!」
Git Hooksを使えば解決できますが、個人のPCに設定を配布し、保守するのは地獄です。そこで、GitLabの真骨頂である「Push Rules(プッシュルール)」の出番です。これはサーバー側で強制的にガードレールを敷く機能。チームの規約を「お願い」から「システム上の絶対条件」へと昇華させるための最強のツールです。
今日は、これをマスターして「コード品質の番人」を自動化する方法を伝授します。
—
1. Push Rulesとは何か?:コード品質の「最後の防衛線」
Push Rulesは、GitLabがプッシュを受け取った瞬間に、その内容をバリデーションする機能です。クライアント側の設定に依存しないため、どれだけ設定を無視しようとするメンバーがいても、ルールに反すればサーバーが門前払いします。
導入することで、レビューの際に「コミットメッセージの形式」を指摘するような不毛な時間をゼロにできます。
—
2. 設定のステップ:まずはここから
GitLabの画面から簡単に設定できます。まずはプロジェクトの「Settings」を開き、「Repository」を選択してください。
1. Settings > Repository へ移動。
2. Push rules を展開。
これだけで準備完了です。ここからが「現場で震えるほど役立つ」設定術です。
—
3. 極限のベストプラクティス:強制すべき3つの規約
① コミットメッセージの形式を正規表現で縛る
開発の履歴はチームの財産です。チケット番号を含めるルールを強制しましょう。
- Commit message regular expression: `^([A-Z]+-[0-9]+)\s.+$`
- Commit message negative regular expression: (空のままでOK)
これで「チケット番号がないメッセージ」は即座に拒否されます。初心者メンバーも、最初のプッシュで「あ、ルールがあるんだ」と即座に学習できます。
② 巨大ファイルの混入を物理的に防ぐ
リポジトリの肥大化はCI/CDの速度を殺します。
- Maximum file size (MB): `5`
5MBを超えるファイルが混入しようとした瞬間、サーバーがプッシュを拒絶します。LFS(Large File Storage)を使うべきファイルをうっかりコミットするミスを、これで撲滅できます。
③ 署名済みコミットの強制(セキュリティの要)
「誰が書いたか」を保証するのはプロとして最低限の礼儀です。
- Reject unsigned commits: 「チェックを入れる」
これをONにすると、GPG署名のないコミットは一切受け付けません。なりすましや、改ざんのリスクを劇的に下げることができます。
—
4. HelloWorld的な動作確認:ルールが効いているか試す
設定が終わったら、すぐに動作確認をしましょう。
1. わざと失敗するコミットを作る:
# チケット番号を含めずにコミット
git commit -m “修正しました” –allow-empty
# プッシュを試みる
git push origin main
2. 期待される挙動:
以下のようにGitLabサーバーから拒否メッセージが返ってくれば成功です。
remote: GitLab: Commit message does not follow the pattern ‘^([A-Z]+-[0-9]+)\s.+$’
これで、あなたのリポジトリは「ルールが自動的に守られるクリーンな環境」になりました。
—
最後に:先輩からのアドバイス
Push Rulesを導入すると、最初はチームから「うるさい」と言われるかもしれません。しかし、数週間経てば、メンバーは「ツールに指摘される前に、自分たちでクリーンなコミットを作る」ようになります。
ルールで縛ることは、自由を奪うことではありません。「品質を担保するための認知負荷を減らす」ことなのです。
「これを設定したから、もうコミットメッセージの指摘はしなくていいよ」。そうチームに言えるようになった瞬間、あなたはまた一つ、エンジニアとして上のステージに登ったことになります。
さあ、今日からあなたのGitLabを、誰にも崩されない堅牢な要塞へと変えてしまいましょう。応援しています!