review 待ちの Pull Request 一覧を Slack に定期的に通知する仕組みを作ってみた。
完成品
以下の画像は朝11時 JST に自分のチームのレビュー待ちリストを表示している様。Slack の絵文字で「いまレビューしてますよ〜」「merged!」みたいな表現をするのはエンジニアしぐさだ。
private repo だと味気ない(かつ業務情報なのでモザイクだらけだ)が、public repo の PR だと Slack が自動的に展開してくれるのでよりファビュラスに見える。
仕組み
3行で書くと…
- review-waiting-list-bot という Slack bot が Heroku にデプロイされている*1
- メンションされると GitHub API を叩いてプルリクエストを収集し、まとめて Slack に post する
- 定期的に実行する仕組みは Slack のリマインダーを使う
review-waiting-list-bot
Node.js 製の Slack bot。フレームワークには前回作った KPT-bot 同様、 Botkit を使っている。
async / await を試してみたかったので Node version 8 にした。残念ながら Botkit が Promise に対応しておらずコールバックを色々書くハメになる*2のだが、GitHub の API をコールするところはうまくまとめられる。
bot をコールする際に author
, owner
, repo
を指定することができる。-repo
のような表記で除外条件(exclusive)を指定することもできる。詳細は README#Usage を参照。
Slack Reminder
bot 側で定期的に post する仕組みも作れるのだがやらなかった。設定を持たないといけなくなる=ステートレスでなくなるし、Slack に慣れているチームなら reminder 機能を充分に使いこなしてくれるからだ。
ちなみに、毎朝11時にリマインドする場合は以下のようなコマンドになる。タイムゾーンはリマインダ作成者の設定に依存するようなので注意。
/remind #channel-name "@review-bot ls author:org/my-team owner:org -repo:design" every weekday at 11am
詳細は Set a reminder – Slack Help Center 参照。
反応
開発者間のミーティングで紹介↓した後、
社内の幾つかのチームで使ってくれているようだ。Slack で定期的に呼んでいるチームもあれば daily meeting の最後に手動で呼び出して情報を同期しているチームもある。
フィリピンの同僚から Pull Request を貰ったり、チームでなく個人の活動を拾い上げたりもした。
所感
開発者だけでなく Product Manager にも喜ばれたのが意外だった。開発の進捗を把握する一助になるとか。
なんにせよ思ったより使われて良かった*3というのと、社内にユーザーがいるとフィードバックがすぐに貰えてドーパミンが出ますね。