Heroku上でHubotを動かす


hubotをheroku上にデプロイして動かしてみようと思います。
連携するチャットツールは[Slack](https://slack.com/)です。

# Herokuの準備

![imgres.jpg](https://qiita-image-store.s3.amazonaws.com/0/45249/08d55610-2284-655b-510f-c4b7f40b8e49.jpeg "imgres.jpg")

アカウントの作成と各種ツールの設定をします。

## Herokuアカウントの作成

[公式サイト](https://www.heroku.com)でアカウントをつくります。

## Heroku Toolbeltのインストール

[こちら](https://toolbelt.herokuapp.com/)からHerokuを操作するためのCLIツールをインストールする。

インストールしたらバージョンを確認します。

```bash
% heroku version
heroku-toolbelt/3.9.1 (x86_64-darwin10.8.0) ruby/1.9.3
```

## Herokuログイン

Heroku Toolbeltからログインします。`heroku login`コマンドで対話形式で答えていき、メールアドレスやパスワード、SSH鍵を登録していきます。

```bash
% heroku login
```

# nodeインストール

Hubotはnode製なので入れておきます。

![node-js-logo.png](https://qiita-image-store.s3.amazonaws.com/0/45249/5fb0da37-8a1f-fef7-1e5c-1a8c4d9e30a5.png "node-js-logo.png")


[公式ページ](http://nodejs.org/)よりパッケージをダウンロードし、インストールする。

※[homebrewでインストールしている人](http://codenote.net/mac/homebrew/346.html)もいますが、とりあえず今回は公式から落とします。

↓こんな感じの画面が出ます。
![mode-npm-osx.jpg](https://qiita-image-store.s3.amazonaws.com/0/45249/e1882e4c-de34-47de-4a9c-d291447a937a.jpeg "mode-npm-osx.jpg")

インストールが終わったらバージョンを確認する。

```bash
% node -v
v0.10.29

% npm -v
1.4.14
```

# Hubotアプリの作成

![hubot.png](https://qiita-image-store.s3.amazonaws.com/0/45249/f3c2c6ca-cfff-0945-4eca-254ecf3c3bda.png "hubot.png")

## 事前準備

`npm`で`hubot`と`coffee-script`をインストールします。

```bash
% npm install -g hubot coffee-script
```

## プロジェクトの作成

Herokuにデプロイするプロジェクトを作成します。
下記コマンドでHubot用のプロジェクトディレクトリを作成します。
※カレントディレクトリに注意。

```bash
% hubot --create mybot
```

## Slack Adapter

次にSlack Adapterを入れます。`--save`オプションを付けることで、`package.json`に記述されます。

```bash
% cd mybot
% npm install --save hubot-slack
```

また、`Procfile`に使用するadapterのデフォルト値が記載されているのでこちらも変更しておく。

```bash:Procfile
web: bin/hubot -a slack
```

## Gitリポジトリの作成

Herokuへのデプロイは`git`により行うため、リポジトリを作成し登録します。

```bash
% git init
% git add .
% git commit -m "initial commit"
```

# Herokuへのデプロイ

## Dynosの作成

`heroku create`コマンドで **Dynos** を作成する。
DynosはHerokuにおける仮想マシンのことを指しているみたいです。

```bash
% heroku create hogebot

Creating matsbot... done, stack is cedar
http://hogebot.herokuapp.com/ | git@heroku.com:hogebot.git
```

[ダッシュボード](https://dashboard.heroku.com/apps)を見ると確かにできています。（らくちんやね）
また、この時作成されたURLはDynosの環境変数と、Slack側の設定に入れる必要がある。

## 環境変数の設定

Slackの[Integrationのところ](https://mattuso.slack.com/services/new/hubot)に記載してあるパラメータを確認する。

![slack-hubot-1.png](https://qiita-image-store.s3.amazonaws.com/0/45249/5de48d27-8af9-7de0-e6d7-fe569146f9a6.png "slack-hubot-1.png")

`heroku config:add`コマンドでパラメータを変更する。

**なお、この時変更されるDynosは`.git`にリモートリポジトリとして登録されているDynosになる。
`heroku create`で作成した際には自動でリモートに登録されるが、管理画面から作成したり、作りなおしたりすると異なるDynosが登録されていることがあるので注意すること。**

```bash
% heroku config:add HEROKU_URL=http://hogebot.herokuapp.com		← Dynos毎に生成されるURL
% heroku config:add HUBOT_SLACK_TOKEN=xDagElsrMxDhAiECQ9DqJGpr
% heroku config:add HUBOT_SLACK_TEAM=hogehoge
% heroku config:add HUBOT_SLACK_BOTNAME=hogebot
```

## デプロイ

`git push`でデプロイする。

```bash
% git push heroku master
```

# Slackの設定

最後にSlack側のHubot IntegrationにHerokuのURLを登録する。
今回は *http://hogebot.herokuapp.com* になる。

![slack-hubot-2.png](https://qiita-image-store.s3.amazonaws.com/0/45249/9d29092e-9290-f09f-97fd-b14fd1bf96ab.png "slack-hubot-2.png")

# 動作確認

Slack上で `@hogebot: ping` とかやって確認してみてください。

# 感想

Herokuは敷居が高い印象でしたが、使ってみるとデプロイ周りが超カンタンでした。
自動でリモートリポジトリが登録されているなど、仕様はちゃんと理解する必要がありそうです。