50
28

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

GitHubにてPushできるブランチ名に規則を持たせる方法

Last updated at Posted at 2025-04-11

はじめに

皆様日ごろチームで開発を進める際にはコーディング規約やLinterなども駆使して、
ソースコードの品質を保ち統一性を持たせるということをしていると思います。
今回はそのソースコードに対して行っているようなことを、Gitのブランチ名に対しても行おうというものです。

以下ここに至った背景などから説明しますが、実際の解決法をまず知りたい!という方は
規則に沿ったブランチ以外はPush出来ないようにする方法のセクションをご覧ください。

背景

本件を実施するにあたっては以下のような背景がありました。

自由なブランチ名により発生する弊害を防ぐ

ルールを設ける前は特に制限をせずに運用していました。
そこで起こった例として #123-xxx というブランチが作られたことがありました。
一見すると特に問題が無いようにも思えるのですがこのブランチに対してgit操作をしようとすると
""(ダブルクォート)で囲まないといけない
という事象が発生します。

# 以下は通らない
git checkout #123-xxx

# こちらのようにダブルクォートで囲む必要がある
git checkout "#123-xxx"

何かしらのGUIツールを使ってGit操作をしている場合はそこまで気にならないかもしれないのですが、
CUIを基本的に使う場合には多少の面倒が発生することになります。
他にもGitHubではIssue画面からブランチを作成することもできますが、デフォルトで
{Issue番号}-{Issueタイトル}
という命名がされるようになっています。

image.png

つまりIssueのタイトルに日本語を用いた場合、上記キャプチャのようなブランチ名が作成されることになります。
#などの記号くらいならまだ良いですが日本語などが混ざると運用上でさらに面倒になることが容易に想像できるため、これを防ぎたいのが1つ目の背景です。

Issueとの対応をわかりやすくする

DraftPRを作ったりするほどでもないがいったん今の作業をリモートにPushしておきたい、
のような状況はよくあると思うのですが、
チームで開発を進めていると共同作業をしたり、他の人のヘルプをするなどといった場面も出てくることがあると思います。
その場合にリモート(GitHub)上に存在するブランチにおいて、
どのブランチがどのIssueに対する作業をしているものなのかをわかりやすくしておくことで
チーム内での認識を取りやすくしたい、というのが2つ目の背景です。

規則に沿ったブランチ以外はPush出来ないようにする方法

ここからは実際にどのようにすれば本件を実現できるのかの具体的な例を紹介します。
今回の例としては
{Issue-番号}-{任意の半角英数字およびハイフン・アンダースコア}
の規則を守ったブランチだけをPushできるような設定を組みます。

ブランチ例) 123-foo-bar

RuleSetsの設定

image.png

対象のリポジトリの Settings > Rules > Rulesets で上記キャプチャのような設定を作成します。

Branch targeting criteria

image.png

Add Target > Exclude By Patternを選択し、
Branch naming Pattern[0-9]*-[A-Za-z0-9-_]*を設定する。

Branch Rules

Restrict creationsにチェックを入れる。

上記の2つが設定出来たら最後に画面下部「Save Changes」で設定を保存します。
こちらの設定を入れることで
{Issue-番号}-{任意の半角英数字およびハイフン・アンダースコア}
以外のブランチ名ではリモートへのPush(ブランチ作成)が出来ないようになります。

実動作例

こちらの設定を入れたうえでローカルからリモートへ規則に従っていないブランチをPushしようとしてみます。

image.png

#123-xxx というブランチのPushを試みたところ

 ! [remote rejected] #123-xxx -> #123-xxx (push declined due to repository rule violations)

とルールによりPush出来なかったことが表示されています。

また割愛しますが、冒頭少し紹介したGitHubのIssue上からブランチを作ろうとしたときも
同様にルールを守っていない場合きちんとエラーになります。

おわりに

いかがだったでしょうか。
ブランチ名は人間のマニュアル運用でどうにかなることが大半かもしれませんが
機械的に防げるものは防ぎましょう!ということで参考になれば幸いです。

50
28
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
50
28

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?