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


    Yuichiro MUKAI
    Yuichiro MUKAIGame & Web Programmer

    シブヤで働くゲームプログラマー. C#(For Unity)をメインに, 趣味でPHPなどを書きます.

    Twitter / Facebook