hubotでslackに妖精さんを召喚した
最近といってもだいぶ前から、仲間内のコミュニケーションツールがSkypeからslackへと移行してきた。 他サービスと連携ができてエンジニアが好みそうというか、エンジニアにしか流行らなそうな。。。
んで、hubot & heroku & slackの連携をさせてみた。 殺伐とした(してないけど)TLに妖精さんが!
結構簡単に出来たので、手順を残しておくー。
概要
hubotについて↓
GitHub社謹製! bot開発・実行フレームワーク「Hubot」:連載|gihyo.jp … 技術評論社
hubotはエンジンとしてNode.jsとRedisを使用しているので、 その両方をサポートしているPaaSとして、herokuを使う。 herokuについて↓
用意するもの
- npm, Node.js
- redis(データ永続化のために必要なDB。エラーは出るものの必須ではない)
- herokuアカウント, heroku Toolbelt(Toolbeltも必須ではない)
heroku Toolbeltは、コマンドラインからherokuの操作を行うためのツールなんで、Vimでコード書いてcommit→デプロイが一気に出来て楽。 ブラウザからでも同じことができるけども。
まずは、hubotとcoffee-scriptをインストールして、適当な名前でhubotをcreateすればその名前のフォルダができる。 今回は、yoseisanbotにします。 ↓で起動までできる。
$ sudo npm install -g hubot coffee-script $ hubot --create yoseisanbot $ cd yoseisanbot $ ./bin/hubot
この時点でhubot PING
するとPONG
されたり、デフォルトでも色々動くけど、
scriptsフォルダ下に、.coffeeファイルを置けば拡張ができる。
hubotを調教する(拡張コードを書く)
私ちゃんの如く「妖精さーん」と呼ぶと、妖精さんが現れて何か言うようにする。
# # Description: # 妖精さんbot # 「妖精さーん」と呼びかけると答えてくれる。 # random = (n) -> Math.floor(Math.random() * n) module.exports = (robot) -> robot.hear /妖精さーん/, (msg) -> vocabulary = [ 'おめぇの席 ねえです', '僕ら無き後 怪我 病気事故 身投げ そういうことにご注意なさるです', '「重税」「圧政」「支配」「弾圧」', 'しあわせの しろいこな!', 'これたべても はっぴーにはなれぬです', 'お菓子ないですかー', 'ガムはおやつにはいりませんので', 'コインいっこいっこいっこでおしあわせー', 'ちくわ', 'あじ、いります?' ] seed = vocabulary.length speech = vocabulary[random(seed)] msg.send "(・ワ・) < #{speech}"
書き方とかは省きます。
slack連携するためにhubot-slackをインストール。
$ sudo npm install hubot-slack --save
次に、botフォルダの直下に置くProcfileを書く。
Procfileはherokuのプロセスタイプの設定ファイル。
bin/hubot
に--adapter slack
オプションを付けて、slackアダプタ使うことを記述する。
web: bin/hubot --adapter slack
ファイルは揃ったので、git commit
しておく。
デプロイ準備
herokuにAppを追加する。SSH-KEYの設定とか必要ですけど、省きます。 heroku Toolbeltを入れているなら、以下のコマンドでOK。ブラウザからでもよい。
$ heroku login $ heroku create yoseisanbot
herokuにredisを追加するときは、heroku AddonのRedis To Goの無料版であるnanoサイズを使う。
$ heroku addons:add redistogo:nano
slack側で、hubotのIntegrationを追加すると、連携に必要な変数等が設定・取得できる。
Setup Instructions
heroku側に設定するので、コピーしておく。
HUBOT_SLACK_TOKEN=xxxxxxxxxxxxxxxx HUBOT_SLACK_TEAM=xxxxxxx HUBOT_SLACK_BOTNAME=xxxxxxx
Service Configuration
herokuで作ったAppのURLを入力する。
http://yoseisanbot.herokuapp.com
Integration Settings
Botの画像を設定する。
デプロイ
herokuに戻って、slackのIntegrationsから指定されたToken等を変数設定する。
$ heroku config:add HEROKU_URL=http://yoseisanbot.herokuapp.com $ heroku config:add HUBOT_SLACK_TOKEN=xxxxxxxxxxxxxxxx $ heroku config:add HUBOT_SLACK_TEAM=xxxxxxx $ heroku config:add HUBOT_SLACK_BOTNAME=xxxxxxxxx
herokuでの受け入れ環境が整ったので、gitでherokuに対してpushして、1X Standard Dynosサイズのwebアプリを起動する。
$ git push heroku master $ heroku ps:scale web=1
git push
すると、依存性のインストールとか起動とかしてくれる。
あとは、slackに行って、「妖精さーん」と発言するだけです!