Skip to main content

ルールセットについて

ルールセットは、ユーザーがリポジトリ内のブランチやタグと対話する方法を制御するのに役立ちます。

この機能を使用できるユーザーについて

リポジトリのルールセットは、そのリポジトリの読み取りアクセス権を持つすべてのユーザーが表示できます。 リポジトリの管理者アクセス権を持つユーザー、または "リポジトリ ルールの編集" アクセス許可を持つカスタム ロールは、リポジトリルールセットの分析情報を表示できます。 詳しくは、「カスタムリポジトリロールについて」をご覧ください。

ルールセットは、GitHub Free と GitHub Free の Organization のパブリック リポジトリ、GitHub Pro、GitHub Team、GitHub Enterprise Cloud のパブリックとプライベートのリポジトリで利用できます。

ルールセットについて

ルールセットは、リポジトリ、または Organization 内の複数のリポジトリに適用されるルールの名前付きリストです。 リポジトリ あたり 75 個のルールセットと、75 個の Organization 全体のルールセット を設定できます。

ルールセットを作成するときに、特定のユーザーがルールセットの中のルールをバイパスすることを許可できます。 これは、リポジトリ管理者などの特定のロールを持つユーザー、または特定のチームや GitHub Apps にすることができます。 バイパスアクセス許可の付与について詳しくは、「リポジトリのルールセットの作成」をご覧ください。

ブランチとタグのルールセット

ルールセットを作成して、リポジトリ内の特定のブランチとタグをユーザーが操作する方法を制御できます。 どのユーザーが特定のブランチにコミットをプッシュできるか、コミットをどのようにフォーマットする必要があるか、どのユーザーがタグを削除または名前変更できるかといったことを制御できます。 たとえば、リポジトリの feature ブランチに対して、署名されたコミットを必須とし、リポジトリ管理者を除くすべてのユーザーの強制プッシュをブロックするルールセットを設定できます。

作成するルールセットごとに、リポジトリ内のどのブランチまたはタグに、あるいは Organization 内のどのリポジトリにルールセットを適用するかを指定します。 fnmatch 構文を使用して、特定のブランチ、タグ、リポジトリを対象とするパターンを定義できます。 たとえば、パターン releases/**/* を使用すると、リポジトリ内の名前が文字列 releases/ で始まるすべてのブランチを対象とすることができます。 fnmatch の構文について詳しくは、「リポジトリのルールセットの作成」を参照してください。

ルールセット、保護されたブランチ、保護されたタグについて

ルールセットは、リポジトリのブランチ保護ルールおよびタグ保護ルールと連携して機能します。 ルールセットで定義できるルールの多くは保護ルールに似ており、既存の保護ルールをオーバーライドせずにルールセットの使用を開始できます。

さらに、既存のタグ保護規則をリポジトリ ルールセットにインポートすることもできます。 これにより、現在リポジトリに対して設定されているのと同じタグ保護が実装されます。 「タグ保護ルールの構成」をご覧ください。

ルールセットには、ブランチとタグ の保護ルールよりも優れた次の利点があります。

  • 保護ルールとは異なり、複数のルールセットを同時に適用できるため、リポジトリ内のブランチまたはタグを対象とするすべてのルールが、誰かがそのブランチまたはタグを操作したときに評価されることを確信できます。 「ルールの階層化について」を参照してください。
  • ルールセットには状態があるため、ルールセットを削除しなくても、リポジトリでどのルールセットをアクティブにするかを簡単に管理できます。
  • リポジトリへの読み取りアクセス権を持つユーザーは、リポジトリのアクティブなルールセットを表示できます。 これは、開発者がルールに抵触した理由を理解できること、または監査担当者がリポジトリへの管理者アクセス権を必要とせずに、リポジトリのセキュリティ制約を確認できることを意味します。
  • コミット メッセージや作成者のメール アドレスなど、リポジトリに入力するコミットのメタデータを制御する追加のルールを作成できます。 GitHub Enterprise Cloudドキュメントの「ルールセットで使用できるルール」を参照してください。

ルールセットの適用ステータスの使用

ルールセットの作成または編集中に、適用ステータスを使用してルールセットの適用方法を構成できます。

ルールセットには、次の適用ステータスのいずれかを選択できます。

  • アクティブ: ルールセットは作成時に適用されます。
  • 評価: ルールセットは適用されませんが、[Rule Insights] ページでルールに違反するアクションと違反しないアクションを監視できます。
  • 無効: ルールセットは、適用または評価されません。

「評価」モードを使用することは、ルールセットを適用せずにテストするための優れたオプションです。 「ルールの分析情報」ページを使用して、そのコントリビューションがルールに違反したかどうかを確認できます。 詳しくは、「リポジトリのルールセットの管理」を参照してください。

ルールの階層化について

ルールセットに優先順位はありません。 代わりに、リポジトリ内の同じブランチまたはタグが複数のルールセットの対象になっている場合、これらの各ルールセットのルールが集約されます。 集約されたルールセット間で同じルールに異なる定義がある場合、最も制限の厳しいバージョンのルールが適用されます。 ルールセットは、互いに階層化するだけでなく、同じブランチまたはタグを対象とする保護ルールとの階層化もできます。

たとえば、octo-org/octo-repo リポジトリの my-feature ブランチについて、次のような状況を考えてみましょう。

  • リポジトリの管理者が、my-feature ブランチを対象とするルールセットを設定しました。 このルールセットは、署名されたコミットと、マージ前に pull request に対する 3 回のレビューを必須とします。
  • my-feature ブランチには既存のブランチ保護ルールがあり、直線状のコミット履歴と、マージ前に pull request に対する 2 回のレビューが必須となっています。
  • octo-org Organization の管理者も、octo-repo リポジトリの my-feature ブランチを対象とするルールセットを設定しています。 そのルールセットは強制プッシュをブロックし、pull request をマージする前に 1 回のレビューを必須としています。

それぞれのソースのルールが集約され、すべてのルールが適用されます。 同じルールの複数の異なるバージョンが存在する場合、ルールの最も制限の厳しいバージョンが適用されます。 そのため、my-feature ブランチでは、署名されたコミットと直線状のコミット履歴が必須であり、強制プッシュがブロックされ、このブランチをターゲットとする pull request にはマージ前にレビューが 3 回必要です。