Hubot+Herokuでbot入門+Slack連携
業務関係で少しHubotを触ったので, 備忘録代わりにブログに書いてみた.
インストール
以下の環境が必要になるので予めインストールする.
- Node.js, npm
- CoffeeScript
- Redis(データ永続化に必要. 必要に応じてインストールする)
Macの場合は, HomeBrewでインストールするのが楽.
brew install node redis-serverHubotは, npmからインストールできる.
npm install -g coffee-script hubotBotを作成してみる
hubot --create mybot
cd mybot
npm install --saveGitでバージョン管理
はじめから.gitignoreが用意されているので, おもむろにInitial commit.
cd mybot
git init
git add .
git commit -m "Initial commit."動作確認
./bin/hubot
Hubot> hubot hi
Hubot> hi
Hubot> exit自作スクリプトを書く
scriptsディレクトリ以下にスクリプトを設置する.
特定の文字列に反応してつぶやく
robot.hearを用いる. 第1引数に正規表現を, 第2引数に行いたい処理を関数で渡す.
この時関数に, msgオブジェクトが渡ってくるので, msg.sendでBotを喋らせることができる.
以下, hogeとつぶやいたらpiyoとつぶやくBotの例.
util = require 'util'↲
↲
module.exports = (robot) ->↲
robot.hear /hoge/i, (msg) ->↲
msg.send 'piyo'特定の時間につぶやく(Cron)
node-cronモジュールを用いると, 簡単に定期実行処理をHubotに行わせることができる. node-cronはnpmからインストールできる.
npm install cron --save以下, 日本時間の8時に, おはよう朝だYoとつぶやくスクリプト例.
cron = require('cron').CronJob
module.exports = (robot) ->
new cron('0 0 8 * * *', () ->
robot.messageRoom "#general", "おはよう朝だYo"
, null, true, 'Asia/Tokyo').start()環境変数の受け取り方
process.envを使う
BotをHerokuで運用する
Hubotは普通, そこまでサーバーのスペックを要求しないので(?)運用するには Herokuが気軽で良いと判断し, Herokuをホスティングサーバーとしてみた.
まずHerokuを利用するの必要なツールをbrewインストールする.
brew install heroku-toolbeltHerokuにHubotをデプロイ
git pushでデプロイを行う.
heroku create --stack cedar
git push heroku master
heroku addons:add rediscloud # Heroku上でVerifyしていないとエラー
heroku ps:scale web=1Herokuで運用してるHubotとSlackを連携
まず, SlackのIntegrationsからHubot連携して, HUBOT_SLACK_TOKENを控えておく.
次に, herokuコマンドで設定.
heroku config:add HUBOT_SLACK_TOKEN=xxxx
heroku config:add HUBOT_SLACK_TEAM=yucchiy
heroku config:add HUBOT_SLACK_BOTNAME=yucchiy-bot
heroku config:add HEROKU_URL=http://yucchiy.herokuapp.com/他にも, 監視チャンネルを制御する設定もある.
HUBOT_SLACK_CHANNELMODE- 後述する,
HUBOT_SLACK_CHANNELSと併用する.whitelistとblacklistが選択できる.
- 後述する,
HUBOT_SLACK_CHANNELMODE- カンマ区切りでチャンネル名を指定する.
HUBOT_SLACK_CHANNELSにwhiltelistと指定すると, 指定したチャンネルのみを監視し,blacklistを指定すると, 指定したチャンネルは監視しないようになる
詳細はhttps://github.com/tinyspeck/hubot-slackより確認できる.
次に, Procfileをslackのアダプタをロードするように変更する.
web: bin/hubot --adapter slack上記を設定の上, herokuのmasterブランチにデプロイすることで, slack連携が行われるようになる.