【入門編】GitLab「Git Hooks」を超えたサーバーサイドの制約:Push Rulesによるコミット権限と品質の強制執行 – バージョン管理・CI/CD活用バイブル

こんにちは。現場で泥臭いトラブルを何度も乗り越えてきたエンジニアです。

大規模なチーム開発をしていると、必ずこんな悩みが出てきます。「なぜ誰かが毎回コミットメッセージを適当にするんだ?」「なぜ巨大なバイナリファイルをリポジトリに入れてしまうんだ?」「署名のない怪しいコミットが混ざっているぞ!」

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を、誰にも崩されない堅牢な要塞へと変えてしまいましょう。応援しています!

タイトルとURLをコピーしました