kakts-log

programming について調べたことを整理していきます

slackとhubotの連携

最近チャットツールとしてslackを使い始めました。業務以外にプライベートでも使っていて、自分のチャンネル上でbotをつかって外部サービスと連携できるようにしたかったので、hubotを導入しました。
今回はhubot と herokuを利用したbotの作成方法を解説します。

hubotとは

hubot
Github.Inc が作ったbot開発ツール。

heroku等のサーバにデプロイするのが容易でタスクの自動化ができる。
アダプターを変えることでslackやhipchatなど様々なツールに対応させることができる

hubotのセットアップ

nodeとnpmがインストールされている前提で話を進めていきます。

hubotの起動に必要なnodeパッケージをインストールしていきます
これで必要なパッケージのインストールができました。
新規にhubotを作成します



ここでhubotスクリプト用のディレクトリを作成し、そこで新規hubot作成します。 こんなかんじでAAがでてきて、対話式にowner botname description adapterなどを聞かれるので回答していくとそれに応じたファイルが作成されます。
今回はslackとhubotの連携をさせたいので、adapterの項目はslackと設定しましょう。

実行後、カレントディレクトリ以下にファイル、ディレクトリができます。

hubotを起動させてみる


一通りセットアップが終わったので、実際にローカル環境でhubotを起動させてみましょう。



作成したディレクトリの bin/hubotが起動スクリプトになり、そこから
script/以下のファイルにある、.jsまたは.coffee が拡張子のファイルを読み出しています。

scripts/example.coffee があらかじめ作成されています。
そのファイルに、hubotに対してping とメッセージを送ったら pongと返してくれるようなコードを作成してみたいと思います。

こんな感じで関数を作成してexportしてあげれば、hubotが行うタスクを作成する事が出来ます。
ここではslackのチャンネルに投稿されたコメントをチェックし、
ping」と書かれていたら「pong」と返すようにしています。
ここで実際に上記スクリプトが動くか確認するために、hubotを起動させて確認してみましょう

ここでpingと打ったらpongと返ってきたので、スクリプトが正常に動作しているのを確認できました。

herokuにhubotアプリをデプロイし、起動させる

ここで作成したhubotをslackと連携させるために、herokuにhubotスクリプトをデプロイさせます。(herokuの無料インスタンスを使う場合でもクレジットカードの登録が必要です)
mac端末からherokuへのデプロイ方法は以下のエントリが詳しく書かれていますので、こちらを参考にしてください。
Heroku登録〜Macで環境整備〜お試しWebアプリを作るまで

herokuへデプロイできる環境が整った前提でここから話を進めます。

こんな感じで作成したhubotのディレクトリをherokuへデプロイできました。
しかしこの項ではherokuへデプロイをしてみただけで、実際にslackへの連携設定等はまだ行っていないため、動かない状態です。
次項でデプロイしたアプリに修正を加え、slackとアプリとの連携が出来るようにしていきます。

slackとhubotを連携させる

エントリの前半で、hubotはアダプターを変える事で様々なチャットツールに対応させることが出来ると説明しました。

ここではhubotをslackに対応させるため、まずはアダプターの設定を行っていきます。

まずはhubotのslackアダプター(2016年1月現在でバージョン3系)をインストールし、hubotの起動スクリプトを変更します。

次に、slack連携のための必要なトークンをslackのページから入手しましょう
slackのチャンネル設定のところから「Add an app or custom integration」を選択し、
hubot アプリを検索し、configureでhubotの設定が出来ます。
https://slack.com/apps/A0F7XDU93-hubot
ここで、hubotの設定が出来たら、設定ページにて以下のようなトークンが表示されるので、これを設定していきます
HUBOT_SLACK_TOKEN=????_????????????

2016年1月現在、hubot-slackのバージョン3系を使っていて、基本的にはHUBOT_SLACK_TOKEの設定のみで大丈夫です。
slack と hubot連携に関するネット上の記事だと、バージョン2系ではHUBOT_SLACK_TERMとかも設定すると書いてあるので、もし動かない場合は、使っているhubot-slackのバージョンを確認してください。
https://github.com/slackhq/hubot-slack

これでhubotとslackの連携設定も反映してherokuに修正をデプロイしたので
slackとhubot連携できるようになりました。


私は最後の最後にここの部分でいくらやってもhubotが返答してくれない状況になっていたのですが、チャンネルに作成したhubotアカウントをinviteしていなかったためでしたw

hubot-slackアダプタのリポジトリの説明にしっかり書いてありました。
ドキュメントはちゃんと読みましょう
https://github.com/slackhq/hubot-slack
Keep in mind that your bot needs to be joined to your specific channels by the /invite slash command.