開発者ブログ by playground

playgroundの技術系ブログ

PRしたら自動でアサインしてくれるgem作りました

こんにちは。playgroundエンジニアの海老沼です。

最近iOSアプリを作っていたのですが、久々にRailsでWebアプリ作ってます。やっぱりRails楽しいですね。

ebkn12 (Kenichi Ebinuma) · GitHub

以前gemを公開しました。

tech-blog.playground.live

ダウンロードされてるかな?と思ってRubyGemsのサイト ( RubyGems.org | your community gem host) 見てみたら

f:id:playground-live:20171218171136p:plain

800以上ダウンロードされていたのでびっくりです。(多いのか少ないのか全然わからないですが、、)


今回、また新しく便利なgemを作成しました。

pghub-auto_assign

https://github.com/playground-live/pghub-auto_assigngithub.com

チームで開発する時に、人数が多いと誰がどのPRをレビューするかを決めなきゃいけないですよね。同時進行で何個も進めていると面倒くさいです。

そこで、自動でランダムにアサインorレビュアーを指名してくれるものを作ってみました。

playgroundではreview_requestの代わりにassigneeを指定してレビューをしているので、自動アサインの機能も実装してあります。

assigneeの人数を指定しない場合PRを作成した人だけアサインされる仕様になっています。

概要

PRを作ったら、設定に応じて自動でAssigneeとReviewersが追加されるというものです。

organizationのチームごとに人数を設定します。

導入

前回のブログで導入方法を説明して、実際に何人かに使っていただいて感想を聞いたのですが、「導入がめんどくさい」という意見が多かったです。

そこで、自動でデプロイできる仕組みを作りました。

今回はherokuの'Deploy to Heroku' buttonという仕組みを利用しました。

devcenter.heroku.com

簡単に仕組みを説明すると、

  • PghubをインストールしてあるrailsサーバーをGithubにあげる
  • ルートにapp.jsonというファイルを作成し、そこにherokuへのデプロイ設定を記述する
  • Deploy to herokuボタンを押すと、app.jsonの内容を読み取って自動でherokuにデプロイしてくれる

という感じです。

ブランチ毎にボタンを作成できるので、環境毎にデプロイするということが可能です。

特にエラーが出ることなくすんなり実装できてしまったので、herokuってやっぱり便利ですね。

こちらが実際にpghubがインストールされているRailsサーバーのリポジトリです

github.com

手順

1. Githubのアクセストークンを取得する

Github を開いて、SettingsDeveloper settingsPersonal Access TokensGenerate new token

以下のように設定してトークン作成

f:id:playground-live:20171117165736p:plain

作成したトークンをメモしておいてください

2. Deploy to herokuボタンをおす

(herokuへの会員登録とGithubとの連携は済ませておいてください)

今回のpghub-auto_assignを使う

Deploy

前回紹介したpghub-lgtmを使う

Deploy

前回紹介したpghub-issue_titleを使う

Deploy

pghubを全部使う

Deploy

3. herokuの設定をする

ボタンを押すと、このような画面が表示されると思います。

f:id:playground-live:20171125153735p:plain

(もしこの画面が表示されていない場合、Githubかherokuにログインできていない可能性が大きいです)

項目 内容
App name なんでも良いです
Choose a region United StatesのままでOKです
Config Variables
GITHUB_ORGANIZATION Githubのorganization名(個人の場合アカウント名)
GITHUB_ACCESS_TOKEN さっき取得したGithubのaccess_token
NUM_OF_ASSIGNEES_PER_TEAM 下の説明を参照
NUM_OF_REVIEWERS_PER_TEAM 下の説明を参照
NUM_OF_ASSIGNEES_PER_TEAM、NUM_OF_REVIEWERS_PER_TEAM

ここには、自動でassign、review requestをする人数をチーム毎に設定します。以下のフォーマットで書くようにしてください。

チーム名:人数 チーム名:人数

(例)
administrators:1 members:2

NUM_OF_ASSIGNEES_PER_TEAMを設定しなかった場合、PRを出した時自動でPRを出した人1人がアサインされます。また、assigneeはPRを出した人を含みます。

NUM_OF_REVIEWERS_PER_TEAMを設定しなかった場合、review_requestは実行されません。

設定を終わらせたら、Deploy appボタンを押してください。

4. webhookの設定をする

issueかPRのメニュー右端のsettingswebhookAdd webhook

このように設定する

f:id:playground-live:20171117171851p:plain

5. 完了!

PRして機能を試してみてください!

注意

今回のauto_assignを実装する際にpghub-baseの方にも変更を加えてv1.1.0をリリースしたので、依存性の関係で以前ダウンロードしたものと同じ環境で利用することができません。

以前ダウンロードして利用しているものに組み込む場合、pghub-lgtmpghub-issue_titleを共にv1.1.0にアップデートしてください。


これも作って欲しい!みたいな要望とか、うまく動作しないとかあればコメントしていただけると嬉しいです!