Skip to main content

ルールセットについて

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

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

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

ルールセットは、GitHub Free と GitHub Free の Organization のパブリック リポジトリ、GitHub Pro、GitHub Team、GitHub Enterprise Cloud のパブリックとプライベートのリポジトリで利用できます。 詳しくは、「GitHub のプラン」をご覧ください。

プッシュ ルールセットは、内部およびプライベート リポジトリ、プッシュ ルールセットが有効になっているリポジトリのフォーク、および企業内の組織の GitHub Enterprise Cloud プランで使用できます。

ルールセットについて

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

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

GitHub Enterprise プランの organization では、organization 内の複数のリポジトリをターゲットにするように、organization レベルでルールセットを設定できます。 詳細については、「組織内のリポジトリのルールセットを管理する」を参照してください。

ルールセットを使用して、リポジトリ内のブランチまたはタグをターゲットにしたり、リポジトリとリポジトリのフォーク ネットワーク全体へのプッシュをブロックしたりできます。

Note

プッシュ ルールの委任されたバイパスは現在 パブリック プレビュー 段階であり、変更される可能性があります。

プッシュルールセットの委任されたバイパスを使用すると、プッシュ保護をバイパスできるユーザーと、ブロックされたプッシュを許可する必要があるユーザーを制御できます。

委任されたバイパスでは、リポジトリの投稿者は、制限された内容を含むコミットをプッシュする際に、「バイパス権限」を要求する必要があります。 要求は、指定されたレビュー担当者グループに送信されます。レビュー担当者は、プッシュ ルールをバイパスする要求を承認または拒否します。

プッシュ ルールをバイパスする要求が承認された場合、投稿者は制限された内容などコミットをプッシュできます。 要求が拒否された場合、投稿者は、再度プッシュする前に、制限された内容などのコミット (複数可) から内容を削除する必要があります。

委任されたバイパスを構成するには、組織の所有者またはリポジトリ管理者が最初に 「バイパス リスト」 を作成します。 バイパス リストには、チームやリポジトリ管理者など、プッシュ保護をバイパスする要求を監督する特定のロールとチームが含まれます。 詳細については、「組織内のリポジトリのルールセットを管理する」および「ルールセットについて」を参照してください。

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

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

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

プッシュ ルールセット

プッシュ ルールセットを使用すると、ファイル拡張子、ファイル パスの長さ、ファイルとフォルダーのパス、ファイル サイズに基づいて、プライベート リポジトリまたは内部リポジトリとそのリポジトリのフォーク ネットワーク全体へのプッシュをブロックできます。

プッシュルールはリポジトリへのすべてのプッシュに適用されるため、ブランチのターゲット設定は必要ありません。

プッシュ ルールセットを使用すると、次のことができるようになります。

  • ファイル パスを制限する: 指定したファイル パスに変更を含むコミットがプッシュされないようにします。

    これには fnmatch の構文を使用できます。 たとえば、test/demo/**/* を対象とする制限により、test/demo/ ディレクトリ内のファイルまたはフォルダーへのプッシュが禁止されます。 test/docs/pushrules.md を対象とした制限により、test/docs/ ディレクトリ内の pushrules.md ファイルへのプッシュが禁止されます。 詳しくは、「リポジトリのルールセットの作成」を参照してください。

  • ファイル パスの長さを制限する: 指定した文字制限を超えるファイル パスを含むコミットがプッシュされないようにします。

  • ファイル拡張子を制限する: 指定したファイル拡張子を持つファイルを含むコミットがプッシュされないようにします。

  • ファイル サイズを制限する: 指定したファイル サイズの制限を超えるコミットがプッシュされないようにします。

フォークされたリポジトリのプッシュ ルールセットについて

プッシュ ルールは、リポジトリのフォーク ネットワーク全体に適用され、リポジトリへのすべてのエントリ ポイントが確実に保護されます。 たとえば、プッシュルールセットが有効になっているリポジトリをフォークした場合、フォークされたリポジトリにも同じプッシュルールセットが適用されます。

フォークされたリポジトリの場合、プッシュ ルールのバイパス アクセス許可を持つユーザーは、ルート リポジトリのバイパス アクセス許可を持つユーザーだけです。

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

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

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

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

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

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

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

  • アクティブ: ルールセットは作成時に適用されます。
  • 評価: ルールセットは適用されませんが、[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 回必要です。