Help us understand the problem. What is going on with this article?

Hubot を Heroku で動かして Slack から話す

More than 5 years have passed since last update.

これは Hubot Advent Calendar 2014 の 3 日目の記事です。

また @bouzuya の Hubot 連載の第 3 回です。目次は、第 1 回の記事にあるので、そちらをどうぞ。

前回は Hubot のインストール について紹介しました。Hubot をインストールし、shell アダプターで動かして簡単な動作確認をしました。今回は Hubot を Heroku で動かし、さらに Slack から話してみましょう。

ちなみに、前回の環境の続きとして扱っているので、環境の差異があればそちらを確認してください。簡単にまとめるとこんな状態です。

  • BOT 名 : uran
  • アダプター : hubot-slack
  • 変更 : なし。generator-hubot で生成したまま。

今回の目標

今回の目標は上記のとおり、Hubot を Heroku で動かして Slack 経由で話すことです。

チャットは何でも良いのですが、比較的に導入の簡単な Slack + slack アダプター (hubot-slack) を使います。

前提条件

前提条件として以下のものを準備してください。ここでは解説しません。

  • Slack Team の管理権限 (Integration の変更権限) のある Slack アカウント
  • Heroku アカウント
  • Heroku toolbelt のインストールされた環境

Google などで検索すれば分かりますし、どれも簡単です。

Slack アダプターのインストール

これは実は既に終わっています。

前回、Yeoman ジェネレーターで Hubot を生成した時点で slack を入力していれば、何の変更も要りません。

念のため、Slack アダプターが使える状態かを確認しましょう。

$ pwd
/home/bouzuya/uran

$ npm list hubot-slack
uran@0.0.0 /home/bouzuya/uran
└── hubot-slack@2.2.0 

package.json を開いて、dependencies を確認するのと同じことです。

もし、前回ジェネレーターで campfire のままにしていた場合などは、別途インストールする必要があります。以下のコマンドでインストールできます。また、これは必ずあなたの Hubot のディレクトリで実行してください。

$ npm install --save hubot-slack
hubot-slack@2.2.0 node_modules/hubot-slack

$ npm list hubot-slack
uran@0.0.0 /home/bouzuya/uran
└── hubot-slack@2.2.0 

ちなみに、このあたりは Node.js に慣れていれば、なんてことはない npm パッケージのインストールです。

最後に Heroku デプロイ時に使われるスクリプトをチェックしましょう。

$ cat Procfile
web: bin/hubot -a slack -n uran

a オプションのあとがアダプター名なので、slack になっていなければ直しておきましょう。ちなみに n オプションは BOT 名です。ジェネレーターで指定したものはこういった箇所に反映されています。

これで slack アダプターのインストールは完了です。

Heroku にデプロイする

説明が面倒になので、コマンド並べます。

$ git init
Initialized empty Git repository in /home/bouzuya/uran/.git/

$ git add -A

$ git commit -m 'initial commit'
[master (root-commit) 4d258e3] initial commit
 10 files changed, 329 insertions(+)
 create mode 100644 .editorconfig
 create mode 100644 .gitignore
 create mode 100644 Procfile
 create mode 100644 README.md
 create mode 100755 bin/hubot
 create mode 100644 bin/hubot.cmd
 create mode 100644 external-scripts.json
 create mode 100644 hubot-scripts.json
 create mode 100644 package.json
 create mode 100644 scripts/example.coffee

$ heroku create
Creating damp-atoll-2068... done, stack is cedar-14
https://damp-atoll-2068.herokuapp.com/ | git@heroku.com:damp-atoll-2068.git
Git remote heroku added

$ git push heroku master

...()...

Heroku の解説をしたいわけでもないので、とりあえず git リポジトリつくって heroku create して git push って感じで。

Heroku と Slack との間での設定

Slack の Hubot Integration を追加

まずは Slack のメニューから Configure Integrations を選びます。

configure-integrations.png

次に、Add Hubot Integration する、と。

add-hubot-integration.png

Heroku に設定を追加

Slack の Hubot Integration ページにはこんな感じでトークンなどの設定値が表示されます。

setup-instructions.png

今回は BOT 名が uran なので HUBOT_SLACK_BOTNAMEuran にしましょう。

で、その設定値を heroku config:set します。

$ heroku config:set \
> HUBOT_SLACK_TOKEN=go7CWIlD19muTtqBflqnw3Mk \
> HUBOT_SLACK_TEAM=bouzuya \
> HUBOT_SLACK_BOTNAME=uran
Setting config vars and restarting damp-atoll-2068... done, v4
HUBOT_SLACK_BOTNAME: uran
HUBOT_SLACK_TEAM:    bouzuya
HUBOT_SLACK_TOKEN:   go7CWIlD19muTtqBflqnw3Mk

なんてことはない heroku の config (環境変数設定) ですね。

Slack の Hubot Integration を更新

最後に Slack 側の Hubot URL をアプリケーションの URL に更新します。分からなければ heroku open あたりで開くといいんじゃないかな。

save-hubot-integration.png

設定項目を見れば分かる通り、hubot-slack は web hook を使って実装されているので、ローカルから使うのは難しそうですね。private group の問題なんかもあって、XMPP アダプターを使っている人も多いそうで。とりあえず、お手軽な方法で行きましょう。

Slack から話す

じゃあ、試してみましょう。

hubot image me <query>

指定したキーワードの画像を検索・表示できます。(面倒なので hubot img と省略してます)

hubot-img.png

shell アダプターでは画像 URL の展開ができなかったので、画像系 Hubot スクリプトを試しています。新鮮ですね。

hubot pug me

パグ画像を表示できます。

hubot-pug-me.png

hubot pug bomb というコマンドも……

hubot animate me <query>

指定したキーワードのアニメーション画像を検索・表示できます。スクリーンショットだと伝わりづらいですが、本物は動いています。

hubot-animate-me.png

まとめ

無事、 Hubot を Slack に導入できました。

次は独自スクリプトを追加していきたいところですが、すでに分量が……。今日はこのへんで。

最後に

あー、疲れた。というか、このぬるい Hubot 導入記事に飽きてます。最初から。このへんの導入記事はそこら中にあふれているので、おそらく需要がないでしょうね。でも、もうちょっとだけ (残り 22 日?) 続くんですよ。

さて、次回から、やっとスクリプトを書いていきます。

流れとしては、何種類か (何日かかけて) スクリプトの書きかたに触れて、それから Tips 紹介しようかなあ、と。テストとかそのへんのトピックに触れるのも良いかもしれない。

あとは、この Hubot Advent Calendar 見た人が、Hubot スクリプトつくってくれたら嬉しいなあ、とか妄想してる。

では、また明日。

bouzuya
ぼく、ぼうずや。なさけはひとのためならず。たのしいはせいぎ。
http://bouzuya.net/
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.
If you already have a Qiita account
Why do not you register as a user and use Qiita more conveniently?
You need to log in to use this function. Qiita can be used more conveniently after logging in.
You seem to be reading articles frequently this month. Qiita can be used more conveniently after logging in.
  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
ユーザーは見つかりませんでした