hero_picture
Cover Image for HubotでSlackのボットを作成する

HubotでSlackのボットを作成する

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

上記のコマンドでインストールしたモジュールの情報は以下のとおりになっています。

モジュール名説明
hubotHubot本体。hubotコマンドが使用できるようになる。
hubot-slackHubotのSlack用アダプタ。HubotをSlackに対応させるために使用する。
yoひな形生成ツール。
generator-hubotyoでHubotプロジェクトのひな形を生成するために使用する。
coffee-scriptCoffeeScript。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ディレクトリ下にスクリプトを追加していけば、

ボットの機能を増やしていけます。

慣れてくると気軽に開発できるので、ボットづくりが捗ります。

色々連携させて効率化していきましょう。