hubotスクリプトをherokuに置いてhubotに息を吹き込んだ話

先日研究室内でSlackの話をしたところ、色んな人がチームに参加してくれました。

そこでもっとチーム内を盛り上げたり出来ないかなーと思い、hubotでのbot制作を始めました。

最近ようやくまともに動くようになったので、その辺の実装のメモです。

※HubotとSlackの連携やherokuのアカウント取得とかその辺の話はありません。

Coffeescriptとhubotをローカルにインストール

CoffeeScirptでHubotのスクリプトを書くため、Hubotと一緒にCoffeeScriptもインストールする。

$ npm install -g coffeescript hubot

Hubotのひな形を作る

よく以下のコードを見かけたけどコマンド叩いたら怒られた。

$ hubot --create XXXbot

代わりに以下のジェネレーターを勧められたので入れたら上手くいった。

$ npm install -g yo generator-hubot

この後ディレクトリを作成し、その中で以下のコマンドを入力。

$ yo hubot

                     _____________________________  
                    /                             \ 
   //\              |      Extracting input for    |
  ////\    _____    |   self-replication process   |
 //////\  /_____\   \                             / 
 ======= |[^_/\_]|   /----------------------------  
  |   | _|___@@__|__                                
  +===+/  ///     \_\                               
   | |_\ /// HUBOT/\\                             
   |___/\//      /  \\                            
         \      /   +---+                            
          \____/    |   |                            
           | //|    +===+                            
            \//      |xx|                            


? Owner: Daisuke
? Bot name: nurupobot
? Description: call 'nurupo' return 'ga' bot
? Bot adapter: (campfire) slack

片腕ドリルなキャラクターが出てきた。誰だよお前って動揺して何度かキャンセルしたけどこれがHubotのキャラらしい。よく見ると胸に名前書いてあった。ごめん。

下のOwnerの行の項目からは自分で入力する所。ノリと勢いで書いたんだけど滅茶苦茶な書き方してるなーと後悔。

この後Enterを押すことでひな形は完成。

サンプルコード

パッと思いつかなかったので下記サイトのコードを頂いて使ってみた。

あのおなじみのぬるぽに対してガッ!って返すアレ。

“ぬるぽ”に反応してガッしてくれるHubotスクリプト Slack内での表示に最適化済

script/ 下に落としてきたスクリプトファイルを入れた。

ローカルで確認

$ bin/hubot
nurupobot> Hubot ぬるぽ
nurupobot> ```
   Λ_Λ     \\
(  ・∀・)  | | ガッ
 と     )  | |
  Y /ノ     人
   / )    < >   _Λ  ∩
_/し'   //  V`Д´)/
(_フ彡             / ←>> @Shell

痛い。

vexus2さん(スクリプト書いた人)には感謝。

コミットからherokuへデプロイする

slackと連携するためのパッケージをインストール

$ npm install hubot-slack --save

作ったbotのディレクトリ内にある Procfile に以下を書き込む

web: bin/hubot --adapter slack


$ git init
$ git add --all
$ git commit -m "first commit"
$ git remote add origin リモートリポジトリのURL
$ git push -u origin master

herokuでの操作

$ heroku login
$ heroku create herokuでのアプリ名
$ git push heroku master

$ heroku ps:scale web=1
$ heroku addons:add rediscloud

最後の行を行う前にクレカの登録が要るみたい。

memo

何度かappを作っては消ししていると、ある日herokuにpushするタイミングでpermission deniedになった。その際の参考は下。

herokuでpushしようとしたらPermission deniedとなってしまう | 世界はどこまでもシンプルである

Hubotの設定

$ heroku config:add HUBOT_SLACK_TOKEN=トークン
$ heroku config:add HUBOT_SLACK_TEAM=botを動かしたいチーム名
$ heroku config:add HUBOT_SLACK_BOTNAME=ボットの名前
$ heroku config:add HEROKU_URL=http://xxx.herokuapp.com
  • Hubotのトークンは、SlackのIntegrationsに連携したHubotがあり、それの詳細で見れる。
  • HerokuのURLはherokuの画面で右上の…メニューからOpen AppがあるのでそこをクリックするとURLが分かる。(ちょっと迷った)

まとめ

herokuを使ってHubotを動かす方法が分かった。

今後定時実行するbotを作る予定。他にも何か思いついたら作ってみよう。