Slackとローカル環境上(Vagrant)のHubotを連携してみる

概要
1. Hubotとは
2. インストール
3. Hubot作成
4. Slack設定
5. HubotとSlackの連携

1. Hubotとは

https://hubot.github.com/

GitHub社が作ったNode.jsで動くbotフレームワークです。
Hubotの特徴は、

簡単に拡張できる
簡単に導入できる
多くのチャットツールに対応している

です。

Hubotとチャットツールを接続する"Adapter"を切り替えることで、様々なチャットツールに対応できます。
今回はチャットツール「Slack」との連携を試しました。

2. インストール

今回はローカル環境(Vagrant)に作成しました。Vagrantfileは以下になります。
*2016/05/28(土)変更: 作業環境をMacOSからWindowsに変えました。
またnode.js、npmの各パッケージのバージョンが上がっています。

作業環境
OS: Windows7 Home Premium 64bit
VirtualBox: 5.0.2
Vagrant: 1.7.4

# -*- mode: ruby -*-
# vi: set ft=ruby :

# All Vagrant configuration is done below. The "2" in Vagrant.configure
# configures the configuration version (we support older styles for
# backwards compatibility). Please don't change it unless you know what
# you're doing.

VAGRANTFILE_API_VERSION = "2"

Vagrant.configure(VAGRANTFILE_API_VERSION) do |config|

   config.vm.box = "centos67"
   config.vm.box_url = "https://github.com/CommanderK5/packer-centos-template/releases/download/0.6.7/vagrant-centos-6.7.box"

   config.vm.define "hubot" do |hubot|
     hubot.vm.hostname = "hubot"
     hubot.vm.network "private_network", ip:"192.168.33.30"
     hubot.vm.provider "virtualbox" do |vb|
        vb.customize ["modifyvm", :id ,"--memory", "1024"]
     end
   end

end

hubotの動作には下記4つが必要です。

Node.js
Hubot
Coffee-script
Yaemonジェネレーター
(Redis) *任意

・nodejs, npm

$ sudo yum install nodejs npm --enablerepo=epel

でインストールが可能ですが、いずれもバージョンが古いです。

$ node -v
v0.10.33  
$ npm -v
1.3.6

今回はnvm(Node Version Maneger)経由でnodejs、npmを取得しました。

  • nvmインストール
$ sudo yum install git
$ git clone https://github.com/creationix/nvm.git ~/.nvm
$ source ~/.nvm/nvm.sh
  • 新しいnodejs、npmをインストール
$ nvm install v5.0.0
######################################################################## 100.0%
Now using node v5.0.0 (npm v3.3.6)
 
$ nvm current
v5.0.0
 
$ node -v
v5.0.0

$ npm -v
3.3.6
 
$ which node
~/.nvm/versions/node/v5.0.0/bin/node

nvmはaliasとしてシェル環境変数に組み込まれるため、新たな端末を開く度にnvm.shを再実行する必要があります。~/.bash_profile等に追記しておくと良いです。

$ nvm alias default v5.0.0
$ vi ~/.bash_profile

-----------------------------------
# .bash_profile

# Get the aliases and functions

if [ -f ~/.bashrc ]; then
  . ~/.bashrc
fi 

# User specific environment and startup programs 
PATH=$PATH:$HOME/bin 

export PATH 

# 末尾に追加 
if [[ -s ~/.nvm/nvm.sh ]]; then 
  source ~/.nvm/nvm.sh 
fi

nvmでインストールされるnodeは、ユーザ環境毎に独立しています。rootユーザーと一般ユーザーで管理しているnodejs、npmパッケージは全くの別物になります。今回は一般ユーザー(vagrantユーザー)でインストールしていきます。

・hubot、coffee-script、yo、generator-hubotをインストール

$ npm install -g hubot coffee-script yo generator-hubot

$ npm ls -g hubot
/home/vagrant/.nvm/versions/node/v5.0.0/lib
└── hubot@2.19.0

$ npm ls -g coffee-script
/home/vagrant/.nvm/versions/node/v5.0.0/lib
├── coffee-script@1.10.0
└─┬ hubot@2.16.0
  └── coffee-script@1.6.3

$ npm ls -g yo
/home/vagrant/.nvm/versions/node/v5.0.0/lib
└── yo@1.8.3

$ npm ls -g generator-hubot
/home/vagrant/.nvm/versions/node/v5.0.0/lib
└── generator-hubot@0.4.0

3. Hubot作成

bot用のディレクトリ作成

$ mkdir -p hubot-test 
$ cd hubot-test 
$ yo hubot

yoコマンドでHubotの設定ができます。
事前に"yo doctor"でエラーが表示されているか確認してください。

・Hubotの設定

Owner(自分のメールアドレス)
Bot name(botの名前)
Desciprtion(botの説明)
Bot Adapter(botを使用するチャットツール)

Bot Adapterには"slack"を入力します。

・動作確認

botディレクトリで、

$ bin/hubot

を実行します。

hubot-test>hubot-test ping
hubot-test>PONG

で"PONG"と返ってくれば、正常に動いています。

4. Slackの設定

・slackでhubotを利用可能にする

左上のチーム名 > team Setting
左メニュー > Integrations
Hubotを探してAdd

・hubotを#genaral以外に招待する

招待したいチャンネルを開く
「invite others to this channel」からHubotを選択
確認方法として、hubotの設定画面で確認する

5. HubotとSlackの連携

Slackのトークンを確認して、環境変数に設定します。

$ export HUBOT_SLACK_TOKEN=<Your token>

f:id:eno0514:20151027011216p:plain

(botディレクトリの位置で)slackアダプターでhubotを起動させます。

$ bin/hubot --adapter slack

最後に、Slack画面で@hubot名に”ping”を送信して、”PONG”と返ってきたら正常に動いています。

以上になります。

参考:
第1回 Hubotとは何か:GitHub社謹製! bot開発・実行フレームワーク「Hubot」|gihyo.jp … 技術評論社
slackと連携するhubotを3分でインストールする(動画付き)