はじめに
大学の部活で活用しているslackに誰にも望まれていないのにbotを導入しました。
思ったよりbotを作るのが楽しくてbot作りにはまってしまいました。botに没頭してしまったわけです。botに没頭。
……まあ、楽しいことは共有せなアカンということで、部員の他の人にもbotを弄ってもらえるように僕のノウハウをqiitaに投稿したわけです。
導入の際に参考にしたサイト
初心者がHubotを使ってHeroku上で動くSlack bot作ってみた(導入編)
素晴らしく丁寧に導入の仕方を載せています。ありがたいです・・・
導入
偉大な先人の方々がたくさんいるので導入だけでしたら情報に困らないと思います。
今回はローカルサーバーでの実装を目指します。
インストール
とりあえず、これだけはやっておけと言うのを羅列します。
nodeのインストール
Homebrewというツールを使ってnode.jsをインストールします。
そもそもHomebrewがわからないという人はGoogle大先生に聞いていただけると幸いです。
$ brew install node
これでインストールOKです。
$ node -v
本当に入っているのか不安ならこれで確認しましょう。
hubotとCoffeeScriptをインストール
node.jsをインストールしたらnpm
とかいうツールが使えるようになっています。
いろんなパッケージを簡単に入れることできるのがnode.jsの素晴らしいところですね。
今回もその恩恵にあやかってhubot
そのものとコードを記述する際に必要となる言語coffee-script
をインストールしましょう。javascriptでも記述できるらしいけど。
$ npm install -g hubot coffee-script
これでOKです。hubot
とcoffee-script
同時にインストールしました。
不安ならバージョン確認して存在を確認しましょう。
$ hubot -v
ちなみに -g
というオプションはグローバルインストールをするよという意味で、npmの場所にパッケージをインストールするらしいです。
グローバルがあるということはローカルもあると言うことで、このオプションをつけなければカレントディレクトリ内のnode_modules内にインストールされます。
yoとgenerator-hubotをインストール
どんどん行きましょう。
次はyo
とgenerator-hubot
をインストールをします。これは初めてhubotを作るときに必要なものです。
$ npm install -g yo generator-hubot
hubot-slackをインストール
hubotをslackに対応させるアダプタ。
$ npm install -g hubot-slack
超単純なbotを作ろう
ひとまず、これでインストール地獄は終わりです。お疲れ様でした。
これであなたもbotが作れるようになっています。
じゃあ作ってみるぞ、ということで作りましょー
#bot用のディレクトリを作る
$ mkdir testbot
$ cd testbot
#botをセットアップする
$ yo hubot
最後のコマンドを打つとこんな感じのやつが出てくると思います。
_____________________________
/ \
//\ | Extracting input for |
////\ _____ | self-replication process |
//////\ /_____\ \ /
======= |[^_/\_]| /----------------------------
| | _|___@@__|__
+===+/ /// \_\
| |_\ /// HUBOT/\\
|___/\// / \\
\ / +---+
\____/ | |
| //| +===+
\// |xx|
こいつがhubot作ってくれる君でいろんな質問してきます。
質問に適切な感じに答えてあげてください。
注意として? Bot adapter:
という質問にはslack
と答えてください。
全ての質問に答えると色々作られたかと思います。
これはbotのひな形で、実際の処理はまだ書かれていません。
なのでbotにHelloと尋ねたらHelloWorldと返すだけの簡単な処理を追加したいと思います。
scripts
というフォルダができるていると思いますので、そこにこのコードを追加します。
module.exports = (robot) ->
robot.respond /Hello/i, (msg) ->
msg.send "HelloWorld"
これで処理の追加はOKです。
実際に動いているのかテストしてみましょう。
$ bin/hubot
これでbotの起動ができます。
現状では色々エラーがでると思いますが、問題はないのでエンターを押して進めましょう。
そうすると、
testbot>
入力待ちの状態になるのでtestbot Hello
と入力するとHelloworld
と返してくれます。
testbot> testbot Hello
testbot> HelloWorld
入力画面から抜け出すにはexit
でOKです。
これでひとまず、超単純なbotの完成ですね。
エラー消し
エラーが気になるという人もいると思うのでエラーを消し方を書きます。強引だけど
エラーを読むとこう書かれています。
Your hubot-scripts.json is empty, so you just need to remove it.
hubot-scripts.jsonが空なので消してくださいということみたいですね。
hubot-scripts.json自体を消すことで解決しました。
次にERROR hubot-heroku-alive included, but missing HUBOT_HEROKU_KEEPALIVE_URL.
というエラーがあると思います。
これは環境変数が設定されていないから発生するエラーです。
external-scripts.jsonというファイル内の"hubot-heroku-keepalive",
という記述を消すことで解決しました。これはエラーを出していた機能そのものを削ったということです。強引ですね
slackと連携
hubotを作る
ボットを作るためには、自分の代わりにチャットをしてくれる実態が必要となります。
Integrationにhubotを追加して、
ここのボタンを押すとボットの実態を作ることができます。
次に作ったボットと実態を繋げたいと思います。
この部分をコピーします。
これはトークンと言われ、ボットの身分証明証みたいなものです。この数英の羅列をパスワードのように使うことによってボットの名義でチャットなどができたりすることができるわけですね。
ローカルサーバーを立ち上げる
では、ターミナルの方に戻って以下のコマンドを叩いてみてください。
$ HUBOT_SLACK_TOKEN=<ボットのトークン> ./bin/hubot -a slack
そうするとローカルサーバーが立ち上がります。
これでもうスラックに存在するボットが稼働しています。
slack上でボットがいる部屋に
<ボットのUsername> Hello
とチャットしてみてください。 するとHelloWorld
と返ってくるはずです。
(ダイレクトメッセージでチャットする場合は<ボットのUsername>は不要です)
これはダイレクトメッセージの場合チャットの文頭にユーザーには隠されているがあるためです。
これでローカルサーバーは以上となります。
環境変数
$ HUBOT_SLACK_TOKEN=<ボットのトークン> ./bin/hubot -a slack
このコマンドのHUBOT_SLACK_TOKEN=<ボットのトークン>
の部分は環境変数と言われるものです。
プログラムに変数として使えるわけですね。
ちょっと実験してみましょう。
以下のようにプログラムを変更してみてください。
module.exports = (robot) ->
robot.respond /Hello/i, (msg) ->
msg.send process.env.HOGE_TEXT
そして次のコマンドを叩いてみてください。
$ HUBOT_SLACK_TOKEN=<ボットのトークン> HOGE_TEXT=てすとだよ ./bin/hubot -a slack
そしてslackにHello
とチャットするとてすとだよ
という返事が返ってくると思います。
シェルスクリプト
基本普通の変数で良いと思いますが、そのうち環境変数をもっと増やしたく場面が出てくるかもしれません。
そのたびにコマンドが長くなってきたら困りますよね。
その場合はシェルスクリプトを活用したいと思います。
#!/bin/sh
export HUBOT_SLACK_TOKEN='<ボットのトークン>'
export HOGE_TEXT='てすとだよ'
bin/hubot -a slack
このようなシェルスクリプトを作って
$ bash local_run.sh
を実行すると長ったらしいコマンドをいちいち打ち込まなくてもすみます。
まとめ
今回はローカル実装だけでしたけど、興味があるならHerokuなどを使ってボット常駐させてみるのもいいかもしれません。