kzk-casino.com

一人前のITエンジニアを目指して

AWSの上にHubotを立ててSlackと連携させてみた

世間ではChatOpsが流行り、定番化しつつありますね。

この辺りは今までノータッチだったので、Slack+Hubotを始めて見ました。


参考にしたのは下記の書籍

Slack入門 [ChatOpsによるチーム開発の効率化]

Slack入門 [ChatOpsによるチーム開発の効率化]

Slackについての基本的な使い方から、HubotやCIとの連携まで書いてあります。

上記の書籍ではHubotをHerokuの上で動かすケースが記載されておりますが、
今回は使い慣れたAWSでやってみました。

※SlackやAWSのアカウントは持っている前提です


Hubotテスト用のSlack Teamを作成


既存のチームでbotを試すと、他の人に迷惑をかけたり、開発中のbotをみられて恥ずかしい思いをするので
botテスト用のTeamを一つ作っておきましょう。

今回は「hubot-testgroup」というTeamを作成しました。


作成したTeamにHubotのAdd-Onを導入する


Slackのチームメニューから、"Apps & integrations"をクリックします。

f:id:kzk_casino:20160702225629p:plain


すると、SlackのApp Directoryに移動できるので、検索バーから"hubot"を検索します。

f:id:kzk_casino:20160702225729p:plain


Hubotのインストール画面が表示されるので、"Install"をクリックします。

その後、Hubotの名前を決めて、"Add Hubot Integration"をクリックする。

f:id:kzk_casino:20160702230224p:plain


すると、Hubotの設定画面に遷移します。

ここに、HubotのTokenが記載されているので、コピーしてメモ帳などに貼り付けておきます。

f:id:kzk_casino:20160702230442p:plain


最後に、"hubot-testgroup"にHubotを招待しましょう。

下記をメッセージを書くところに打ち込んであげればOKです。

/invite hubot

f:id:kzk_casino:20160703000846p:plain


ここまでで、一旦Slackの準備はOKです。


AWS上にHubotを構築する

まず、AWSにhubot用のインスタンスを構築します。

この時、Security Groupのインバウンド設定において下記を許可することが必要です。

f:id:kzk_casino:20160703000925p:plain


インスタンスが起動したら、ターミナルからアクセスします。

Node.js、をnpmインストールします。

$ sudo yum -y install nodejs npm --enablerepo=epel

正しくインストールされたことを確認します。

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

続いて、hubotとCoffee Scriptをインストールします。

$ sudo npm install -g hubot coffee-script

正しくインストールされたことを確認します。

$ hubot -v
2.19.0
$ coffee -v
CoffeeScript version 1.10.0

続けてRedisをインストールします。

$ sudo yum -y install redis --enablerepo=epel

Redisを起動します。

$ sudo service redis start
Starting redis-server:                                     [  OK  ]
$ sudo chkconfig redis on
$ sudo chkconfig --list redis
redis          	0:off	1:off	2:on	3:on	4:on	5:on	6:off


ではいよいよhubotの起動・設定をしていきましょう。

下記のコマンドを実行します。今回はHubotのプロジェクト名をTeam名に合わせて"hubot-test"としました。

$ sudo npm install -g yo generator-hubot
$ mkdir -p hubot-test
$ cd hubot-test
$ yo hubot

実行するとAAが出迎えてくれます。
幾つか質問されるのですが、最初のメールアドレス以外はデフォルトでいいでしょう。。

$ yo hubot
                     _____________________________
                    /                             \
   //\              |      Extracting input for    |
  ////\    _____    |   self-replication process   |
 //////\  /_____\   \                             /
 ======= |[^_/\_]|   /----------------------------
  |   | _|___@@__|__
  +===+/  ///     \_\
   | |_\ /// HUBOT/\\
   |___/\//      /  \\
         \      /   +---+
          \____/    |   |
           | //|    +===+
            \//      |xx|

? Owner XXX@gmail.com
? Bot name hubot-test
? Description A simple helpful robot for your Company
? Bot adapter campfire

セッティングが終わると、ディレクトリやファイルが自動作成されます。

$ ls -la
合計 52
drwxrwxr-x  5 ec2-user ec2-user 4096  72 15:21 .
drwx------  8 ec2-user ec2-user 4096  72 15:20 ..
-rw-r--r--  1 ec2-user ec2-user  197  519 21:45 .editorconfig
-rw-r--r--  1 ec2-user ec2-user   39  519 21:45 .gitignore
-rw-r--r--  1 ec2-user ec2-user   27  72 15:21 Procfile
-rw-r--r--  1 ec2-user ec2-user 7880  72 15:21 README.md
drwxrwxr-x  2 ec2-user ec2-user 4096  72 15:21 bin
-rw-rw-r--  1 ec2-user ec2-user  213  72 15:21 external-scripts.json
-rw-rw-r--  1 ec2-user ec2-user    2  72 15:21 hubot-scripts.json
drwxrwxr-x 15 ec2-user ec2-user 4096  72 15:21 node_modules
-rw-r--r--  1 ec2-user ec2-user  618  72 15:21 package.json
drwxrwxr-x  2 ec2-user ec2-user 4096  72 15:21 scripts

Slackと連携するためのアダプタをインストールします。

$ sudo npm install hubot-slack --save

bin/hubotを編集して、Slack設定時に取得したTokenを埋め込みましょう。

vim bin/hubot
#!/bin/sh

set -e

npm install
export PATH="node_modules/.bin:node_modules/hubot/node_modules/.bin:$PATH"
export HUBOT_SLACK_TOKEN=xoxb-123456789-xxxxxxxxxxxxxxxxxxxxxxxxxx #ここにTokenを記載する

exec node_modules/.bin/hubot --name "hubot-test" "$@"

では、HubotをSlack連携させて起動します。

$ bin/hubot -a slack

Slackから試してみる

Slackから見ると、HubotがAvailableになっているのがわかります。

f:id:kzk_casino:20160703003622p:plain


pingに応答してくれたり

f:id:kzk_casino:20160703003820p:plain

地図を表示させたり

f:id:kzk_casino:20160703004000p:plain

といったスクリプトは標準で用意されています。


いろいろBlogを見ていると、HotPepperと連携して周辺の店を検索してくれたり、ネガティブな言葉に松岡修造が応答してくれたり、と

作り込み次第でいろいろできそうです。


いろいろ作ってみたいですね。