hitomedia Tech Blog

株式会社ヒトメディアのテクノロジーに関するブログです

prprでGithubのPullRequestレビュー依頼をSlack通知する

最近サーバサイドをやりつつiOSアプリ開発をやったり何でも屋になっている hilotter です。

GithubのPullRequestレビュー機能、便利ですね。

チーム開発においては相互レビューが非常に大事です。

今回は、レビュー依頼を行った際にSlackに自動通知するようにしたらより便利になったというお話を共有させていただきます。

SlackのGitHub連携の課題

Slack公式のGithub連携がありますが、こちらは以下の2点が課題となっていました。

1. メンション付きのコメントをしても、message-attachmentsの記法になっているため、うまく通知されずコメントを見落としてしまう

f:id:hilotter:20170824122029p:plain

このため、コメント後にSlackでも「コメントしました!」と2重で連絡をする必要がありました。

2. PullRequestのレビュー依頼を行ってもレビュアーへの通知が飛ばないため、レビューすべきPullRequestに気づけない

f:id:hilotter:20170824122242p:plain

こちらも同様にレビュー依頼の後、Slackでも「レビューお願いします!」と2重で連絡をする必要がありました。

prpr

これらの課題を解決するために、 githubのプルリクエストに反応するbotフレームワークであるprprを使わせていただくことにしました。

ぺろぺろ - Github pull request bot framework - - みずぴー日記

prpr及び、prpr-mention_commentプラグインを用いることで、課題1に挙げた「メンション付きのコメントをSlackに通知できない」を解決することができました。

また、よくある問題として「Githubのユーザ名とSlackのユーザ名が異なる」というのがありますが、この場合もMEMBERS.md というユーザ名の対応表を作って該当リポジトリにコミットすればユーザ名を変換してくれるので安心です。

MEMBERS.mdの記述方法

記述がない場合は、そのままのユーザ名で通知されるので、MEMBERS.mdには変換が必要なユーザのみを書いておけばOKです。

 * @Githubのアカウント名1: @Slackのアカウント名1
 * @Githubのアカウント名2: @Slackのアカウント名2

prpr-mention_reviewers

課題2の「PullRequestのレビュー依頼を行ってもレビュアーへの通知が飛ばない」に関しては、既存プラグインが見つからなかったのでプラグインを作ってみました。

prpr-mention_reviewers

できることとしては以下になっています。

  • PullRequestのレビュー依頼を行った際に、指定したchannelに通知
  • レビュー依頼時のテンプレート文言を設定
  • オプションで指定channelの代わりにDMで通知

DM通知オプションは一応作ってみたものの、PullRequestは可能な限り多くの人の目を通した方がいいと思うので社内では使っていません。

また、prpr-mention_reviewersはprpr-mention_commentと同時に利用することを想定しているため、通知先チャンネルを指定する環境変数(MENTION_COMMENT_ROOM)とユーザ名の対応表ファイルを指定する環境変数(MENTION_COMMENT_MEMEBRS)はprpr-mention_commentと同じ環境変数名を利用することにしました。

プラグイン開発Tips

Configuring your server | GitHub Developer Guide にあるようにngrokを用いて、ローカル環境にWebHookを通知するようにして開発を進めると捗りました。

使い方

prpr-templateにならってHerokuにデプロイするのが一番手軽です。

ということで、prpr-mention_reviewers版 prpr-template を作ってみました。

とりあえず試してみる場合

  • SlackのIncoming WebHooksを作成

  • GithubのAccessTokenを作成

    • ユーザ名変換の際に該当リポジトリのファイルを読み込む必要があるためrepoのフル権限が必要になります
  • prpr-mention_reviewers版 prpr-template にアクセスし、「Deploy to Heroku」ボタンをクリック

  • 環境変数入力画面が表示されるのでSLACK_WEBHOOK_URLとGITHUB_ACCESS_TOKENを入力しデプロイを実行

  • 通知を行いたいGithubリポジトリのWebhook設定画面を開き、HerokuアプリのURLを設定 f:id:hilotter:20170824123949p:plain

これで導入完了です!

Slackの通知先channelを変更したい場合は別途、環境変数MENTION_COMMENT_ROOMを設定してください。

また、MENTION_REVIEWERS_BODYにレビュー依頼時のテンプレート文言を設定できます。

社内で設定している環境変数は以下のようになっています。

MENTION_COMMENT_ROOM - #github-mention
MENTION_REVIEWERS_BODY - %{title} のレビューをお願いします :pray:

この状態で、PullRequestのレビュー依頼を行うと、以下のようにSlackに通知されます!

f:id:hilotter:20170824124457p:plain

運用Tips

slackのユーザ名をGithubのユーザ名と同じにしたけど通知が飛ばない場合

slackアプリ上のプロフィール編集でユーザ名を変更するとdisplay_nameという項目が変更されますが、name自体は以前のままになっています。

この場合、Webサイト上からusernameの編集を行う必要があります。

↓のURLにアクセスし、usernameを変更すると通知が飛ぶようになります。(team名は各自変えて下さい)

https://{your_team}.slack.com/account/settings?updated_username=1#username

f:id:hilotter:20180507161026p:plain

まとめ

prprを使うことで、SlackのGithub連携機能の課題を解決することができました。

また、prprはプラグインが作りやすい設計になっているので素早くプラグイン開発ができて助かりました。

今後、Githubに新機能が増えた場合も手軽にプラグインを作っていけそうです!

「GithubのPullRequestレビュー依頼をSlack通知したい」とお考えの場合はぜひ試してみてください。