本記事ではSlackbotをJavaScript(Node.js)で作成する方法について解説します。
◆Slackbotとは?
Slackbotはインターネット上の操作を自動実行するためのプログラムです。
Slackbotの場合はSlackからBotに指示をすることでプログラムを自動実行できます。
ユーザーと同じように会話ができる他、特定の言葉をSlackに入力することでスクリプトの実行を始めとした様々な処理を行うことができるようになります。

【Node.js】SlackbotをBotkitで作成する

JavaScript(Node.js)でSlackbotを導入する方法はいくつかありますが、今回はBotkitのパッケージを使用して導入する方法を紹介します。

Botkitパッケージのインストール

npmコマンドでBotkitパッケージをインストールします。

$ npm install botkit

Slackbot用のAPIトークンを取得する

SlackよりBotに使うためのAPIトークンを取得します。
取得手順は以下の通り。
1.ワークスペースのAPPフォルダに移動します。
https://xxxxxxxxx.slack.com/apps
2.サイドメニューの「カテゴリ」から「Bot関連を選択」します。
3.「Hubot」を選択します。
4.「設定の追加」ボタンをクリックします。
5.名前を入力して「Hubotインテグレーションの追加」を押します。
6.「API トークン」に書かれている内容をコピーします。
◆今回作成したBot:ターコイズくん

画像はSlackの「ghost」を使用しています。

【Node.js】SlackbotをBotkitの実装例と実行例

パッケージにsampleファイル「slack_bot.js」があるのでこちらをコピーして必要な箇所を修正します。
node_modules
┗botkit
__┗examples
____┗slack_bot.js
BotkitのパスとAPIトークンの書き換えが必要です。
◆記述例

// APIトークンを指定する
var api_token = 'xxxxxxxxxxxxxxxx'
// OSの環境変数に定義してあれば「process.env.[環境変数名]」で読み込み可能
// var api_token = process.env.BOT_API_TOKEN
if (!api_token) {
    console.log('Error: Specify token in environment');
    process.exit(1);
}
// ライブラリのパスは修正が必要
var Botkit = require('botkit/lib/Botkit.js');
var os = require('os');
var controller = Botkit.slackbot({
    debug: true,
});
// APIトークンを読み込んで起動、応答を受け付ける状態になる
var bot = controller.spawn({
    token: api_token
}).startRTM();
// これ以降のコードはBotの応答に関する記述
// 応答の追加 「こんにちは」に対して「こんにちは」を返す
controller.hears(['こんにちは'], 'direct_message,direct_mention,mention', function(bot, message) {
    controller.storage.users.get(message.user, function(err, user) {
        bot.reply(message, 'こんにちは!');
    });
});

◆起動方法
nodeコマンドで起動します。

node slack_bot.js

◆実行結果
Botkitの実行例
応答内容は「controller.hears()」に記述します。
第一引数は反応するメッセージです。
[‘こんにちは’, ‘Hello’] のようにカンマで区切ることで複数のメッセージを指定できます。
第二引数はメッセージに対する応答方法です。
メンション(@でターゲットを指定すること)がある場合に応答、メンションがなくても応答、ダイレクトメッセージの時に応答など細かく指定することができます。
カンマ区切りで複数指定可能です。
‘direct_message,direct_mention,mention’
応答方法の種類は以下の通り。

direct_message:ダイレクトメッセージの場合に応答します
direct_mention,mention:メンションされた場合に応答します
ambient:メンションがない場合に応答します

◆「direct_mention」と「mention」の違い
「direct_mention」は先頭でメンションされた場合のみ応答します。
対して「mention」はメッセージ中のどこか(先頭以外)でメンションされていれば応答します。
「direct_mention」の場合
Botkitの実行例
先頭でメンションした場合のみ応答します。
「mention」の場合
mentionの実行例
先頭以外でメンションした場合のみ応答します。
全てのメンションに対して応答したい場合は「direct_mention」と「mention」の両方を指定しましょう。
◆応答方法
応答は「controller.storage.users.get()」の中に記述します。
「bot.reply()」の中にメッセージを記述します。

controller.hears(['こんにちは'], 'direct_message,direct_mention,mention', function(bot, message) {
    controller.storage.users.get(message.user, function(err, user) {
        bot.reply(message, 'こんにちは!');
    });
});

ちょっと長いので以下のように関数化しておくと良いでしょう。

controller.hears(['こんにちは'], 'mention, direct_mention', function(bot, message) {
    bot_reply(message, 'こんにちは')
});
function bot_reply(message, text) {
    controller.storage.users.get(message.user, function(err, user) {
        bot.reply(message, text);
    });
}

以上、JavaScriptでSlackbotを作成する手順についてでした。
今回は挨拶を返すだけでしたが、Slackbotを活用することでスクリプトの実行やファイルの内容を読み込んで表示するなど様々な処理が可能です。
是非、試してみてください。