LoginSignup
7
12

More than 5 years have passed since last update.

hubot使ってローカルでslackのボットを作った話

Last updated at Posted at 2017-05-02

はじめに

大学の部活で活用している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です。hubotcoffee-script同時にインストールしました。
不安ならバージョン確認して存在を確認しましょう。

$ hubot -v

ちなみに -gというオプションはグローバルインストールをするよという意味で、npmの場所にパッケージをインストールするらしいです。
グローバルがあるということはローカルもあると言うことで、このオプションをつけなければカレントディレクトリ内のnode_modules内にインストールされます。

yoとgenerator-hubotをインストール

どんどん行きましょう。
次はyogenerator-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というフォルダができるていると思いますので、そこにこのコードを追加します。

scripts/hello-world.coffee
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を追加して、
image
ここのボタンを押すとボットの実態を作ることができます。

次に作ったボットと実態を繋げたいと思います。
image
この部分をコピーします。

これはトークンと言われ、ボットの身分証明証みたいなものです。この数英の羅列をパスワードのように使うことによってボットの名義でチャットなどができたりすることができるわけですね。

ローカルサーバーを立ち上げる

では、ターミナルの方に戻って以下のコマンドを叩いてみてください。

$ HUBOT_SLACK_TOKEN=<ボットのトークン> ./bin/hubot -a slack

そうするとローカルサーバーが立ち上がります。
これでもうスラックに存在するボットが稼働しています。
slack上でボットがいる部屋に

<ボットのUsername> Hello

とチャットしてみてください。 するとHelloWorldと返ってくるはずです。
(ダイレクトメッセージでチャットする場合は<ボットのUsername>は不要です)
これはダイレクトメッセージの場合チャットの文頭にユーザーには隠されているがあるためです。

これでローカルサーバーは以上となります。

環境変数

$ HUBOT_SLACK_TOKEN=<ボットのトークン> ./bin/hubot -a slack

このコマンドのHUBOT_SLACK_TOKEN=<ボットのトークン>の部分は環境変数と言われるものです。
プログラムに変数として使えるわけですね。

ちょっと実験してみましょう。
以下のようにプログラムを変更してみてください。

scripts/hello-world.coffee
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とチャットするとてすとだよという返事が返ってくると思います。

シェルスクリプト

基本普通の変数で良いと思いますが、そのうち環境変数をもっと増やしたく場面が出てくるかもしれません。
そのたびにコマンドが長くなってきたら困りますよね。
その場合はシェルスクリプトを活用したいと思います。

local_run.sh
#!/bin/sh
export HUBOT_SLACK_TOKEN='<ボットのトークン>'
export HOGE_TEXT='てすとだよ'
bin/hubot -a slack

このようなシェルスクリプトを作って

$ bash local_run.sh 

を実行すると長ったらしいコマンドをいちいち打ち込まなくてもすみます。

まとめ

今回はローカル実装だけでしたけど、興味があるならHerokuなどを使ってボット常駐させてみるのもいいかもしれません。

7
12
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
7
12