hubotをdockerで動かしてみる（クラウド編）


## はじめに
チーム開発をしていて、レビュアーが足りなくて、レビュー待ちが発生することがあります。
そこで、レビュアーを増やすために、hubotにレビュアーを抽選＆アサインさせてみようと思います。
せっかくなので、普通に動かすのではなくて、dockerでローカルでもクラウド（`Heroku`）でも同じように動かします。
今回は、クラウド（`Heroku`）編です。
前回のローカル編は[こちら](http://qiita.com/imunew/items/b13d0eddf24f2001a224)。

さっさと動かしてみたい人は、こちらのリポジトリを参照ください。
https://github.com/imunew/hubot-github-reviewer-lotto

レビュアー抽選のアイデアは、下記のスライドが元ネタになっています。

- [Hubotレビュアーおみくじ @ githubkaigi // Speaker Deck](https://speakerdeck.com/sakatam/hubotrebiyuaomikuzi-at-githubkaigi)
- [sakatam/hubot-reviewer-lotto: A reviewer lottery script for Hubot](https://github.com/sakatam/hubot-reviewer-lotto)

## 事前準備
- ローカルで[hubot-github-reviewer-lotto](https://github.com/imunew/hubot-github-reviewer-lotto)を動かしてみる
- herokuにサインアップ
- [Heroku CLI](https://devcenter.heroku.com/articles/heroku-cli)のインストール

## セットアップ
### heroku login
```bash
$ heroku login
 ▸    heroku-cli: update available from 6.9.3-f709986 to 6.11.2-2aff95b
Enter your Heroku credentials:
Email: user@example.com
Password: ********
Logged in as user@example.com
```

### heroku create（アプリケーションの作成）
```
$ heroku create hubot-github-reviewer-lotto
  Creating ⬢ hubot-github-reviewer-lotto... done
  https://hubot-github-reviewer-lotto.herokuapp.com/ | https://git.heroku.com/hubot-github-reviewer-lotto.git
```

### Heroku Container Registry and Runtime のインストール
`Heroku`でDockerを使うには、[Container Registry and Runtime](https://devcenter.heroku.com/articles/container-registry-and-runtime)というプラグインを使います。

```bash
$ heroku plugins:install heroku-container-registry
Installing plugin heroku-container-registry... done
```

`heroku-container-tools`は、`deprecated`になっていますので、インストール済みの場合は、アンインストールしておいてください。

```
$ heroku plugins:uninstall heroku-container-tools
```

### Container Registry にログイン
```bash
$ heroku container:login
Login Succeeded
```

### コンテナをpush
```bash
$ cd /path/to/hubot-github-reviewer-lotto
$ cd heroku
$ heroku container:push hubot
```

この段階で、`Heroku`にログインして確認してみると、`hubot-github-reviewer-lotto`アプリが作成されています。

![heroku_apps.png](https://qiita-image-store.s3.amazonaws.com/0/26422/0671a06e-f1c9-2c10-576a-adf3a5baaea6.png "heroku_apps.png")

さらにクリックしてダッシュボードに遷移すると、`container:push`した`hubot`コンテナが表示されています。

![hubot_container.png](https://qiita-image-store.s3.amazonaws.com/0/26422/499efb0a-6642-edf1-5c13-5951e9c45011.png "hubot_container.png")

### 環境変数を設定
`config:set`コマンドで下記のように、環境変数をセットします。
`REDIS_URL`については、後述します（セットしなくてOKです）。

```bash
$ heroku config:set HUBOT_GITHUB_TOKEN={Input your github token}
$ heroku config:set HUBOT_GITHUB_ORG={Input your github organization}
$ heroku config:set HUBOT_GITHUB_REVIEWER_TEAM={Input your github reviewer team}
$ heroku config:set HUBOT_GITHUB_WITH_AVATAR={Input use avatar flag}
$ heroku config:set HUBOT_SLACK_TOKEN={Input your slack token}
```

尚、WebのSettingsタブからも環境変数の設定が可能です。
`.env`からコピペすることを考えると、コマンドからの設定が楽です。

### Redis のセットアップ
[こちら](https://devcenter.heroku.com/articles/heroku-redis)を参考にコマンドでAddonを追加することもできますが、WebのResourcesタブからも追加することが可能です。

`Add-ons`の検索欄で、`redis`と入力すると、下記のように候補がリストアップされるので、`Heroku Redis`を選択します。

![search_addon_redis.png](https://qiita-image-store.s3.amazonaws.com/0/26422/f14e373f-ac5f-5313-cda1-d7a2b0b4c47a.png "search_addon_redis.png")

Planの確認ダイアログが表示されますので、デフォルトの`Hobby Dev - Free`のまま、`Provision`ボタンをクリックします。

![select_addon_plan.png](https://qiita-image-store.s3.amazonaws.com/0/26422/77510316-bc9f-aad0-8cc8-83740a2a015d.png "select_addon_plan.png")

Provisionが完了すると、環境変数`REDIS_URL`が自動でセットされます。

### hubot コンテナの起動
コンテナをpushしただけでは、起動していないので、起動させます。
`Overview`タブにある、`Configure Dynos`というリンクをクリックします。

編集ボタン（鉛筆のマーク）をクリックすると、編集モードになります。
大変、分かりづらいのですが、ON/OFFのスイッチがあり、ONにすると下記のようになりますので、その状態で`confirm`ボタンをクリックします。

![turn_on_dynos.png](https://qiita-image-store.s3.amazonaws.com/0/26422/918ac3c2-3363-2f4f-acd6-5b4885714642.png "turn_on_dynos.png")


## 起動確認

右上の`More`のメニューから、`View logs`を選択すると、ログページに遷移します。

![logs.png](https://qiita-image-store.s3.amazonaws.com/0/26422/79d5222b-5fe4-e5da-29be-3432610482fa.png "logs.png")

[ローカル編](http://qiita.com/imunew/items/b13d0eddf24f2001a224)で動かしたときと同様に、
hubotを追加したSlackチャンネルにて、下記のようにコマンドを入力します。
{bot name} reviewer for {repository name} {PR Number}

Botから通知があれば、成功です。

![reviewer_lotto.png](https://qiita-image-store.s3.amazonaws.com/0/26422/84c1893c-32fb-3440-8ce9-775ce4956504.png "reviewer_lotto.png")

## おわりに
この`hubot-github-reviewer-lotto`リポジトリをベースに、`scripts/`ファイルを色々追加していって、自分専用のBotを作ってもらえたら幸いです。
また、hubot以外のWebアプリもHeroku＋Container Registryで動かしてみたいですね。

ではでは。