これまでにRaspberry Piと環境センサーから計測したデータをMeshbluのMQTTブローカーにpublishしたあとはfreeboardのダッシュボードに表示しました。今回はHubotとSlackを使ってインタラクティブなインタフェースを追加しようと思います。SlackはモダンなUIでWebhookや他のWebサービスとのインテグレーションがしやすいので便利に使えます。
HubotとSlackの設定
SlackのIntegrationページhttps://{teamdomain}.slack.com/services/new
からHubotを選びAPI Token
を作成しておきます。現在ではSlackとHubotのインテグレーションに必要な情報はこのAPI Token
だけになりとても簡単です。
botには名前を付けてアイコンを変更することができます。今回はavodado
と名付けました。
プロジェクト
今回作成したプロジェクトのディレクトリ構成です。リポジトリはこちらです。
$ cd ~/node_apps |
Dockerfile
ベースイメージはオフィシャルのio.jsを使います。Hubotの動作に必要な基本的なnpmはグルーバルにrootでインストールします。Dockerイメージの中にbotプロジェクトをYeomanで作成しておきます。コンテナのscriptsディレクトリはDockerホストのディレクトリをマウントして使います。
今回は単純にscriptsディレクトリ配下に直接CoffeeScriptのファイルを配置するだけで、external-scripts.jsonは使いません。
FROM iojs:2.3 |
docker-compose.yml
docker-compose.yml.defaultをリネームして使います。
$ mv docker-compose.yml.default docker-compose.yml |
Dockerイメージの/app
ディレクトリにはYeomanを使ってbotを作ってあります。scriptsディレクトリをDockerホストから編集できるようにマウントします。環境変数にはテスト用にHUBOT_LOG_LEVELをデバッグレベルにして、HUBOT_SLACK_TOKENにはSlackのIntegrationページで取得したHubotのAPI Tokenを記入します。
また、Hubotの動作にはRedisが必要になるのでredisサービスを追加してnpmサービスにlinkします。
npm: |
使い方
ビルドと実行
Dockerイメージをビルドします。npmサービスをビルドしてupします。
$ cd ~/node_apps/docker-hubot-slack |
scripts/hello.coffee
helloとbotに発言すると、Hi
と返答してくる単純なサンプルです。今回はこのhelloサンプルのbotスクリプトを実行してみます。
module.exports = (robot) -> |
Slackにログインしてavocado hello
と発言すると、masato: Hi
と返答してくれます。