In side head

〜ある技術者の記録〜

【Unity パッケージ】GitHubのRule設定全般についての解説

まだまだだ煮詰まっていませんが、GitHubのRule設定を公表します。 おすすめの設定などありましたらコメントいただけますと幸いです。

対象のパッケージ

このパッケージの設定です。 Gitリポジトリのパッケージを効率的に管理するためのプラグイン

github.com

Bypass list

バイパス権限リスト

ルールセットをバイパスする(対象外とする)役割、チーム、またはアプリを追加します。

  • 推奨設定: Repository adminを指定
  • 理由: リポジトリオーナーである自身はルールに従う必要が無くなるので一旦指定。いずれ変更すると思います

Targets

対象

どのブランチに対してルールを適用するか

Target branches

対象ブランチ
  • 推奨設定: Defaultを指定
  • 理由: Defaultを指定した場合、Setting > General > Default branchに指定したブランチを対象とします。初期値はmainが対象となります。

Branch rules

ブランチのルール
参照 (ref) とは?

Gitでブランチやタグなど、作業中の場所やポイントの意。

Restrict creations

作成を制限

一致する参照 (ref) を作成できるのはバイパス権限を持つユーザーのみです。

  • 推奨設定: 有効にする
  • 理由: ブランチ(mainなど)の作成を権限のあるユーザーだけに限定することで、不適切な参照の作成を防ぐ。

Restrict updates

更新を制限

一致する参照 (ref) を更新できるのはバイパス権限を持つユーザーのみです。

  • 推奨設定: 有効にする
  • 理由: 更新操作を権限を持ったユーザーのみが実行可能とします。これにより、不意なコミットや操作ミスから保護できます。

更新操作とは?

  • 新しいコミットのプッシュ
  • ブランチの移動(更新されるべき HEAD を変更)
  • 再書き込み(例: リベースなどで履歴を書き換える)

使用例

  • 権限を持ったユーザーのみコミット可能にしてブランチを守る
  • すべてのユーザーをコミット不可にし、ボットのみコミット可能にする。テスト通過した場合のみコミットする

Restrict deletions

削除を制限

一致する参照 (ref) を削除できるのはバイパス権限を持つユーザーのみです。

  • 推奨設定: 有効にする
  • 理由: ブランチが誤って削除されることを防ぎます。

Require linear history

リニア履歴を要求

一致する参照 (ref) にマージコミットをプッシュすることを防ぎます。(代わりにリベースする)

  • 推奨設定: 無効
  • 理由: マージコミットを禁止する。代わりにリベースする必要があるのでチーム全員がGitを理解している必要がある。チームによるので一旦無効。

リベース(Rebase)とは?

リベースは、あるブランチの変更履歴を他のブランチの先端に付け替える操作です。既存のコミット履歴を再構築(書き換え)し、あたかも最初からそのブランチ上で開発していたような形に整えます。そうする事で履歴が直線的で見やすくなります。

綺麗に保たれたリポジトリ

リベースの方が、コミット履歴が分かりやすい。

Admob-Unityのリポジトリ

Require deployments to succeed

デプロイの成功を必須にする

このルールに一致する参照 (ref) にプッシュする前に、どの環境へのデプロイが成功していなければならないかを選択します。

  • 推奨設定: 無効
  • 理由: Unity開発で使えるか不明、調べきれていないので一旦保留

有効にすると?

参照 (ref) を更新する前に、特定の環境でデプロイが成功していることを条件とします。たとえば、CI/CDが行われる staging 環境での成功を指定することが可能。

Require signed commits

署名付きコミットを必須にする

一致する参照 (ref) にプッシュされるコミットには、検証済み署名が必要です。

  • 推奨設定: 無効
  • 理由: コミット者全員が設定している必要がある為一旦無効。

署名付きコミットとは?

署名付きコミットは、文字通り「コミットに署名を付ける」もので、この署名は暗号化技術を使って「そのコミットが正真正銘あなたによるものである」ことを証明します。コミットした人の信頼性は上がりますが、個々が設定している必要があるので有効にするのは難しいかもしれません。

Require a pull request before merging

マージ前にプルリクエストを必須にする

すべてのコミットは対象ブランチ以外で行い、プルリクエストを通じて提出される必要があります。

  • 推奨設定: 有効にする
  • 理由: すべての変更を必ずプルリクエスト経由で行うことを強制し、直接ブランチへの書き込みを防ぐ。

- Required approvals

承認の必須数

プルリクエストをマージする前に必要な承認レビューの数です。

  • 推奨設定: 1(または人数に応じて適切な数を設定)
  • 理由: コード品質を保ち、十分なレビューを確保

- Dismiss stale pull request approvals when new commits are pushed

新しいコミットがプッシュされた場合、古いプルリクエストの承認を無効化する
  • 推奨設定: 有効にする
  • 理由: 新しいコミットが追加された場合、古い承認内容が無効化されることで、最新の変更に対してレビューが行われることを保証する。

- Require review from Code Owners

コード所有者のレビューを必須にする
  • 推奨設定: 有効にする
  • 理由: 指定されたコードオーナーが責任を持ってコード変更の内容を確認し、影響範囲を把握することで、不適切な変更を防ぐ。

"Code Owners"(コードオーナー)とは?

リポジトリ内の特定のファイルやディレクトリに対して責任を持つ特定のユーザーやチーム

- Require approval of the most recent reviewable push

最新のレビュー可能なプッシュの承認を必須にする
  • 推奨設定: 有効にする
  • 理由: 最新の変更を必ず第三者が確認するルールを設け、プッシュ時のミスや誤りを防ぐ。

- Require conversation resolution before merging

マージ前に会話の解決を必須にする
  • 推奨設定: 有効にする
  • 理由: プルリクエストのすべてのコメントや議論を解決することで、未解決の問題がないことを確認する。

- Request pull request review from CopilotPreview

Copilot Preview によるプルリクエストレビュー依頼

新しいプルリクエストについて、パフォーマンスを向上させるためにAIレビュー(Copilot)を活用できる場合、追加の知見や自動レビューを利用することでレビュー効率を高める。

  • 推奨設定: 無効
  • 理由: どういう動作になるか分からないので一旦無効

- Allowed merge methods

許可されるマージ方法 (プレビュー機能)

プルリクエストをマージする際に、マージコミット、スカッシュ、リベースを任意の組み合わせで許可できます。少なくとも1つのオプションを有効にする必要があります。

  • 推奨設定: Merge, Squash, Rebase すべて有効化
  • 理由: プロジェクトのニーズに応じて適切なマージ方法を選択する必要があるが、一旦すべて有効化

Require status checks to pass

ステータスチェックの合格を必須にする

参照 (ref) が更新される前に、どのステータスチェックが合格している必要があるかを選択します。有効化されている場合、最初に別の参照にコミットをプッシュしてチェックを通過する必要があります。

  • 推奨設定: 無効
    • 必須ステータスチェック例:
      • npm test
      • npm audit
      • CI/CDのチェック結果 (GitHub Actions)
  • 理由: 使ってみたいが、一旦保留

有効にすると?

状態チェックが合格するまでリファレンスが更新されないようにすることで、コードの品質担保が可能です。

Block force pushes

強制プッシュをブロック

プッシュ権限を持つユーザーが参照 (ref) に強制プッシュするのを防ぎます。

  • 推奨設定: 有効にする
  • 理由: コミット履歴が強制的に上書きされることを防止します。

Require code scanning results

コードスキャン結果を必須にする

参照を更新する前に、どのツールがコードスキャン結果を提供する必要があるかを選択します。設定されている場合、コードスキャンを有効にし、対象となるコミットと参照の両方の結果を持つ必要があります。

  • 推奨設定: 必要に応じて設定 (有効にしてCodeQLを選択しておくのもありそう)
  • 理由: コードに潜むセキュリティ上の脆弱性を防ぐため、GitHubのコードスキャンツールを使用する。有効にしておくだけで動くので一旦有効にしてみてます。