みずぴー日記

人間の再起動ボタンはハワイのビーチにある

🍮 Prpr: bot for github pull request

prprというgithubのプルリクエストに反応するボットを作った。

プルリクエストに関する運用が増えてきたので、ガーっと作った。

プラグイン

gemを追加することで、挙動を追加できる。

source 'https://rubygems.org'
ruby '2.2.3'

gem 'prpr'

# メッセージの通知先をslackにする
gem 'prpr-slack'

# 「REVIEW」ラベルをつけたときに、チャットサービス(例: slack)にレビュー依頼を通知する。
gem 'prpr-review_label'

# コメントで @mention をしたときに、チャットサービス(例: slack)に通知通知する。
# mention名は適宜読み替えられる。
gem 'prpr-mention_comment'

# プルリクエストの作成時に、チェックリストを投稿する。
gem 'prpr-checklist'

# コンフリクトしているプルリクエストに「conflict」ラベルをつける。
gem 'prpr-conflict_label'

# Gemfile.lockを更新する際に、マイナー・メジャーバージョンが変わっている箇所に注釈を付ける
gem 'prpr-gemfile'

実行例

f:id:mzp:20150909072921p:plain

Herokuへのデプロイ

prpr-templateをHerokuにデプロイすれば、ほぼそのまま動く。 Deploy to Herokuボタンをつけてあるので、簡単にデプロイできると思う。

Deploy

Tl; dr

Ruboty

いくつかの箇所でrubotyのアイデアやコードを参考にしている。 gemによって挙動を拡張する点や、クラスごとの責務の切り方などについては特に強い影響を受けている。

このおかげでだいぶ速く開発することができた。

Github上のボット

Github上のボットはすでにいくつか作成されている。

例えば、今回やっていることはアプリ開発の品質底上げ施策をWebhooksでBotが支援する世界 - クックパッド開発者ブログに近い。 また、Webhookに反応するわけではないが行末のスペースを自動で消すWhitespace botもある。自分もタブとスペースの混在を検知するSpace tab botを作ったことがある。

ただコードが公開されていて挙動を自由に拡張できるボットは見つけれなかったので、今回作った。 もしあるなら、教えてほしい。

名前

というのが名前の由来だが、mzp/prprというレポジトリ名がちょっと嫌になったので、特に読み方は指定しないことにした。 もしくはぷるぷる。

設計

なぜこのような設計にしたかについては別エントリを書いた。

mzp.hatenablog.com