SlackのBot(hubot)を作ってみる

More than 3 years have passed since last update.


はじめに

最近コレを読んで、無性にChatBotを作りたくなった。

Software Design 2016年1月号|技術評論社

Slackでらくらく工数管理 « サーバーワークス エンジニアブログ

ので、手始めにSlackのbot作りをしてみようと思う。


botの種類

おもむろにslack botでググってみたところ、hubotなるものが一般的らしい。

ほかにもWebHooksを使うものもあるようだが、次のステップにしようと思う。


hubotの追加

ここからIntegrationするAppを選べる。

App Directory | Slack

スクリーンショット 2016-01-28 0.11.50.png

hubotで検索するとAppが出てくるので、導入するチームを選ぶ。

Hubot | Slack

スクリーンショット_2016-01-28_0_13_58.png

APIトークンやらBotの名前やらいろいろ設定できる画面に飛ぶので、適当に名前をつけてアイコンを設定すると、とりあえずbotユーザが追加された。

スクリーンショット 2016-01-28 0.25.10.png


botの中身を作る

botのハコはできたので、次に中身を作る。

まずは手元のMacbookで組み立てる。

どうやらNode.jsが動く環境とnpmが必要らしい。

手元の環境は既に導入済みだったので、導入方法は割愛する。

$ node -v

v0.12.7
$ npm -v
2.11.3

まずは開発に必要なモジュールをnpm経由でインストールする。

以下の4つが必要らしい。


  • hubot -> Hubot本体

  • yo -> Yeomanという雛形作成ツール

  • generator-hubot -> YeomanのHubot雛形ジェネレーター

  • coffee-script -> HubotはCoffeeScriptで書くらしい

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

長々と途中経過が流れるが無事インストール完了。

早速ジェネレータを叩いてみる。

$ mkdir hubot-sushi

$ cd hubot-sushi
$ yo hubot
? ==========================================================================
We're constantly looking for ways to make yo better!
May we anonymously report usage statistics to improve the tool over time?
More info: https://github.com/yeoman/insight & http://yeoman.io
========================================================================== (Y/n)
_____________________________
/ \
//\ | Extracting input for |
////\ _____ | self-replication process |
//////\ /_____\ \ /
======= |[^_/\_]| /----------------------------
| | _|___@@__|__
+===+/ /// \_\
| |_\ /// HUBOT/\\
|___/\// / \\
\ / +---+
\____/ | |
| //| +===+
\// |xx|

? Owner 適当な名前 <適当なメールアドレス>
? Bot name sushi
? Description We Love sushi!!!
? Bot adapter (campfire) slackgot back false
? Bot adapter slack
create bin/hubot
create bin/hubot.cmd
create Procfile
create README.md
create external-scripts.json
create hubot-scripts.json
create .gitignore
create package.json
create scripts/example.coffee
create .editorconfig
_____________________________
_____ / \
\ \ | Self-replication process |
| | _____ | complete... |
|__\\| /_____\ \ Good luck with that. /
|//+ |[^_/\_]| /----------------------------
| | _|___@@__|__
+===+/ /// \_\
| |_\ /// HUBOT/\\
|___/\// / \\
\ / +---+
\____/ | |
| //| +===+
\// |xx|

(以下略)

途中いくつかbotの名前などを聞かれるが、いい感じに回答する。

インストールが完了したら、とりあえずHubotを動かしてみる。

heroku絡みのエラーが出ているようだが、一旦無視して良さそうな感じ。

$ ./bin/hubot

hubot-sushi> [Thu Jan 28 2016 01:10:58 GMT+0900 (JST)] ERROR hubot-heroku-alive included, but missing HUBOT_HEROKU_KEEPALIVE_URL. `heroku config:set HUBOT_HEROKU_KEEPALIVE_URL=$(heroku apps:info -s | grep web-url | cut -d= -f2)`
[Thu Jan 28 2016 01:10:58 GMT+0900 (JST)] INFO hubot-redis-brain: Using default redis on localhost:6379

sushi>
sushi> ping
sushi> sushi ping
sushi> PONG
sushi> exit

pingと打ったらPONGと返してくれた。

なお、名前を間違うと相手にしてくれない模様。


ハコと中身を繋ぐ

どうやら一般的にはherokuに突っ込むことが多いみたいだが、料金改定により無料枠で24時間稼働しっぱなしができなくなったらしい。

Herokuの新料金について

ので、一旦手元の環境(Macbook)をSlackを繋いでみる。

SlackのHubotの設定画面でAPIトークンを確認し、環境変数にセットする。

スクリーンショット_2016-01-28_1_28_17.png

$ export HUBOT_SLACK_TOKEN=<API Token>

Slackアダプターを指定し、Hubotを起動。

$ ./bin/hubot --adapter slack

[Thu Jan 28 2016 01:34:15 GMT+0900 (JST)] INFO Connecting...
[Thu Jan 28 2016 01:34:17 GMT+0900 (JST)] INFO Logged in as sushi of bdig, but not yet connected
[Thu Jan 28 2016 01:34:19 GMT+0900 (JST)] INFO Slack client now connected
[Thu Jan 28 2016 01:34:19 GMT+0900 (JST)] ERROR hubot-heroku-alive included, but missing HUBOT_HEROKU_KEEPALIVE_URL. `heroku config:set HUBOT_HEROKU_KEEPALIVE_URL=$(heroku apps:info -s | grep web-url | cut -d= -f2)`
[Thu Jan 28 2016 01:34:20 GMT+0900 (JST)] INFO hubot-redis-brain: Using default redis on localhost:6379

どうやら無事繋がったっぽい。相変わらずherokuのエラーは一旦無視して良さそう。

早速HubotとDirectMessageをやりあってみる。

スクリーンショット_2016-01-28_1_36_38.png

ちゃんと応答してくれた!

DMの場合はコマンドを投げるだけで良いみたい。

Channel内だとどうなるのか。

試しにHubotと二人のChannelを作り、コマンドを投げてみた。

スクリーンショット_2016-01-28_1_39_28.png

コマンド単体では応答してくれないようだ。

mentionなり、Hubotの名前を最初につけることで呼び出せるっぽい。


次回

まずはHubotの作り方、Slackとの連携の仕方までをやってみた。

このままだと手元のMacを繋ぎっぱなしにする必要が出てしまうので、次回はどこかのクラウド上にデプロイしてみようと思う。


参考

こんな僕でも30分でSlackのbotを作れた。 - アラタナエンジニアブログ

Slack で Hubot を使えるようにする - Qiita

Hubot のインストール - Qiita

Software Design 2016年1月号|技術評論社