Hubotとは
Hubotは、Github社が開発したBot作成フレームワークです。 今回は、Hubotを使用してSlackボットを作成する方法をご紹介します。
Slack https://slack.com/ Hubot https://github.com/github/hubot
HubotはNode.jsのモジュールですので、Node.jsのインストールから始めます。
Node.jsのインストール
複数のNode.jsを管理するnvmコマンド経由で、Node.jsをインストールします。
nvmコマンドのインストール。
git clone git://github.com/creationix/nvm.git ~/.nvm
nvmのコマンドを使えるように、.bashrcにスクリプトを追記します。
if [[ -s ~/.nvm/nvm.sh ]]; then source ~/.nvm/nvm.sh fi
以上で、nvmコマンドが使えるようになります。
次にNode.jsをインストールします。 今回の例では、バージョン0.11.13をインストールします。
npm install 0.11.13 npm use v0.11.13
以上で、Node.js関連のコマンドが使えるようになります。
nvmの他の機能が気になる方は、 nvm単体で実行するとヘルプが表示されるので、そちらをご参照ください。
Hubotのインストール
npmコマンドでHubotをインストールします。 また、必要なモジュールもインストールします。
npm install -g hubot hubot-slack yo generator-hubot coffee-script
上記のコマンドでインストールしたモジュールの情報は以下のとおりになっています。
モジュール名 | 説明 |
---|---|
hubot | Hubot本体。hubotコマンドが使用できるようになる。 |
hubot-slack | HubotのSlack用アダプタ。HubotをSlackに対応させるために使用する。 |
yo | ひな形生成ツール。 |
generator-hubot | yoでHubotプロジェクトのひな形を生成するために使用する。 |
coffee-script | CoffeeScript。HubotのスクリプトはCoffeeScriptで記述する。 |
HubotでHello World
「Hello」と呼びかけたら「World」と返すボットを作成します。
まずはHubotのひな形作成します。
$ mkdir hellobot $ cd hellobot $ yo hubot _____________________________ / \ //\ | Extracting input for | ////\ _____ | self-replication process | //////\ /_____\ \ / ======= |[^_/\_]| /---------------------------- | | _|___@@__|__ +===+/ /// \_\ | |_\ /// HUBOT/\\ |___/\// / \\ \ / +---+ \____/ | | | //| +===+ \// |xx| ? Owner: Uchiyama ? Bot name: hellobot ? Description: (A simple helpful robot for your Company) ? Bot adapter: (campfire) slack ? Bot adapter: slack
ひな形ができたら、scriptsディレクトリ下にスクリプトを作成します。 今回はscripts/helloworld.coffeeとしました。
# scripts/helloworld.coffee module.exports = (robot) -> robot.respond /HELLO$/i, (msg) -> msg.send "world"
ざっくり説明すると、 「robot.respond /HELLO$/i」で、正規表現で反応する文字列をマッチさせ、 「msg.send "world"」で、レスポンスを返しています。
チャットからのメッセージを受信したり返信したりする処理は、Hubot側で行ってくれています。
Hubotのコンソールを立ち上げて、このスクリプトの動作確認をしてみます。 以下のコマンドを実行します。
$ bin/hubot
Heroku関連の環境変数の設定に関するエラーが出てきますが、 現状は問題ないのでエンターを押して、コマンドプロンプトを復活させます。
以下のようにHubotにメッセージを送信すると、メッセージが返ってきます。
Hubot> Hubot hello Hubot> world! Hubot>
このように、実際にSlack上で実行する前に、コンソールで動作確認することができます。
Slackと連携するBotを作成
SlackのIntegrationページでHubotと連携するための設定を行います。
「Hubot URL」は、Hubot設置予定のURLを設定します。
あとで参照するので、「HUBOT_SLACK_TOKEN」などの環境変数は覚えておきます。
今回のSlackボットは、Slack上で挨拶された場合に挨拶を返す仕様にします。 コードは以下のようになります。
# scripts/slack-hello.coffee module.exports = (robot) -> robot.hear /@hubot Hello/i, (msg) -> username = msg.message.user.name msg.send "Hello, " + username
「robot.hear /@hubot Hello/i, (msg) ->」で、反応するメッセージを検出し、 「username = msg.message.user.name」で、ユーザー名を取得し、 「msg.send "Hello, " + username」で、レスポンスしています。
このスクリプトをコンソール上で動作確認してみます。
$ bin/hubot Hubot> hubot @hubot hello Hubot> Hello, Shell Hubot>
ということで、挨拶を返してくれました。
Slackと連携するBotを実行
本番でSlackと連携する場合は、実行時のオプション指定などが必要になってきます。 結論から言いますと、コマンドは以下のようになります。
HUBOT_SLACK_TOKEN=xxxxxxxxxxxxxxx \ HUBOT_SLACK_TEAM=xxxx \ HUBOT_SLACK_BOTNAME=hubot \ bin/hubot --adapter slack
「HUBOT_SLACK_TOKEN」「HUBOT_SLACK_TEAM」「HUBOT_SLACK_BOTNAME」といった環境変数を設定しています。 これらはSlackのIntegration画面にありましたね。
また、--adapterオプションでアダプタ(slack)を指定しています。
これで、Hubotが立ち上がったと思います。 この状態で、Slack上に「@hubot hello」と打ち込めば返信が返ってくるはずです。
まとめ
Hubotでボットを作成する方法をご紹介しました。 scriptsディレクトリ下にスクリプトを追加していけば、 ボットの機能を増やしていけます。 慣れてくると気軽に開発できるので、ボットづくりが捗ります。 色々連携させて効率化していきましょう。