はじめに
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はコードレビュー(のレビュアー)をアサインすることで、プロセスをよりバランスのとれた効率的なものにします。
その結果として、次のような効果が期待できます。
Balance workloads / 作業負荷の平準化
コードレビューを均等にアサインすることで、全員が貢献できます。Increase accountability / 説明責任を高める
レビュアーが明確なため、コードレビューがすばやく実行されます。Eliminate silos / サイロ化(孤立した状態)の解消
チーム全体に知識を広めて、より協調的な文化を作り出します。
また、「休暇中のメンバーを一時的にレビュアー候補から除外する」といった柔軟な対応
を(コードを変更することなく)簡単に実施できるというのもPull Assignerの特徴です。
(「Pull Assigner の設定をカスタマイズする」でやり方を紹介しています。)
Pull Assigner の使い方
次の手順を行うことで、Pull Assignerでレビュアーをアサインすることができます。
❶ GitHub Teamsを使用して、チーム(レビュアーのグループ)を編成する
❷ プルリクエストのレビュアーにチームをアサインする
❸ Pull Assignerが、チームの1人以上のメンバーをレビュアーとして自動でアサインする
ここからは、各手順について詳しく説明していきます。
❶ GitHub Teamsを使用して、チーム(レビュアーのグループ)を編成する
以下では、新しくPull Assigner Test
という名前のチームを作成します。
すでにチームがある場合は既存のチームを使用することも可能です。
GitHubでチームを作成する
Pull Assignerにチームを関連付けする
- Pull Pandaの管理画面にGitHubアカウントでログインします。
「GitHubでチームを作成する」で作成したチームが所属する(organizationの)accountを選択します。
(必要に応じて、Add organization
でorganizationを追加してください。)
「GitHubでチームを作成する」で作成したチームを選択し、
Continue to settings
を実行します。
レビュアーのアサイン設定をカスタマイズし、
Enable Pull Assigner
を実行します。
ここまでの作業で、Pull Assignerにチームが関連付けできました。
正しく作業が完了していれば、以下のような画面が表示されます。
※ !マーク
はチームをレビュアーに初めてアサインしたタイミング(チームに対してPull Assignerが初めて動作したタイミング)で表示されなくなるので問題ありません。
❷ プルリクエストのレビュアーにチームをアサインする
プルリクエストのレビュアーに手動でチームをアサインするか、GitHubのCODEOWNERSを使用して自動的にチームをアサインするようにします。
❸ Pull Assignerが、チームの1人以上のメンバーをレビュアーとして自動でアサインする
❶、❷によって、チームの1人以上のメンバーがレビュアーとして自動でアサインされます。
あとは、レビュアーとしてアサインされたメンバーが責任を持ってコードレビューをしましょう!!
Pull Assigner の設定をカスタマイズする
Pull Assignerでは、Pull Pandaの管理画面で設定をカスタマイズすることができます。
レビュアーのアサイン設定
アサインするレビュアーの数や、作業負荷を平準化するためのアルゴリズムなどを設定できます。チーム設定
チームにはエンジニア以外のメンバーやbotなどが含まれている場合がありますが、そのようなメンバーをレビュアー候補から除外できます。
また、休暇で不在となるメンバーを一時的にレビュアー候補から外しておくといった運用も簡単に行う事ができます。
以下では、これらの設定に関する詳細を説明します。
レビュアーのアサイン設定
Settings
セクションで、Update settings
を実行することでレビュアーのアサイン設定を変更することができます。
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の管理画面で、休暇中またはレビューの責任を負わないチームメンバーを除外します。
メンバーを除外する場合
Excluded team members
セクションで、Select team member
リストから除外するメンバーを選択してExclude
を実行します。除外したメンバーを戻す場合
Excluded team members
セクションで、TEAM MEMBER
欄に表示されている除外したメンバーのRemove
を実行します。
終わりに
このような機能が無料で公開されるのは非常にありがたいですね。
現在はPull Pandaの管理画面を利用する必要がありますが、いずれGitHub側に統合されていく可能性が高いと思います。
そうなれば、今後ますます便利になっていきそうなので期待していきましょう!!