Help us understand the problem. What is going on with this article?

GitHub - Pull Assignerでレビュアーを効率的にアサインする

はじめに

GitHubがPull Pandaを買収して、次の3つの機能が無料公開されたので実際に導入してみました。
この記事では、レビュアーを効率的にアサインするための機能であるPull Assignerについて紹介します。

機能名 機能
Pull Reminders Slackのリマインダと通知を使って、プルリクエストをすばやく確認してマージできます。
Pull Analytics GitHubデータの分析結果を元にボトルネックを取り除き、プロセスを最適化します。
Pull Assigner レビュアーをアサインして、プロセスをよりバランスのとれた効率的なものにします。

Pull RemindersおよびPull Analyticsについては、@turmericNさんの記事「【GitHub】コードレビューツールのPull Pandaを一部触ってみた」がわかりやすかったのでオススメです。

Pull Assigner とは?

Pull Assignerはコードレビュー(のレビュアー)をアサインすることで、プロセスをよりバランスのとれた効率的なものにします。

スクリーンショット 2019-07-22 12.32.28.png

その結果として、次のような効果が期待できます。

  • Balance workloads / 作業負荷の平準化
    コードレビューを均等にアサインすることで、全員が貢献できます。

  • Increase accountability / 説明責任を高める
    レビュアーが明確なため、コードレビューがすばやく実行されます。

  • Eliminate silos / サイロ化(孤立した状態)の解消
    チーム全体に知識を広めて、より協調的な文化を作り出します。

また、「休暇中のメンバーを一時的にレビュアー候補から除外する」といった柔軟な対応を(コードを変更することなく)簡単に実施できるというのもPull Assignerの特徴です。
(「Pull Assigner の設定をカスタマイズする」でやり方を紹介しています。)

Pull Assigner の使い方

スクリーンショット 2019-07-22 12.47.13.png

次の手順を行うことで、Pull Assignerでレビュアーをアサインすることができます。

❶ GitHub Teamsを使用して、チーム(レビュアーのグループ)を編成する
❷ プルリクエストのレビュアーにチームをアサインする
❸ Pull Assignerが、チームの1人以上のメンバーをレビュアーとして自動でアサインする

ここからは、各手順について詳しく説明していきます。

❶ GitHub Teamsを使用して、チーム(レビュアーのグループ)を編成する

以下では、新しくPull Assigner Testという名前のチームを作成します。
すでにチームがある場合は既存のチームを使用することも可能です。

GitHubでチームを作成する

  1. GitHubのOrganization画面を開きます。
  2. Teamsタブを選択します。
  3. New teamをクリックします。
    スクリーンショット 2019-07-22 13.01.26.png
  4. 情報を入力して、Create teamをクリックします。
    スクリーンショット 2019-07-22 13.04.24.png

  5. 作成されたチームの設定画面が表示されるので、Membersタブを選択します。

  6. Add a memberをクリックして、レビュアーになるメンバーを追加します。
    スクリーンショット 2019-07-30 11.23.47.png

Pull Assignerにチームを関連付けする

  1. Pull Pandaの管理画面にGitHubアカウントでログインします。
  2. GitHubでチームを作成する」で作成したチームが所属する(organizationの)accountを選択します。
    (必要に応じて、Add organizationでorganizationを追加してください。)
    スクリーンショット 2019-07-30 11.29.43.png

  3. Assignerを選択します。
    スクリーンショット 2019-07-30 11.34.31.png

  4. Add teamを選択します。
    スクリーンショット 2019-07-30 11.34.56.png

  5. GitHubでチームを作成する」で作成したチームを選択し、Continue to settingsを実行します。
    スクリーンショット 2019-07-30 11.42.51.png

  6. レビュアーのアサイン設定をカスタマイズし、Enable Pull Assignerを実行します。
    スクリーンショット 2019-07-30 11.48.09.png

  7. GitHubのチームに対して、Pull Assignerを有効にしていいか確認されるので許可します。
    スクリーンショット 2019-07-30 11.50.37.png

ここまでの作業で、Pull Assignerにチームが関連付けできました。
正しく作業が完了していれば、以下のような画面が表示されます。
スクリーンショット 2019-07-30 11.53.44.png
!マークはチームをレビュアーに初めてアサインしたタイミング(チームに対してPull Assignerが初めて動作したタイミング)で表示されなくなるので問題ありません。

❷ プルリクエストのレビュアーにチームをアサインする

プルリクエストのレビュアーに手動でチームをアサインするか、GitHubのCODEOWNERSを使用して自動的にチームをアサインするようにします。

❸ Pull Assignerが、チームの1人以上のメンバーをレビュアーとして自動でアサインする

❶、❷によって、チームの1人以上のメンバーがレビュアーとして自動でアサインされます。
あとは、レビュアーとしてアサインされたメンバーが責任を持ってコードレビューをしましょう!!

Pull Assigner の設定をカスタマイズする

Pull Assignerでは、Pull Pandaの管理画面で設定をカスタマイズすることができます。

スクリーンショット 2019-07-22 13.43.21.png

  • レビュアーのアサイン設定
    アサインするレビュアーの数や、作業負荷を平準化するためのアルゴリズムなどを設定できます。

  • チーム設定
    チームにはエンジニア以外のメンバーやbotなどが含まれている場合がありますが、そのようなメンバーをレビュアー候補から除外できます。
    また、休暇で不在となるメンバーを一時的にレビュアー候補から外しておくといった運用も簡単に行う事ができます。

以下では、これらの設定に関する詳細を説明します。

レビュアーのアサイン設定

Settingsセクションで、Update settingsを実行することでレビュアーのアサイン設定を変更することができます。

スクリーンショット 2019-07-30 11.02.44.png

Auto-assign

アサインするレビュアーの人数を指定します。

  • One reviewer
    1名のレビュアーをアサインします。

  • Two reviewers
    2名のレビュアーをアサインします。

  • Three reviewers
    3名のレビュアーをアサインします。

Algorithm

レビュアーをアサインする際のアルゴリズムを指定します。

  • Round-robin
    ラウンドロビンアルゴリズムは、各チームメンバーが過去に要求したレビューの数に関係なく、レビューを循環的な順序で割り当てます。このアルゴリズムは、知識を広め、多様な意見を得るために、チーム全体のさまざまな人々からプルリクエストを受けることに関心があるチームに最適です。

  • Load balance
    ロードバランスアルゴリズムでは、過去30日以内に(または[統計のリセット]が最後にクリックされてから)要求されたレビューの数が最も少なかった人に基づいてレビューが割り当てられます。 このアルゴリズムでは、Pull Assignerによって要求されたものだけでなく、すべてのレビュー要求が考慮されます。このアルゴリズムは、各チームメンバーによって行われたコードレビューの数を等しくしたいチームに最適です。

Proxy team

Pull Assignerを使用すると、botが個々のレビュアーを割り当てる前にチームにレビューが割り当てられます。
したがって、各チームメンバーは、個別に割り当てられていなくても、チームが要求されるたびにGitHub通知を受け取ります。

これらの通知は邪魔になる可能性があります。
この問題を解決するには、「Proxyチーム」(Pull Assignerを実際のチームのために走らせることができるメンバーレスのGitHubチーム)を設定することができます。

Counting method

Auto-assignで指定した)Pull Assignerがアサインするレビュアーの人数に対して、既存のレビュアーをカウントするかどうかを制御します。

  • Count existing reviewers
    既存のレビュアーをカウントする

  • Ignore existing reviewers
    既存のレビュアーを無視する(カウントしない)

Team review request

この設定は、レビュアーをアサインした後にレビュアーからチームを削除するかどうかを制御します。

  • Delete after assigning reviewer(s)
    レビュアーをアサインした後に(レビュアーからチームを)削除する

  • Do not delete
    (レビュアーからチームを)削除しない

チーム設定

Pull Pandaの管理画面で、休暇中またはレビューの責任を負わないチームメンバーを除外します。

スクリーンショット 2019-07-30 10.52.00.png

  • メンバーを除外する場合
    Excluded team membersセクションで、Select team memberリストから除外するメンバーを選択してExcludeを実行します。

  • 除外したメンバーを戻す場合
    Excluded team membersセクションで、TEAM MEMBER欄に表示されている除外したメンバーのRemoveを実行します。

終わりに

このような機能が無料で公開されるのは非常にありがたいですね。
現在はPull Pandaの管理画面を利用する必要がありますが、いずれGitHub側に統合されていく可能性が高いと思います。
そうなれば、今後ますます便利になっていきそうなので期待していきましょう!!

参考資料

Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
Comments
Sign up for free and join this conversation.
If you already have a Qiita account
Why do not you register as a user and use Qiita more conveniently?
You need to log in to use this function. Qiita can be used more conveniently after logging in.
You seem to be reading articles frequently this month. Qiita can be used more conveniently after logging in.
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away