Quadrophenia

R社の新人エンジニア数人が更新しているブログです

【Hubot】HubotとHipChatでお手軽ChatOpsを作る

今回はHubotとHipChatで簡単なChatOpsを作ってみます。
HubotはGitHub社が開発しているbotの開発・実行フレームワークです。
ChatOpsというのは、SlackやHipChatみたいなチャット系サービスから特定のアカウントに向けて特定の言葉を送るとなんらかの処理をやってくれる仕組みみたいなやつです。
使い方としては色々ありそうですが、スマホからメッセージアプリでデプロイできちゃうみたいなのは便利そうですよね。
今回は、HipChatで送ったメッセージに対して決まった処理を返すということをやってみます。

準備する

Macのローカル上で開発していきます。
Hubotはnode.jsで動くので、インストールします。

brew install node

homebrewをインストールしていない場合はこちら
Homebrew — OS X用パッケージマネージャー
からしてください。
次に、Hubotに命令を書くためのcofeescriptをインストールします。

npm install -g yo generator-hubot

オプションの -g はグローバルインストールを指していて、インストールと同時にパスを通してくれるらしいです。
yoはプロジェクトのテンプレートを作ってくれるツールらしいです。
npmコマンドがきかない場合は、パスを通してあげましょう。

vim /.bash_profile
export PATH=$HOME/local/node/bin:$PATH
source /.bash_profile

プロジェクト作成

適当な場所でプロジェクトを作成します。

mkdir mybot
cd mybot

そして、yoを実行します。

yo hubot

すると、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
========================================================================== Yes
                     _____________________________
                    /                             \
   //\              |      Extracting input for    |
  ////\    _____    |   self-replication process   |
 //////\  /_____\   \                             /
 ======= |[^_/\_]|   /----------------------------
  |   | _|___@@__|__
  +===+/  ///     \_\
   | |_\ /// HUBOT/\\
   |___/\//      /  \\
         \      /   +---+
          \____/    |   |
           | //|    +===+
            \//      |xx|

? Owner: keimaejima
? Bot name: mybot
? Description: A simple helpful robot for your Company
? Bot adapter: (campfire) hipchat
? Bot adapter: hipchat
   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|

それぞれ次のような意味ですので、適当に入力していきます。

? Owner: (オーナーの名前)
? Bot name: (ボットの名前)
? Description: (ボットの説明)
? Bot adapter: (使うツール、今回はHipChat)

これでインストールが完了するので、試しにHubotを起動して話しかけてみます。

bin/hubot —mybot
mybot> mybot ping
PONG

うまくいきました!

HipChatと連動させる

さて、HipChatと連動させていきます。
HipChat本体はAdapterというものを通してHubotとやりとりをするので、HipChatのアダプターをインストールします。

npm install hubot-hipchat —save

インストールが終わったら、bin/hubotにHipChatの情報を書き込みます。
(事前にボット用アカウントは作っておいてください。)

vim bin/hubot
#!/bin/sh

set -e

npm install
export PATH="node_modules/.bin:node_modules/hubot/node_modules/.bin:$PATH"

export HUBOT_HIPCHAT_JID="Hubot 用アカウントのJabber ID"
export HUBOT_HIPCHAT_PASSWORD="Hubot 用アカウントのパスワード"
export HUBOT_HIPCHAT_ROOMS="ルームの Jabber ID"
export HUBOT_LOG_LEVEL="debug"

exec node_modules/.bin/hubot "$@"

Jadder IDはHipChatの「Edit Profile」から確認できます。
hubotの振る舞いについては、script以下のファイルに記述していきます。
hubot起動時に拡張子.coffeeのファイルをすべて読み込んでくれるので、ファイルの数と名前はなんでも良いみたいです。

module.exports = (robot) ->

  robot.respond /ザワールド/i, (msg) ->
    msg.send "時よ止まれ"

  robot.respond /てめえは俺を/i, (msg) ->
    msg.send "怒らせた"

もう一度hubotを起動します。

bin/hubot -a hipchat

エラーなく起動できたら、HipChatから話しかけてみます。

f:id:keimaejima:20150721174053p:plain

うまくいきました!
今回はシンプルな応答式でしたが、サーバーでコマンドを実行する処理を書いたりしたら色々と使えそうですよね。
引き続き勉強したいと思います。

以上っす!