Hubot+Herokuでbot入門+Slack連携

業務関係で少しHubotを触ったので, 備忘録代わりにブログに書いてみた.

インストール

以下の環境が必要になるので予めインストールする.

  • Node.js, npm
  • CoffeeScript
  • Redis(データ永続化に必要. 必要に応じてインストールする)

Macの場合は, HomeBrewでインストールするのが楽.

brew install node redis-server

Hubotは, npmからインストールできる.

npm install -g coffee-script hubot

Botを作成してみる

hubot --create mybot
cd mybot
npm install --save

Gitでバージョン管理

はじめから.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-toolbelt

HerokuにHubotをデプロイ

git pushでデプロイを行う.

heroku create --stack cedar
git push heroku master
heroku addons:add rediscloud # Heroku上でVerifyしていないとエラー
heroku ps:scale web=1

Herokuで運用してる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と併用する. whitelistblacklistが選択できる.
  • HUBOT_SLACK_CHANNELMODE
    • カンマ区切りでチャンネル名を指定する.
    • HUBOT_SLACK_CHANNELSwhiltelistと指定すると, 指定したチャンネルのみを監視し, blacklistを指定すると, 指定したチャンネルは監視しないようになる

詳細はhttps://github.com/tinyspeck/hubot-slackより確認できる.

次に, Procfileをslackのアダプタをロードするように変更する.

web: bin/hubot --adapter slack

上記を設定の上, herokuのmasterブランチにデプロイすることで, slack連携が行われるようになる.

参考URL