hubot2.2でIRCのBOTを動かしてみる(Node.jsのインストールから)


サーバ さくらのVPS 1G
OS CentOS release 6.3 (Final) x86_64
Redis v2.4.15
Node.js v0.9.0
CoffeeScript 1.3.3
hubot 2.2
hubot-irc v0.0.8

github製のBOTフレームワーク、hubotを参考サイトを読みながら導入した記録です。ちょうど真っさらな環境があったので、Node.jsの導入から試してみました。

hubot-ircの動作例

まとめスライドも作ったので良ければどうぞ→http://blog.fumiz.me/2012/08/05/hubot-matome/

事前準備

nodeをインストール

# nodebrewをインストール
% curl https://raw.github.com/hokaccha/nodebrew/master/nodebrew | perl - setup

# .zshrcなり.bashrcでPATHを追加
export PATH=$HOME/.nodebrew/current/bin:$PATH

# .zshrcなり.bashrcを再読み込み
% source ~/.zshrc
# 最新版のnodeをインストール(安定版を選ぶならlatestではなくstable)
% nodebrew install latest
# 最新版のnodeを使用状態にする(安定版を選ぶならlatestではなくstable)
% nodebrew use latest

Redisのインストール

hubotがデフォルトで使用するKVSのRedisをインストールして動かしておきます。BOTの仕事にデータの永続化が不要な場合は、参考サイトの情報を元にredis使用のオプションを切ることでスキップできます。

% wget http://redis.googlecode.com/files/redis-2.4.15.tar.gz
% tar zxf redis-2.4.15.tar.gz
% make; make test

.tar.gzを展開したディレクトリがそのまま動作ディレクトリになります。

動作確認

redisのディレクトリで次のコマンドを実行してサーバを実行

% src/redis-server

続いて、コンソールをもう1つ開いて同様にクライアントを実行

% src/redis-cli

クライアントの方でコマンドを色々試してみる

redis 127.0.0.1:6379> ping
PONG
redis 127.0.0.1:6379> set foo bar
OK
redis 127.0.0.1:6379> get foo
"bar"
redis 127.0.0.1:6379> shutdown
redis 127.0.0.1:6379> exit

shutdownコマンドでdump.rdbファイルにデータの永続化が行われます

redisの動作確認

(オプション)設定

redisの設定は、redis.confを変更し、redis-serverを実行する時にそのpathを渡すことで適用します。hubotの動作を確認する段階ではあまり変えないほうがいいと思いますが……。

よく変更されそうな設定(redis.confの抜粋)

 15 # By default Redis does not run as a daemon. Use 'yes' if you need it.$
 16 # Note that Redis will write a pid file in /var/run/redis.pid when daemonized.$
 17 daemonize no$

 19 # When running daemonized, Redis writes a pid file in /var/run/redis.pid by$
 20 # default. You can specify a custom pid file location here.$
 21 pidfile /var/run/redis.pid$

 23 # Accept connections on the specified port, default is 6379.$
 24 # If port 0 is specified Redis will not listen on a TCP socket.$
 25 port 6379$

 96 # The filename where to dump the DB$
 97 dbfilename dump.rdb$

 99 # The working directory.$
100 #$
101 # The DB will be written inside this directory, with the filename specified$
102 # above using the 'dbfilename' configuration directive.$
103 # $
104 # Also the Append Only File will be created inside this directory.$
105 # $
106 # Note that you must specify a directory here, not a file name.$
107 dir ./$

redis-serverの実行

www12395ue:miff% src/redis-server ./redis.conf                         [~/opt/redis-2.4.15]
[5337] 26 Jul 01:54:25 * Server started, Redis version 2.4.15
[5337] 26 Jul 01:54:25 # WARNING overcommit_memory is set to 0! Background save may fail under low memory condition. To fix this issue add 'vm.overcommit_memory = 1' to /etc/sysctl.conf and then reboot or run the command 'sysctl vm.overcommit_memory=1' for this to take effect.
[5337] 26 Jul 01:54:25 * The server is now ready to accept connections on port 6379
[5337] 26 Jul 01:54:26 - 0 clients connected (0 slaves), 717480 bytes in use

(オプション)tclがインストールされていない場合

make test時に次のようなエラーが出るのでtclをインストールしましょう。

make[1]: ディレクトリ `/home/miff/opt/redis-2.4.15/src' に入ります
which: no tclsh8.5 in (/home/miff/.nodebrew/current/bin:/usr/local/bin:/bin:/usr/bin:/usr/local/sbin:/usr/sbin:/sbin)
You need 'tclsh8.5' in order to run the Redis test
make[1]: *** [test] エラー 1
make[1]: ディレクトリ `/home/miff/opt/redis-2.4.15/src' から出ます
make: *** [test] エラー 2

私の環境ではyumが使えたのでyumでインストールしました。

% sudo yum install tcl

coffee-scriptのインストール

hubotを動かすにはCoffeeScriptが動作する環境が必要なため、先にインストールしておきます。

% npm install -g coffee-script

hubotをインストールして動かす

私の環境では、最新版のhubot2.3とhubot-irc0.1.0の組み合わせではBOTにIRCで呼びかけても返事をしてくれなかったため、今回はhubot2.2とhubot-irc0.0.8の組み合わせでインストールします

インストール

% wget https://github.com/downloads/github/hubot/hubot-2.2.0.tar.gz
% tar zxf hubot-2.2.0.tar.gz
% cd hubot
# package.jsonに書かれている依存ライブラリをインストールします
% npm install

動作確認

hubotディレクトリに入っている状態でbin/hubotを実行するとhubotが起動します

% www12395ue:miff% bin/hubot                                                    [~/opt/hubot]
[Thu Jul 26 2012 01:57:00 GMT+0900 (JST)] INFO Loading scripts from /home/miff/opt/hubot/scripts
path.exists is now called `fs.exists`.
[Thu Jul 26 2012 01:57:00 GMT+0900 (JST)] INFO Loading scripts from /home/miff/opt/hubot/src/scripts
Hubot> [Thu Jul 26 2012 01:57:00 GMT+0900 (JST)] INFO Loading hubot-scripts from /home/miff/opt/hubot/node_modules/hubot-scripts/src/scripts
Hubot>

起動した状態でコマンドを色々打ち込んでみます

Hubot> hubot ping
Hubot> PONG
Hubot> hubot math me 1+2
Hubot> 3

これで、hubotの動作を確認できました

hubotとIRCを連携させる

hubot-ircのインストール

hubotにIRCと接続するアダプタであるhubot-ircを追加します。具体的には、hubotのpackage.jsonにhubot-ircへの依存を追記してnpm installします。

package.json

   "dependencies": {
     "hubot": "2.2.0",
     "hubot-scripts": ">=2.0.8",
     "optparse": "1.0.3",
     "hubot-irc": "0.0.8"
   }
% npm install

IRCサーバの接続情報を記述してhubotを起動

hubot-ircへIRCサーバへの接続情報を伝えるには、環境変数を使います。そのため、hubot起動用のシェルスクリプトを書くと便利、ということになります。

runhubot.sh

#!/bin/bash

export HUBOT_IRC_SERVER="接続先IRCサーバ"
export HUBOT_IRC_PORT="接続先ポート番号"
export HUBOT_IRC_USERNAME="IRCサーバログイン用のユーザ名"
# IRCサーバがログインパスワードを要求する場合
export HUBOT_IRC_PASSWORD="IRCサーバログイン用のパスワード"
export HUBOT_IRC_ROOMS="#channel1, #channel2"
export HUBOT_IRC_NICK="ニックネーム"

# -nオプションで付けた名前で呼ぶとBOTが反応します
/path/to/hubot/bin/hubot -a irc -n mybot

オプションの一覧は、hubot wikiの解説ページhubot-ircのソースコードを見るとわかりやすいです。

後は起動するだけ

# 実行権限を付けないとはねられます
% chmod 700 ./runhubot.sh
% ./runhubot.sh

試してみる

IRCクライアントでHUBOT_IRC_ROOMSで設定したチャンネルに入って、hubotを直接起動した時と同様に話しかけてみます

hubot-ircの動作例

無事、BOTが機能しました!

参考文献

Leave a Comment


NOTE - You can use these HTML tags and attributes:
<a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <s> <strike> <strong>