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