hubotをheroku上にデプロイして動かしてみようと思います。
連携するチャットツールはSlackです。
Herokuの準備
アカウントの作成と各種ツールの設定をします。
Herokuアカウントの作成
公式サイトでアカウントをつくります。
Heroku Toolbeltのインストール
こちらからHerokuを操作するためのCLIツールをインストールする。
インストールしたらバージョンを確認します。
% heroku version
heroku-toolbelt/3.9.1 (x86_64-darwin10.8.0) ruby/1.9.3
Herokuログイン
Heroku Toolbeltからログインします。heroku login
コマンドで対話形式で答えていき、メールアドレスやパスワード、SSH鍵を登録していきます。
% heroku login
nodeインストール
Hubotはnode製なので入れておきます。
公式ページよりパッケージをダウンロードし、インストールする。
※homebrewでインストールしている人もいますが、とりあえず今回は公式から落とします。
インストールが終わったらバージョンを確認する。
% node -v
v0.10.29
% npm -v
1.4.14
Hubotアプリの作成
事前準備
npm
でhubot
とcoffee-script
をインストールします。
% npm install -g hubot coffee-script
プロジェクトの作成
Herokuにデプロイするプロジェクトを作成します。
下記コマンドでHubot用のプロジェクトディレクトリを作成します。
※カレントディレクトリに注意。
% hubot --create mybot
Slack Adapter
次にSlack Adapterを入れます。--save
オプションを付けることで、package.json
に記述されます。
% cd mybot
% npm install --save hubot-slack
また、Procfile
に使用するadapterのデフォルト値が記載されているのでこちらも変更しておく。
web: bin/hubot -a slack
Gitリポジトリの作成
Herokuへのデプロイはgit
により行うため、リポジトリを作成し登録します。
% git init
% git add .
% git commit -m "initial commit"
Herokuへのデプロイ
Dynosの作成
heroku create
コマンドで Dynos を作成する。
DynosはHerokuにおける仮想マシンのことを指しているみたいです。
% heroku create hogebot
Creating matsbot... done, stack is cedar
http://hogebot.herokuapp.com/ | git@heroku.com:hogebot.git
ダッシュボードを見ると確かにできています。(らくちんやね)
また、この時作成されたURLはDynosの環境変数と、Slack側の設定に入れる必要がある。
環境変数の設定
SlackのIntegrationのところに記載してあるパラメータを確認する。
heroku config:add
コマンドでパラメータを変更する。
なお、この時変更されるDynosは.git
にリモートリポジトリとして登録されているDynosになる。
heroku create
で作成した際には自動でリモートに登録されるが、管理画面から作成したり、作りなおしたりすると異なるDynosが登録されていることがあるので注意すること。
% 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
でデプロイする。
% git push heroku master
Slackの設定
最後にSlack側のHubot IntegrationにHerokuのURLを登録する。
今回は http://hogebot.herokuapp.com になる。
動作確認
Slack上で @hogebot: ping
とかやって確認してみてください。
感想
Herokuは敷居が高い印象でしたが、使ってみるとデプロイ周りが超カンタンでした。
自動でリモートリポジトリが登録されているなど、仕様はちゃんと理解する必要がありそうです。