BotkitとNode.jsでSlackBotを作ってみた

はじめまして。FOX HOUNDでエンジニアをしている古屋と申します。
業務では、主にPHPやJavascript等に触れることが多く、
この4月からは新しい技術の習得や業務に挑戦しているまだまだ未熟なエンジニアです。
今回が記事初投稿になりますので軽い気持ちで読んでいただけたらと思います。
いきなりですが、みなさんSlackは活用されていますか?
ビジネス向けの機能に特化したチャットツールですが、
様々な現場で使用されているので
今や手放すことができないという方も多いのでは無いでしょうか。
Slackの魅力はメッセージの手軽さやチャンネルの作成等にみられる柔軟性にあると思いますが、
もう一つ大きな魅了としてBotによる自動化・効率化が挙げられると思います。
兼ねてから興味のあったSlackBot。
今回、業務でNode.jsを使用するということもあって
Node.jsをインストールするついでにBotkitをインストールしてSlackBotを作成してみようと思います!!
Botkitとは
一言でいうと「オープンソースのBotフレームワーク」で、Node.jsで動いています。
様々なプラットフォームで使用することができ、
特にSlackに対しての柔軟性が高く簡単にSlackBotを作成することができます。
BotフレームワークとしてはBotkitの他にもHUBOTなどがあるようですが、
今回はSlackがサポートもしている Botkitを使用します。
環境準備
開発環境
macOS High Sierra 10.13.3
1. nodebrewのインストール
まず、Homebrewでnodebrewをインストールします。
brew install nodebrew
nodebrewのインストールが完了したらnodebrewのパスを通します。
vi ~/.bash_profile
以下を記述して上書き保存をします。
export PATH=$HOME/.nodebrew/current/bin:$PATH
追記した設定を反映させるためにターミナルをリフレッシュします。
source ~/.bash_profile
以下のコマンドを実行してみてください。
nodebrew help
以下のようにnodebrewのヘルプが表示されれば問題なくインストールが完了しています。
nodebrew 1.0.0
Usage:
nodebrew help Show this message
nodebrew install <version> Download and install <version> (from binary)
nodebrew compile <version> Download and install <version> (from source)
nodebrew install-binary <version> Alias of `install` (For backword compatibility)
nodebrew uninstall <version> Uninstall <version>
nodebrew use <version> Use <version>
nodebrew list List installed versions
nodebrew ls Alias for `list`
nodebrew ls-remote List remote versions
nodebrew ls-all List remote and installed versions
nodebrew alias <key> <value> Set alias
nodebrew unalias <key> Remove alias
nodebrew clean <version> | all Remove source file
nodebrew selfupdate Update nodebrew
nodebrew migrate-package <version> Install global NPM packages contained in <version> to current version
nodebrew exec <version> -- <command> Execute <command> using specified <version>
Example:
# install
nodebrew install v8.9.4
# use a specific version number
nodebrew use v8.9.4
2. Node.jsのインストール
Node.jsをインストールします。
今回はv8系をインストールしたいので以下を実行します。
nodebrew install-binary v8.0.0
もし、他のバージョンのインストールが必要であれば、以下で現在のバージョン一覧を見ることができます。
nodebrew ls
また、インストールを実行した際にエラーが出る場合があるようです(実際自分の環境でもエラーになりました)。
Fetching: https://nodejs.org/dist/v8.0.0/node-v8.0.0-darwin-x64.tar.gz
Warning: Failed to create the file
Warning: /Users/username/.nodebrew/src/v8.0.0/node-v8.0.0-darwin-x64.tar.g
Warning: z: No such file or directory
0.0%
curl: (23) Failed writing body (0 != 1019)
download failed: https://nodejs.org/dist/v8.0.0/node-v8.0.0-darwin-x64.tar.gz
ディレクトリが存在しないと怒られているので、以下のようにディレクトリを作成します。
mkdir -p ~/.nodebrew/src
もう一度インストールを実行して以下ように出力されればOKです!
Installed successfully
次に、使用するNode.jsのバージョンを教えてあげないといけないので、
以下のように実行します。
nodebrew use v8.0.0
設定できたか確認します。
nodebrew list
currentに使用したいバージョンが設定されていれば問題ありません。
v8.0.0
current: v8.0.0
そして以下のコマンドが問題なく実行できればNode.jsのインストールは完了です。
node -v
Botkitをインストールする
続いてBotkitをインストールします。
以下のようにGitクローンをします。
git clone https://github.com/howdyai/botkit.git
問題なくインストールができたら実際に作業をしたいディレクトリを作成してnpmの初期化を行います。
mkdir samplebot
cd samplebot
npm init
これでBotlkit本体のインストールの準備ができましたので、
実際にBotkitをインストールします。
(今回はSlack Botを定期的に動作させることを見越してcronも合わせてインストールします。)
npm install --save botkit cron
エラーが特に出なければインストールは成功です!
続いて実行ファイルを作成していきましょう。
touch index.js
今回は以下のように作成しました。
if (!process.env.token) {
console.log('Error: Specify token in environment.');
process.exit(1);
}
var Botkit = require('botkit');
var controller = Botkit.slackbot({
debug: false
});
var bot = controller.spawn({
token: process.env.token
}).startRTM(function(err, bot, payload) {
if (err) {
console.log('Error: Could not connect to Slack');
process.exit(1);
}
controller.hears(['おつかれ', 'お疲れ', '疲れた'], ['ambient'], function(bot, message) {
bot.reply(message, 'お疲れ様です!頑張ったね!:beer:');
});
});
まずは簡単に、特定の文言を誰かが投稿した際に返信をする機能を作成しました。
チャンネルメンバーが
「おつかれ」
「お疲れ」
「疲れた」
と投稿した際に労いメッセージを送る心優しいBotくんです。
最後にこのBotをローカル環境で起動してみましょう!!
SlackBotの起動
SlackのBot管理ページから作成するSlack Botの設定とトークンを取得します。
Slackのカスタマイズ->メニューのApp管理->「App ディレクトリを参照する」
Botsと検索するとBotsというアプリが出てくるので追加します。
Botの名前を設定し、
そして次の画面に表示されるAPIトークンをコピーしてください。
(とても重要な情報なのでこのトークンの扱いには注意が必要です。)
取得したトークンを設定します。(○はご自身の取得したトークンに置き換えてください)
token=○○○○○○○○○
そして作成したファイルを実行してみましょう!
node index.js
やったー!
testbot-kunがオンラインになりました!
続いてtestbot-kunに話しかけてみます。
任意のチャンネルにBotを招待します。
そして、
や・・・優しい・・・
何気ないひとことに人は癒されるものですね。
という訳で今回、BotkitとNode.jsで簡単なSlack Botを作成しローカル環境で動かすことができました。
次回からはもう少し高度な機能を持ったBotを作成し、常時稼働させることを目標に続けていきたいと思います。
それでは最後まで読んでいただきありがとうございました。
参考: