スクリプトでIRCに自動発言

 参画しているプロジェクトでメンバーがちょっとしたスクリプト処理を主導で開始する際に「○○実行しましたー」などとIRCで連絡する習慣があるのですが、コミュニケーションという点では毎度声を出すことにメリットはあろうものの、作業自体は結構ナンセンスなものだと思っていました。自動でだせば良いものに、毎度手間をかけているのが面倒だなぁという感覚です。
 すぐにできそうだけどなんか色々調べるの面倒だなぁ(とそれくらいの優先度)と考えていたところ、こんな記事を目にしました。


○デプロイ時に実況中継するIRCボット @KLab若手エンジニアの これなぁに?
http://lab.klab.org/young/2009/03/%E3%83%87%E3%83%97%E3%83%AD%E3%82%A4%E6%99%82%E3%81%AB%E5%AE%9F%E6%B3%81%E4%B8%AD%E7%B6%99%E3%81%99%E3%82%8Birc%E3%83%9C%E3%83%83%E3%83%88/


 なんとシンプル!
 折しも昨年末より私もRubyに興味を持っていたのでこれがRubyで書かれているということだけでも、私の心を惹きつけました。
 で多少修正して、早速プロジェクトに投入。

postToIRC.rb:

#!/usr/bin/ruby
require 'socket'

nick = ARGV[0]
chan = ARGV[1]
msg  = ARGV[2]

if (nick!=nil && msg!=nil && chan!=nil) then 
  sock = TCPSocket.open("localhost", 6667)
  sock.send(sprintf("NICK %s\r\n", nick), 0)
  sock.send(sprintf("USER %s localhost localhost :%s\r\n", nick, nick), 0);
  sock.send(sprintf("JOIN #%s\r\n", chan), 0)
  sock.send(sprintf("NOTICE #%s :<--- %s --->\r\n", chan, msg), 0);
  sock.send("QUIT\r\n", 0);
  sock.readlines
  sock.close
end


 こんなスクリプトを用意して、処理経過をIRCに発言させたいバッチ(私の今回の対象は bash スクリプトでした)中に以下のような記述をすることで呼び出します。

IRCPGM="ruby /home/my/pass/to/postToIRC.rb"
IRCCHANNEL="mychannel"
IRCUSER="myscriptname"

${IRCPGM} ${IRCUSER} ${IRCCHANNEL} "Starting process A"

 あとはIRCに発言させたいタイミングごとに
${IRCPGM} ${IRCUSER} ${IRCCHANNEL} "(ここにメッセージ)"
 を書いていけばOK。簡易的にはこれで十分目的を達成することができました。らくちんらくちん。
 まだ実験的に1つのスクリプトに組み込んでみただけですが、ベースができているので様々なシーンに幅が広がりそうです。



課題としては:
・今は localhost:6667 固定なので変数化とかパラメタ化とかして追い出したい
・都度切断するのが気に入らない。IRCに接続したままでいくつか発言をさせたい
・ニホンゴジョウズジャアリマセン。モジコードトオモウケドシラベテマセン
というあたり。


 amo-kさん、ありがとうございます!プロジェクトメンバがほんの少しだけ幸せになれました(^^)。


.