Qiita Teams that are logged in
You are not logged in to any team

Log in to Qiita Team
Community
OrganizationAdvent CalendarQiitadon (β)
Service
Qiita JobsQiita ZineQiita Blog
183
Help us understand the problem. What is going on with this article?
@mochidamochiko

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

More than 5 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月号|技術評論社

183
Help us understand the problem. What is going on with this article?
Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away

Comments

No comments
Sign up for free and join this conversation.
Sign Up
If you already have a Qiita account Login
183
Help us understand the problem. What is going on with this article?