GitHub Pull Requestのレビュー依頼をした時に自動的にSlack通知する

GitHub Pull Requestを作ってレビュー依頼した時に自動的に対象のレビュアーにだけ即座にSlack通知するように設定したので、方法を共有します。


# それまでのPull Request レビュー依頼
GitHubでPull Requestを作成した後、レビュアーへのレビュー依頼が二度手間になっていることはないでしょうか？
例えば僕のチームは今まで以下のような手順でレビュー依頼を行っていました。
**1. Pull Request上でレビュアーに対して[レビュー依頼](https://help.github.com/articles/requesting-a-pull-request-review/)をする**
![image.png](https://qiita-image-store.s3.amazonaws.com/0/71113/4bc24070-9715-41be-f284-3b281d7bb7b8.png) 

**2. 同じPull Request上でレビュアーに対してメンション付きのコメントをする**
![image.png](https://qiita-image-store.s3.amazonaws.com/0/71113/d0aa7cf8-cb84-e483-431d-1ce63051434a.png)
(僕のチームは[Zapier](https://zapier.com/)という外部サービスを組み合わせて自動化する為のツールを導入しています。
ZapierによりGitHubとSlackを連携させて、↑の画像のようにGitHubでメンション付きのコメントをした時、メンションとマッピングしたSlackユーザーに自動的にslackbot経由で通知が飛ぶようになっています。)

![image.png](https://qiita-image-store.s3.amazonaws.com/0/71113/c880625e-b7c5-3a01-3e8e-b3f862f77820.png)

この二つの作業「Pull Request上でレビュアーに対してレビュー依頼をする」「同じPull Request上でレビュアーに対してメンション付きのコメントをする」をPull Requestを作る度に開発者が毎回行っていたわけです。

「え、どっちかだけやれば良いんじゃ・・？」と思う方もいるかもしれません。
しかしチーム内でレビューは頻繁に行っているので、メンション付きのコメントだけしてSlackに通知が飛んでも見落としてしまい、自分がレビューすべきPRが分からなくなる時がたまにあります汗

そんな時レビュー依頼が設定されていれば、GitHubの「Review Requests」ページで自分がレビューしなければならないPull Requestが簡単に確認出来ます。
![image.png](https://qiita-image-store.s3.amazonaws.com/0/71113/2fda0081-200a-a390-d14f-a638ddcf3e0d.png)

一方でレビュアーに自分が作ったPull Requestを気づいてもらう為にSlack通知も欠かすことは出来ず、こういった二度手間をせざるを得ませんでした。

ただちりも積もれば何とやらでこの作業が段々面倒くさくなってきました。。。(特に自分)
そこで**Pull Requestでレビュー依頼をした時に対象のレビュアーにだけSlack通知するよう自動化**を行いました。

# レビュー依頼した時に自動的にSlack通知するぞ
結論から言うと[prpr](https://github.com/mzp/prpr)というbot frameworkを使うことにより簡単に実現出来ました。
prprの概要は以下の記事を読んでもらった方が早いと思います。
https://mzp.hatenablog.com/entry/2017/03/05/005205

## prpr導入方法
### prpr-templateでまずはHerokuにデプロイ
[prpr-template](https://github.com/hilotter/prpr-template)というHerokuに簡単にデプロイする為のテンプレートがあるのでこれを使います。
まずはREADMEに記載している通り設定してみてください。
※別の[prpr-template](https://github.com/mzp/prpr-template)もありますが、こちらはレビュー依頼時のSlack通知用のprprプラグインは含まれていないので注意してください。


### MEMBERS.mdを編集
prpr-templateのリポジトリをforkした後、GitHubメンションとSlackメンションを紐づける為の`MEMBERS.md`というファイルをルート直下に生成します。
`* @{GitHubユーザー名}: @{Slack表示名}`のフォーマットで一人ずつマッピングしていきます。
例えば僕の場合こうなります。

```MEMBERS.md
* @endam: @damasa
* @*****: @******
```

生成後は`git push heroku master`を叩いてHerokuにデプロイします。

### Slackのどこに通知するか設定する
Herokuアプリケーションの設定ページ(`https://dashboard.heroku.com/apps/{アプリ名}/settings`)を開き、Config Varsを編集します。
![image.png](https://qiita-image-store.s3.amazonaws.com/0/71113/faffc739-6209-87be-3b7c-aa106cf8b81a.png)

[prpr-mention_reviewers](https://github.com/hilotter/prpr-mention_reviewers)プラグインのREADMEを見ると分かるように、Slackのどこに通知するかは`MENTION_COMMENT_ROOM`と`MENTION_REVIEWERS_TO_DM`の二つの設定があります。

```
MENTION_COMMENT_ROOM - room name to post mention.
MENTION_COMMENT_MEMEBRS - a file name to map github username to chat service one. (Default: MEMBERS.md)
MENTION_REVIEWERS_BODY - notification message body. (Default: 'Please review my PR: %{title}')
MENTION_REVIEWERS_TO_DM - notify Direct Message instead of MENTION_COMMENT_ROOM. (Default: false)
```

もしslackbot経由でレビュアー本人にだけ通知したい場合は、上記の添付画像のように`MENTION_REVIEWERS_TO_DM`にtrueを設定します。
特定のチャンネルに通知したい場合は`MENTION_COMMENT_ROOM`にチャンネル名を設定してください。

さあ、これで準備は整いました！!・・・とその前に確認すべきことが一点💦


### 注意！GitHubユーザー名とSlackユーザー名を同じにしておく
ここで言うSlackユーザー名はSlack表示名とは全くの別物ですのでくれぐれも注意してください。
Slackユーザー名がGitHubユーザー名と同じか確認するために自分のSlackチームの以下のURLにアクセスします。
`https://{チーム名}.slack.com/account/settings?updated_username=1#username`

そうすると↓のようにUsernameの編集状態になります。
もしここで表示されているUsernameがGitHubユーザー名と違うのであれば更新する必要があります。
![image.png](https://qiita-image-store.s3.amazonaws.com/0/71113/c39ce07e-62d0-f9cb-33b2-7eea3595184d.png)

### 結果
実際にチームで運用してみた結果、、即座にレビュー依頼のSlack通知がキタ！！ 素晴らしい!!
![image.png](https://qiita-image-store.s3.amazonaws.com/0/71113/65a08ac5-203d-46b1-9af3-a11dcd11318a.png)

こういったルーチンワークだからこそ自動化することの重要さを改めて実感。
自動化って最高だぜ！

あ、prprは他にもいくつか便利そうなプラグインがあるので、気になる方はお試しください。
https://github.com/mzp/prpr#handler