はじめに
最近コレを読んで、無性にChatBotを作りたくなった。
Software Design 2016年1月号|技術評論社
Slackでらくらく工数管理 « サーバーワークス エンジニアブログ
ので、手始めにSlackのbot作りをしてみようと思う。
botの種類
おもむろにslack bot
でググってみたところ、hubotなるものが一般的らしい。
ほかにもWebHooksを使うものもあるようだが、次のステップにしようと思う。
hubotの追加
ここからIntegrationするAppを選べる。
App Directory | Slack
hubot
で検索するとAppが出てくるので、導入するチームを選ぶ。
Hubot | Slack
APIトークンやらBotの名前やらいろいろ設定できる画面に飛ぶので、適当に名前をつけてアイコンを設定すると、とりあえずbotユーザが追加された。
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トークンを確認し、環境変数にセットする。
$ 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をやりあってみる。
ちゃんと応答してくれた!
DMの場合はコマンドを投げるだけで良いみたい。
Channel内だとどうなるのか。
試しにHubotと二人のChannelを作り、コマンドを投げてみた。
コマンド単体では応答してくれないようだ。
mentionなり、Hubotの名前を最初につけることで呼び出せるっぽい。
次回
まずはHubotの作り方、Slackとの連携の仕方までをやってみた。
このままだと手元のMacを繋ぎっぱなしにする必要が出てしまうので、次回はどこかのクラウド上にデプロイしてみようと思う。
参考
こんな僕でも30分でSlackのbotを作れた。 - アラタナエンジニアブログ
Slack で Hubot を使えるようにする - Qiita
Hubot のインストール - Qiita
Software Design 2016年1月号|技術評論社