チームで開発している時によく起きる?問題としてPRたまってしまう問題がある。
細い理由みたいなのは今回は触れない。
例えば1つのリポジトリでやりとりをしていれば、PRが目に触れる機会があるので良いが複数のリポジトリを使い分けているチームだったりすると自分が作業しているリポジトリ以外は見る機会がないので見逃すことが多い。
Slackを使用していればintegrationとかを使って通知しているかもしれない。
でも日々色んな情報が流れる中でそれって見逃しませんか?
PR見てねーって毎回言うのも気が引けたりしてませんか?
世の中にはこれを解決するために世の中にはPr. PoliceというBotがあったりする。
これはSlackでやりとりが出来るBotになっていて定期的にPRを通知する他にもBotなのでユーザーが!reviewと発言すると同じようにopenなPRを通知してくれる。
導入も楽でHeroku Deployで出来る。
これは便利っちゃ便利なんだけどBotじゃなくても個人的には良いなっと思ったりする。
Botが動作してるかーみたいなのも管理しないといけないし、個人的には定期的にOpenなPRが通知されれば良かった。
ということでRubyのリハビリも兼ねて作った。
pr-notifier
これは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をさっと作った。