🤖

コードレビューを効率化!GitHubでレビュアーを自動アサインするCode Ownersの活用法

2024/04/02に公開

GitHubで CODEOWNERS を設定することで、プルリクエストのレビュアーアサイン自動化や責務の明確化などを行う方法について解説します。

背景

モノリポのリポジトリ運用が始まった際にプルリクエストの運用で次の課題を感じていました。

  • パッケージごとにメインの担当者が異なるため、レビュアーアサインの過不足が発生
  • スキーマの変更など、複数のパッケージにまたがる変更がある場合、プルリクエストを確認してほしいレビュアーがとても多く、作成時に毎回手動指定するのが大きな手間
  • チームに新しいメンバーが加わった際に、オンボーディングが大変

最初はWorking Agreement (チーム内のルール) でカバーしていたのですが、GitHubの機能であるCode Ownersで仕組み化することにしました。

Code Owners とは

CODEOWNERS ファイルを使い、リポジトリ中のコードに対して責任を負う個人あるいは Team を指定できます。

https://docs.github.com/ja/repositories/managing-your-repositorys-settings-and-features/customizing-your-repository/about-code-owners

この機能を使うことで、ファイル / ディレクトリごとにコードの責任者を指定できます。

Code Owners の設定方法

.github/CODEOWNERS を作成し、.gitignoreと同じ構文を記述することで設定できます。意外と知られていないのですがメールアドレスでもOKです。チームも設定できます。

ただし、指定できるのはリポジトリに対するプッシュ権限を持つユーザー・チームのみです。

/project-a/ @bicstone
/project-b/ t.oishi@example.com
/project-c/ @octo-org/octocats
.graphqls @bicstone t.oishi@example.com @octo-org/octocats

ちなみにCODEOWNERS自体をGitHubで開くと構文チェックの結果が表示されるので、構文エラーやリポジトリに対するユーザーのプッシュ権限が無くなった場合などに検知できます。

CODEOWNERS を GitHub で開いたスクリーンショット。 "This CODEOWNERS file is valid." と表示されている。
"This CODEOWNERS file is valid." と表示されている

アサインするユーザーをシャッフルで決める方法

チームの機能も併用して活用することで、Code Ownersでチームを指定した場合にアサインするユーザーをシャッフルで決めることもできます。

https://docs.github.com/ja/organizations/organizing-members-into-teams/managing-code-review-settings-for-your-team#about-auto-assignment

設定するためには、チームの"Settings"にアクセスし"Code review"から設定します。

"Enable auto assignment"を有効にし、自動でアサインする人数やアサインのアルゴリズムなどを設定します。

チームのSettingsにアクセスし"Code review"から設定します。
"Enable auto assignment" から設定する

Code ownersによるApproveを必須にする方法

Branch protection ruleに "Require review from Code Owners" というルールがあり、これを設定するとマージにはCode Ownersの承認を必須にできます。

https://docs.github.com/ja/repositories/configuring-branches-and-merges-in-your-repository/defining-the-mergeability-of-pull-requests/managing-a-branch-protection-rule#creating-a-branch-protection-rule

設定するためには、リポジトリの"Settings"にアクセスし"Branches"から設定します。

"Protect matching branches"内の"Require review from Code Owners"を有効にすることで設定できます。

Protect matching branches内のRequire review from Code Ownersを有効にすることで設定できます。
"Require review from Code Owners" から設定する

効果

仕組み化によるレビュー効率の向上

該当のファイルに対するPRを作成すると、レビュイーが操作せずともレビュアーが自動でアサインされます。

GitHub のスクリーンショット。プルリクエスト詳細ページの履歴において、"bicstone requested review from ○, ○, ○ and ○ as code owners now" と表示されている。
自動でレビュアーとしてアサインされる

仕組み化されることにより、レビュイー・レビュアー双方にとって次のようなメリットがあります。

  • プルリクエスト作成時にレビュアーを入力する必要がなくなるため手間を省くことができる。
  • レビュアー管理が仕組み化されることから、オンボーディングの負担を軽減できる。
  • 機械的に複数メンバーにアサインされることから、手が空いたメンバーから先にレビューできるため、より迅速にレビューをしてもらうことができる。
  • 機械的に担当する領域に関わるすべてのプルリクエストにアサインされることから、チーム内で共通認識を持つことができ、属人性の解消ができる。
  • 必要に応じてシャッフラーの機能を使用することで、レビュアーの負担を軽減できる。

コードの責任者の明確化

GitHub上でファイルを開くと、該当のCode Ownersが表示されます。開発した人 (Contributors) だけでなく、PRを開かずも承認したチーム (Code Owners) がわかるのは大きく、後々役立つことが多いです。

また、Branch protectionを併用することで、Code Ownersの承認がない場合はマージができないことから、コードの責任が明確になります。

GitHub 上でファイルを開いた画面のスクリーンショット。このファイルの Code Owners が表示されている。
このファイルの Code Owners が表示されている

まとめ

GitHubのCode Owners機能を活用することで、モノレポ環境においてのコードレビューの効率化やコードの責任者の明確化を実現できました。

コードレビューの速度と品質を向上させることで、チーム全体としてデリバリーの速度が向上し、価値提供をより迅速に行えるチーム作りができると考えています。

一度設定するのみで、手間がかからないので、ぜひ導入してみてください。

Discussion