![](https://31.media.tumblr.com/b03cd2c16eaaf44ec53e464f1ae9c82d/tumblr_inline_n6yfgqz4oV1qaxsyz.png) 最近チャットツールとして[Slack](https://slack.com/)を使っているのだけど、Botを作りたくなったのでHubotで作った。Hubotはbot作れるやつ。 次のサイトを参考にして作業した。 - [はじめてのHubot - Qiita](http://qiita.com/kmdsbng/items/fdc069048b5f0d07295e) - [Slack上のボットをHubotで作ってHerokuにデプロイしてみた | nanapi TechBlog](http://nanapi.co.jp/blog/2014/06/04/slack_with_hubot/) ## 完成したやつ 先に成果を記しておくと、こういうのが完成した。 - [Makibot](http://sanographix.github.io/makibot/) ## 手元で動かす redisが必要らしいので事前にインストールして起動しておく。 $ brew install node redis $ redis-server hubotインストールする。 $ npm install -g hubot coffee-script 任意のディレクトリにHubot環境構築する。botの名前は自由に決められる。 $ hubot –create makibot $ cd makibot ローカルで動かす。 $ bin/hubot $ Hubot> 動作確認する。 Hubot> hubot ping Hubot> PONG PONG と返ってきたら成功。これは何かというと、`scripts`以下にサンプルコードとして`ping.coffee`というのが入ってて、それが実行されてる。`ping.coffee`に次のようなことが書いてある。 module.exports = (robot) -> robot.respond /PING$/i, (msg) -> msg.send “PONG” 試しにこれをちょっと変えてみると人間っぽくなる。`respond`は「呼ばれたら応える」的な意味なのだけど、`hear`にすると、「呼ばれなくても単語に反応する」ようになる。 module.exports = (robot) -> robot.hear /まき/, (msg) -> msg.send “何の用ですか” `scripts`以下には`.coffee`ファイルをいくらでも作成できるので、上記のようなスクリプトを新規作成してから、`bin/hubot`を実行すると、結果はこうなる。 Hubot> まき Hubot> 何の用ですか ## Herokuにデプロイする 手元で動いたら、Slackで実際に使えるようにする。Herokuにデプロイするのがよいということだったのでそうした。 ### 2016.10 追記 この記事は古いので、最近のherokuの設定はもう少し簡単になってるかもしれません ### 最初の設定 まずherokuの設定する必要がある。 - herokuに登録する - toolbeltをインストールする - ターミナルで`heroku login`入力してログインする このあとpushしようとしたら失敗した。調べたら、SSHキーが必要になるので作成・登録をしておく。 cd ~/.ssh ssh-keygen -t rsa -C [email protected](自分のメールアドレス) 名前は`id_rsa_heroku`とかにしておく。途中でパスフレーズを訊かれるけどEnter押すだけでいい。 次に、`~/.ssh/config `をちょっと修正する必要がある。このようにした。 Host heroku.com HostName heroku.com IdentityFile ~/.ssh/id_rsa_heroku User git ### デプロイする まずHubotにslack用のアダプターを追加する。アダプターはSlack等の各サービスとHubotを連携させるための仕組み(よく分かってない) npm install hubot-slack –save 次に`Procfile`を下記に書き換える。 web: bin/hubot –adapter slack 次にGitHubに[リポジトリを作る](https://github.com/new)。作ってから下記を実行。 $ git init $ git add –all $ git commit -m “first commit” $ git remote add origin [email protected]:sanographix/hubot-maki.git # 置き換えてください $ git push -u origin master herokuにデプロイする。 $ heroku create –stack cedar $ git push heroku master $ heroku ps:scale web=1 $ heroku addons:add rediscloud addon、HerokuにVerifyしてないと追加できない。仕方なくクレジットカードを登録する。登録した後だとうまくいく。 ## Slackとの連携設定 Slackの「Configure Integrations」でHubotを追加する。すると、オプションを設定してねって案内が出る。下記のようなトークンが表示される。 HUBOT_SLACK_TOKEN=****** HUBOT_SLACK_TEAM=hoge HUBOT_SLACK_BOTNAME=slackbot これをherokuに登録する。 heroku config:add HUBOT_SLACK_TOKEN=****** heroku config:add HUBOT_SLACK_TEAM=hoge heroku config:add HUBOT_SLACK_BOTNAME=makibot #任意の名前 heroku config:add HEROKU_URL=http://hoge.herokuapp.com #アプリのURL これでたぶんうまくいってるはずなので、Slackで呼んでみる。 ![](https://31.media.tumblr.com/71d40933ca9a482025b7115f3f616d78/tumblr_inline_n6ydxbgz981qaxsyz.png) 成功してるとHubotが返事する。bot用にユーザーの追加とかは特に必要なかった。アイコン変えると愛着が湧く。 ### 2015.03 追記:hubot-slack v3 での仕様変更 上記のは[hubot-slack](https://github.com/slackhq/hubot-slack) v2での設定だけど、v3からは微妙に仕様が変わっている。TEAMやHEROKU_URLは必要なくなって、Tokenだけで済むようになった。例えば下記のようなかんじ。 heroku config:add HUBOT_SLACK_TOKEN=xoxb-1234-5678-91011-00e4dd どうやらv3から、botも1ユーザーとして扱うようになったらしく、チャンネルに招待したりできる。 ## Script書く botの挙動をカスタマイズしてみる。たとえばこういうのを書いて`scripts/`以下に保存する。`@maki`に反応してランダムに答えるようにした。 module.exports = (robot) -> robot.hear /@maki/, (msg) -> msg.send msg.random [ “それろ〜〜〜それろ〜〜〜”, “ワイワイワイ”, “やんやんっ♡♡”, “ないやん” ] ちなみに上記みたいな応答を170パターンくらい用意したのが[これ](https://github.com/sanographix/makibot/blob/master/scripts/maki.coffee)なんだけど、今こうして眺めると思ったよりきびしい。 再度`git push heroku master`すると反映される。 ![](https://31.media.tumblr.com/0f675fc64bd5e415d84ea40ab360dd9c/tumblr_inline_n6yf09VrQE1qaxsyz.png) ### tumblrから画像取得する `makibot: lovelive`でgifアニメ見れるようにした。tumblrから画像取得するスクリプト[gifsanity.coffee](https://github.com/github/hubot-scripts/blob/master/src/scripts/gifsanity.coffee)があったので、ほとんどそれをコピペしたらいけた。[lovelivegif.tumblr.com](http://lovelivegif.tumblr.com/)からランダムで画像取得する。 tumblr = require “tumblrbot” SOURCES = { “lovelivegif.tumblr.com” } getGif = (blog, msg) -> tumblr.photos(blog).random (post) -> msg.send post.photos[0].original_size.url module.exports = (robot) -> robot.respond /lovelive/i, (msg) -> blog = msg.random Object.keys(SOURCES) getGif blog, msg これだけだとだめで、`package.json`の`“dependencies”`に下記を追加する。 “tumblrbot”: “0.1.0” そしてTumblrのAPIキーが必要なのでconfigに追加する。APIキーは[ここ](https://www.tumblr.com/oauth/apps)で取得できる。 heroku config:add HUBOT_TUMBLR_API_KEY=****** うまくいった様子。 ![](https://31.media.tumblr.com/e3125a34c16ae731d6c2aa5ff63ad7fd/tumblr_inline_n6yfdabE3K1qaxsyz.gif) Hubot、本来もっと有意義な使い方ができるようだけど、今のところ特に有意義な使い方できてない。
技術評論社
売り上げランキング: 5,203
売り上げランキング: 1,320