Herokuでhubotを使ったIRC botを動かす

最近、会社でIRCブームが来てるので、僕もhubotを使ってなにかbotを作ってみることにした。hubotはGithubが作ったbotフレームワークで、TwitterのbotとかIRCのbotを簡単に作ることができる。

で、できたのがこれ。

f:id:naoty_k:20121230030802p:plain
f:id:naoty_k:20121230030802p:plain

https://github.com/naoty/diobot

ディオ(DIO)様の名言をランダムに返してくれる、最高に「ハイ!」なbotが出来上がりました。

Herokuでhubotをデプロイするときにhubotのwiki*1を参考にしてみたんだけど、Herokuにpushすると、下のようなエラーが出てぜんぜんうまくいかなかった。

Starting process with command `bin/hubot -a irc -n Hubot`
Stopping all processes with SIGTERM
bin/hubot: 3: npm: not found
Process exited with status 0

結局、このwikiは参考にせずに自力でなんとかしたので、その記録をちゃんとメモに残しておこうと思う。

package.json

$ mkdir diobot
$ cd diobot
$ vi package.json
{
  "name": "diobot",
  "version": "0.0.1",
  "author": "naoty",
  "description": "DIO sama at irc",
  "license": "MIT",

  "dependencies": {
    "hubot": "*",
    "hubot-scripts": "*",
    "optparse": "*",
    "hubot-irc": "*",
    "coffee-script": "*",
    "underscore": "*"
  },

  "engines": {
    "node": "0.8.x",
    "npm": "1.1.x"
  }
}
$ npm install
  • dependenciesにあるパッケージは、先述のwikiに従ってたときに使ってたpackage.jsonに書いてあったのでそのまま使った。
  • あと、coffee-scriptはデプロイ時にエラーになったので追加した。
  • underscoreは便利なので、とりあえず追加した。

Procfile

$ vi Procfile
bot: hubot -a irc -n DIO
  • Herokuによると*2、Heroku側でbin:node_modules/.bin:/usr/local/bin:/usr/bin:/binにPATHを通してくれるので、Procfileではhubotとすればいい。
  • -a <Adapter名> -n <IRCのニックネーム>をオプションにつける。

Herokuにデプロイ

$ git push heroku master
...
$ heroku ps:scale bot=1
$ git config:add HUBOT_IRC_SERVER='irc.example.com' HUBOT_IRC_ROOMS='#hoge' HUBOT_IRC_NICK='DIO' HUBOT_IRC_PORT='6667' HUBOT_IRC_PASSWORD='hogehoge'
  • IRCサーバーやチャンネルへの接続のための情報を環境変数として渡す。
  • 必要な情報はこちら*3に載ってる。

スクリプトを追加

$ mkdir scripts
$ vi scripts/ping.coffee
module.exports = (robot) ->
  robot.respond /PING$/i, (msg) ->
    msg.send 'PONG'
  • scripts/以下にあるスクリプトは自動で読み込まれて有効になる。
  • これをデプロイしてdio pingって送ったらPONGとDIOが返したら成功。
  • あとは、工夫して面白いbotを作るだけ。

Enjoy!

*1:https://github.com/github/hubot/wiki/Deploying-Hubot-onto-Heroku

*2:https://devcenter.heroku.com/articles/nodejs-support

*3:https://github.com/github/hubot/wiki/Adapter:-IRC