Ubuntu Server15.10でHubot+IRCを試す話

 アイドルマスターつながりの友人たちとお話してるIRCのチャンネルにbotがいなくなりはや数年。Software DesignでHubotというものがあることを知り早速ためしてみることに。
 ただ、Software DesignではSlackやHip Chat、はたまた自家製のチャットツールとの連携でIRCはもう時代遅れな感じで書かれてました。でもWebを見渡せばやってる人はいるもので、それを参考にしながら(古い情報もありましたが)「Hubot+IRC」環境を構築してみました。

・# apt-get install nodejs npm

 これでNode.jsとnpmをインストールします。まあNode.jsを入れる時点でnpmも入ると思いますが。IRCnetJP(ISO-2022-JPを使うIRCサーバー)の場合はここでZNCも入れておいてください。freenodeとかのUTF-8を使うサーバーの場合はZNCは基本的に必要ありません。

・# ln -s /usr/bin/nodejs /usr/bin/node

 とシンボリックリンクを張ります。Ubuntuはなぜかnodeじゃなくてnodejsで、そのまま進めるとあとあとめんどいのでここで解決しておきます(もしかしたらいらないかも)。

・# npm install -g yo generator-hubot

 でYeomenとHubotのインストーラーをインストールします。ここまで終えたら一般ユーザーに戻ります。

・$ mkdir -p /your/botname

 として適当な場所(いい加減な場所という意味ではなく)にディレクトリを掘り、そこに移動します。ディレクトリ名はあくまで例です。

・$ yo hubot

 でHubotのインストールが始まります。アダプターは「irc」を入力し、それ以外は自分の環境にあった文字列を入れていけばいいと思います。

・$ ./bin/hubot -n botname

 でまずは動くか試してみてください(最初の「.」を忘れずに)。もりっと文字が出たあとに「botname>」と書かれたプロンプトが現れるはずです。

・botname> botname ping

 でHubotがPONGを返してきます。ピンポンですね。疎通完!これからIRCに接続するための設定をします。IRCに接続するためのもろもろの設定は環境変数として設定していきます。のちのち面倒がないようにシェルスクリプトにするのが手っ取り早いでしょう。例えば「runbot.sh」として、

–runbot.shここから–
#!/bin/bash

export HUBOT_IRC_NICK:”botname”
export HUBOT_IRC_SERVER:”irc.example.com”
export HUBOT_IRC_ROOMS:”#hogehoge”
export HUBOT_IRC_REALNAME:”Bot's Real Name” #optional
export HUBOT_IRC_PASSWORD:”serverpass” #optional
export HUBOT_IRC_USERNAME:”serverusername”  #optional

bin/hubot -a irc
–runbot.shここまで–

 こんな感じでいいでしょう。UTF-8を使うfreenodeなどのサーバーにつなぐならここまででOKです。runbot.shを立ち上げてHubotがチャンネルに入るかどうか試してみましょう。
 IRCnetJPなどのISO-2022-JPを使うサーバーはZNCを介してメッセージを相互に文字コード変換しながら通信することになります。ZNCの設定やらは「<a href=”https://blog.livedoor.jp/barippi/archives/31876131.html" target:”_blank”>Ubuntu Server 14.10でIRC Bouncer 「ZNC」をデーモン化して使う」あたりを見ていただくとよいです。で、繋がるようになったら「/var/lib/znc/configs/znc.conf」を編集します。Hubotが使う「Userセクション」に「LoadModule : charset -force UTF-8 ISO-2022-JP」を追加します。「クライアント側→サーバー側」の順に書けば例えばサーバーの文字コードがEUC-jpを使っていればISO-2022-JPをEUC-jpに書き換えればそのようになります。あとはrunbot.shをZNC経由でつなぐように編集するだけです。これで文字コードの問題をあまり気にすること無く使えるようになります。

 Botと言えば最近は多機能なのが売りなものが多いですが、Hubotは多機能さでは群を抜いています。Coffee-ScriptやJavaScriptでプラグインを書ける手軽さや、もともとアプリ開発者向けだったBotなだけにGitHubにPushしたりPullしたりTravis-CIでBuildしたりデプロイしたりと開発関係はなんでもあります。運用系でもZabbix等の監視ソフトからアラートが出たらそれをチャットに流したりなどやはりいろいろあります。
 しかし、私は今は一般人なのでそういうのはとりあえず置いておいて、IRC Botの機能の花形であるOP権限配布のプラグインを探しました。「<a href=”https://gist.github.com/ConnorWGarvey/6089889" target:”_blank”>https://gist.github.com/ConnorWGarvey/6089889」にひな形とも呼べるものがあったのでこれをちょっといじってみました。元のプラグインでは「botname make me an op」と書かなければOP権限がもらえなかったものを「なるとちょうだい」で配るようにしました。またHubotインストール時ですでにそれなりのプラグインが入っていて「botname help」で使い方が出てきます。中にはGoogleのAPIコードが必要だったりするものもありますが<a href=”https://github.com/hubot-scripts/hubot-google-images#cse-setup-details" target:”_blank”>導入のヘルプもあるのでGmailアカウントがある方は挑戦してみてはいかがでしょうか。また、Software Designの2016/01号のChatOpsの特集の中でもIRCであっても使えるプラグインが紹介されています。合わせて挑戦してみるのも面白いでしょう。

※IRC接続時に「node-icu-charset-detector」のBuildでエラーが出ますが接続はできます。ソースファイルが無くてBuildに失敗しているようでしたら「# apt-get install libicu-dev」で解決するはずです。以上。