slackにHubotを導入(Heroku経由)

はじめに

当社にもslackの波が今日きたっぽいので、さっそくGithubでみかけたHubot先輩を導入しようじゃないかと業務の隙を狙い撃ちして
導入してみました。今回手順の参考にさせていただいたのは「http://memo.sanographix.net/post/88371442780」です。
ありがとうございました。

まずはローカルで動かしてみる

必要そうなもの

・nodeとnpm 
・githubのアカウント
・herokuのアカウント(コマンドラインツールも)

nodeのインストール

atomエディタを入れた時に入れていたものを何かアンインストールしていたっぽいので、入れなおしました。
ダウンロードは → http://nodejs.org/download/

$ node --version
v0.10.29
$ npm --version
1.4.14
npmでhubotのインストール
hubotとbot氏にやることを書くのに使うらしいcoffee-scriptをインストールします。
$ npm install -g hubot coffee-script
C:UsersusernameAppDataRoamingnpmcoffee -> C:UsersusernameAppDataRoamingnpmnode_modulescoffee-scriptbincoffee
C:UsersusernameAppDataRoamingnpmcake -> C:UsersusernameAppDataRoamingnpmnode_modulescoffee-scriptbincake
C:UsersusernameAppDataRoamingnpmhubot -> C:UsersusernameAppDataRoamingnpmnode_moduleshubotbinhubot
coffee-script@1.7.1 C:UsersusernameAppDataRoamingnpmnode_modulescoffee-script
└── mkdirp@0.3.5
hubot@2.7.5 C:UsersusernameAppDataRoamingnpmnode_moduleshubot
├── log@1.4.0
├── optparse@1.0.4
├── scoped-http-client@0.9.8
├── coffee-script@1.6.3
└── express@3.3.4 (methods@0.0.1, fresh@0.1.0, mkdirp@0.3.5, cookie@0.1.0, cookie-signature@1.0.1, buffer-crc32@0.2.1, range-parser@0.0.4, send@0.1.3, debug@1.0.3, commander@1.2.0, connect@2.8.4)
$ hubot -v
2.7.5
ローカルでhubot氏が動くようにテストしてみる
まずはbotを登録し、できたディレクトリへ移動
$ hubot --create XXXbot
Creating a hubot install at XXXbot
$ cd XXXbot
$ ls
Procfile external-scripts.json scripts/
README.md hubot-scripts.json
bin/ package.json
とりあえず動くようになっているので、動かしてみる
$ binhubot
hubot@2.7.5 node_moduleshubot
├── optparse@1.0.4
├── log@1.4.0
├── scoped-http-client@0.9.8
├── coffee-script@1.6.3
└── express@3.3.4 (methods@0.0.1, range-parser@0.0.4, buffer-crc32@0.2.1, cookie-signature@1.0.1, fresh@0.1.0, cookie@0.1.0, mkdirp@0.3.5, debug@1.0.3, commander@1.2.0, send@0.1.3, connect@2.8.4)
hubot-scripts@2.5.15 node_moduleshubot-scripts
└── redis@0.8.4
Hubot> [Fri Jul 11 2014 17:48:10 GMT+0900 (東京 (標準時))] WARNING The HUBOT_AUTH_ADMIN environment variable not set
[Fri Jul 11 2014 17:48:12 GMT+0900 (東京 (標準時))] ERROR [Error: Redis connection to localhost:6379 failed - connect ECONNREFUSED]
一番下にエラーっぽいのがでたの調べてみると
「hubot-scripts.jsonから”redis-brain.coffee”を消せば良い」という神の声があったので、そうしてみたら確かに消えたのでまぁおっけ
もう一回起動してみる
$ binhubot
Hubot> hubot ping
Hubot> PONG
と返ってくるので多分生きてます。やったね。
ちょっとアレンジしてみる。
botにつけた名前でお察しくださいなのだけど、10行目くらい?をちょっとだけいじった。
module.exports = (robot) ->
robot.respond /PING$/i, (msg) ->
msg.send "なんのようだなっしー!!!!"
で同じことしてみた。
$ binhubot
Hubot> hubot ping
Hubot> なんのようだなっしー
お察しください。
heroku deployする
通信が必要なので、botを動かすためにherokuにdeployしてslackと連携できるようにしてあげます。
まずは、npmで一つインストールします。
$ npm install hubot-slack --save
hubot-slack@2.1.0 node_moduleshubot-slack
次にbotのディレクトリの中にあるProcfileに以下を記載
web: bin/hubot --adapter slack
この状態でgit addしてcommitします。
そしてgithubのリポジトリを作成しpushしてしまってください。
$ git init XXXbot
$ git add --all
$ git commit -m "first commit"
$ git remote add origin https://github.com/xxxxx/xxxxx.git
$ git push -u origin master
これでpush完了です。
つぎにherokuにdeployします。ログイン、区画作成、
$ heroku login
Authentication successful.
$ heroku create XXXXX
$ git push heroku master
続いてherokuのdyna?設定。この当たりは先駆者のもの丸パクリなので、あまりわかってないです。
$ heroku ps:scale web=1
$ heroku addons:add rediscloud
Adding rediscloud on XXXbot... failed
! Please verify your account to install this add-on plan
! For more information, see https://devcenter.heroku.com/categories/billing
! Verify now at https://heroku.com/verify
エラーがでて萎え萎え。要は、クレカ登録herokuでしてなってことらしいです。
で、クレカ登録を怯えながらしたあとサイド実行
$ heroku addons:add rediscloud
Adding rediscloud on XXXbot... done, v4 (free)
Use `heroku addons:docs rediscloud` to view documentation.
あっさり通る。
最後に、authやslackで使うための環境変数をheroku先輩に突っ込みます。
環境変数の登録
Slackの「Configure Integrations」でHubotを登録するとauthのための情報と使うherokuのアドレスを登録する画面が出てきます。
herokuのアドレスを入力しsaveします。
そしてその環境変数をherokuのコマンドで登録してあげると完了です。
$ heroku config:add HUBOT_SLACK_TOKEN=xxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
$ heroku config:add HUBOT_SLACK_TEAM=teamname
$ heroku config:add HUBOT_SLACK_BOTNAME=botname
$ heroku config:add HEROKU_URL=http://xxx.herokuapp.com
実験
これで作業完了で、slackを見てみると特に変化はなくmemberの中にもいないのですが、@でbot名にpingすると反応が帰ってきます。
やったー。
最後に
一応今後いろいろ昨日というかmtgの時間ぐらいは自動で投げ込めるようにできたらと思います。
30分ぐらいで(既にherokuとgithubをつかっていたので)できたので、さくっと出来て楽しめるので良いすなー。