LoginSignup
3
3

More than 3 years have passed since last update.

GitHub Actions を利用したコードレビュー依頼の自動化

Last updated at Posted at 2020-09-01

変更ファイルや所属グループを元に自動でコードレビュー依頼を出すことができる GitHub Action を紹介したいと思います!実際のユースケースを元に製作し運用しているので、同じように役に立つチームもあるのではないかと思います!

具体的には「コードオーナーとレビュアーを分けたい(誰がマージ可能かを区別するため)」や「GitHub のメンバーの数が多すぎて毎回レビュアーを探すのが手間かつ、常に同じメンバーにしかレビュー依頼を出さない」というケースで、非常に役立っています。

モチベーション

誰がどのプルリクエストをレビューするかは、チームによって様々だと思います。ランダムにレビューをアサインするチームもあれば、チームメンバー全員に見てもらうという方針のチームもあるかと思います。GitHub のコードレビューアサインメントコードオーナーを利用することで、ある程度のユースケースは確かにカバー可能ですが、カバーできないケースもまた存在します。

本記事で紹介する Auto Request Review では、以下のケースをカバーすることが可能です!

  • 変更されたファイルを元にレビュー依頼を出したい
  • プルリクエスト作成者に応じたレビュアーを指定したい
  • 自分のチームメンバー全員にレビューをしてもらいたい
  • レビュアーとコードオーナーを区別したい

要は、ある特定のメンバーに対して、所属グループや変更ファイルを元にしてレビュー依頼を出したい場合に役立ちます。

コードオーナーとレビュアー

コードオーナーはそのコードに対して責任がある人であり、レビュアーはレビューをする人だと言えると思います。そして、チームによっては明確にこれらを区別していることがあります。例えば、プルリクエストをマージするのに、「コードオーナーの承認 + チームメンバーの誰か」としているチームもあると思います。また、「コードオーナーには絶対見てほしいけど、他の人には時間があれば見ておいてほしい」みたいなケースもあるかと思います。

主な機能

以下のことが可能になります。

  • 変更ファイルを元に自動でレビュアーをアサインする
  • プルリクエスト作成者ごとに個別のレビュアーをアサインする
  • プルリクエスト作成者の所属するグループを元に自動でレビュアーをアサインする
  • どのレビュアーにもマッチしなかった場合、デフォルトのレビュアーをアサインする
  • 特定の条件でのみレビュー依頼を出す

変更ファイルを元に自動でレビュアーをアサインする

globを使ってレビュアーを定義できます。

files:
  '**/*.js':
    - js-lovers

プルリクエスト作成者ごとに個別のレビュアーをアサインする

プルリクエスト作成者ごとに個別のレビュアーを設定できます。

reviewers:
  groups:
    engineers:
      - engineer_a
      - engineer_b
  per_author:
    engineers:
      - engineers
    designer_a:
      - lead_designer
    designer_b:
      - lead_desinger
      - desinger_a

プルリクエスト作成者の所属するグループを元に自動でレビュアーをアサインする

グループアサインメントの機能を有効にしていれば、プルリクエスト作成者の所属するメンバー全員に自動でレビュー依頼が送られます。

reviewers:
  groups:
    js-lovers:
      - js-man
      - js-woman

options:
  enable_group_assignment: true

どのレビュアーにもマッチしなかった場合、デフォルトのレビュアーをアサインする

デフォルトのレビュアーも設定可能です。どのレビュアーもマッチしなかった場合、この方達に依頼が飛びます。

reviewers:
  default:
    - repository-owners

特定の条件でのみレビュー依頼を出す

もしまだ準備できてないプルリクエストのレビューをしてほしくない、というのであれば、 ignore_draftignored_keywords オプションが利用可能です。

プルリクエストが下書き状態かつ ignore_drafttrue であれば、レビュー依頼は送られません。また、プルリクエストのタイトルに ignored_keywords に定義されている文字列が含まれている場合も同様です。

options:
  ignore_draft: true
  ignored_keywords:
    - DO NOT REVIEW

設定

2つの YAML ファイルを準備する必要があります。

  • レビュアー設定
  • ワークフロー設定

レビュアー設定

レビュアーの設定用ファイルです。glob を利用し、レビュアーを定義することができます。 内部実装には minimatch を利用しています。

フォーマットは以下のとおりです。

reviewers:
  # デフォルトレビュアー
  defaults:
    - repository-owners
    - octocat

  # レビュアーグループ(GitHub usernames の配列)
  groups:
    repository-owners:
      - me # username
      - you # username
    core-contributors:
      - good-boy # username
      - good-girl # username
    js-lovers:
      - js-man # username
      - js-woman # username

  # プルリクエスト作成者ごとのレビュアー
  # キーがレビュイーで、それぞれレビュアーの配列を持つ
  per_author:
    engineers:
      - engineers # group
    lead_designer:
      - js-lovers # group
      - desinger_a # username
    designer_a:
      - lead_designer # username
    designer_b:
      - lead_desinger # username
      - desinger_a # username

files:
  # キーが glob での表現になります
  # 上で定義したレビュアーグループもしくは GitHub usernames が利用可能です
  '**':
    - repository-owners # group
  '**/*.js':
    - core-contributors # group
    - js-lovers # group
  '**/*.yml':
    - core-contributors # group
    - yamler # username
  '.github/**':
    - octopus # username
    - cat # username

options:
  ignore_draft: true
  ignored_keywords:
    - DO NOT REVIEW
  enable_group_assignment: false

設定ファイルはデフォルトでは .github/auto_request_review.yml ですが、ワークフローの設定ファイルで上書きが可能です。

ワークフロー設定

ワークフローの設定ファイルを .github/workflows内に作成します。 例えば .github/workflows/auto_request_review.yml のような感じです。

name: Auto Request Review

on:
  pull_request:
    types: [opened, ready_for_review, reopened]

jobs:
  auto-request-review:
    name: Auto Request Review
    runs-on: ubuntu-latest
    steps:
      - name: Request review based on files changes and/or groups the author belongs to
        uses: necojackarc/auto-request-review@v0.2.0
        with:
          token: ${{ secrets.GITHUB_TOKEN }}
          config: .github/reviewers.yml # Config file location override
3
3
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
3
3