たまってるPR一覧をSlackへ通知するgemつくった

チームで開発している時によく起きる?問題としてPRたまってしまう問題がある。
細い理由みたいなのは今回は触れない。
例えば1つのリポジトリでやりとりをしていれば、PRが目に触れる機会があるので良いが複数のリポジトリを使い分けているチームだったりすると自分が作業しているリポジトリ以外は見る機会がないので見逃すことが多い。

Slackを使用していればintegrationとかを使って通知しているかもしれない。
でも日々色んな情報が流れる中でそれって見逃しませんか?
PR見てねーって毎回言うのも気が引けたりしてませんか?

世の中にはこれを解決するために世の中にはPr. PoliceというBotがあったりする。

talkdesk.github.io

これはSlackでやりとりが出来るBotになっていて定期的にPRを通知する他にもBotなのでユーザーが!reviewと発言すると同じようにopenなPRを通知してくれる。
導入も楽でHeroku Deployで出来る。

これは便利っちゃ便利なんだけどBotじゃなくても個人的には良いなっと思ったりする。
Botが動作してるかーみたいなのも管理しないといけないし、個人的には定期的にOpenなPRが通知されれば良かった。

ということでRubyのリハビリも兼ねて作った。

pr-notifier

github.com

これはSlackへ指定したリポジトリのOpenになっているPRをなげるコマンドラインツール。
これだけ!

導入

$ gem install pr-notifier

とりあえずヘルプを見てみる

pr-notifier -h
Usage: pr-notifier [options]
    -d, --dry-run                    DRY RUN
    -g, --gh-token VALUE             GitHub access token ENV:GH_TOKEN
    -r, --repos VALUE                GitHub repositories. separate comma ENV:GH_REPOS
    -w, --webhook-url VALUE          slack webhook url ENV:SLACK_WEBHOOK_URL
    -c, --channel VALUE              slack channel ENV:SLACK_CHANNEL
    -u, --username VALUE             slack username ENV:SLACK_USERNAME
    -t, --template VALUE             ERB template for sending to slack ENV:TEMPLATE

動作にはGitHubトークンとかslackのwebhook_urlが必要なんだけどこれはコマンド実行時の引数でも渡せるし環境変数でも渡せる。

実行

$ pr-notifier -g xxxx -r hatappi/pr-notifier -w https://hooks.slack.com/services/xxxx/yyyy -u PR通知BOT

これでSlackに通知される。
ちなみにこだわりポイントとしては通知される文言のフォーマットを変更出来るところ。 (-t オプション or TEMPLATEで渡す。)

これは中ではERBを使っていてデフォルトだと次のようになっている。
pull_requestsとう変数にopenになっているPRがArrayで入っていてる。
配列内の要素にはrepo, repo_url, url, title, body, reviewers, assignees, creator, created_at に値が入っている。
さらに言うとERBなので<%= Time.now %>とかすれば時刻とかも一緒にSlackに通知出来たりする。

<% pull_requests.each do |pr| -%>
:memo: <%= pr.title %>
      <%= pr.url %>
<% if pr.reviewers.size > 0 -%>
      reviewers: <%= pr.reviewers.join(", ") %>
<% end -%>
<% end -%>

最後に

今回は思いつきでSlackへOpenになっているPRを通知するコマンドラインgemをさっと作った。