あけましておめでとうございます。今年もよろしくお願いします。

今までのIRC環境


今年の年明けに挑戦した作業の一つにに、IRC環境の統一、というのがあります。昔からIRCをコミュニケーションに多用しており、一時期は

BitlBee で AIM や GTalk や Twitter を IRC にまとめる


などを参考にtwitterやIMまでbitlbeeを使ってIRCに統一していました。

これはこれで非常に便利なのですが、各所で利用していると、下の図のように多様な環境に多数のクライアントをインストールすることになり、操作感はバラバラだわ、設定がごみごみするわ、ログが散逸したりやらであちこちでの管理が大変であり、どうしても統一した環境が必要であるかなと思っていました。

irc-connection

これについては、従前からTiarra,madoka,nadokaなどに代表されるIRC proxyを導入することで接続の管理を一本にまとめる、という運用をしていました。ちょうど個人で使えるサーバーはありますので、こういうときには十分使い物になります。

irc-connection2

確かに、これを導入することで複数のサーバーを管理することがなくなり、チャンネルなどの管理は簡単になり、また常時接続環境も用意することが出来、利便性も非常に向上しました。しかしながら引き続きクライアント側は簡単になったとはいえ複数種類に渡り、キーワード設定などの管理は引き続きバラバラに管理しなければならず、未読管理などもばらばらになります。もっとこう、クライアントも可能なかぎり統一したり、最近のはやりでWeb basedなUIとかにできればいいのに、とか思ってしまいます。

この対策として、IRC Proxyは引き続き利用しながら、同時に個人サーバーにCUIのIRC Clientを導入してssh接続で利用していました。これなら、ssh clientさえあればいつでも同じクライアントで接続ができますし、tmuxやGNU screenなどを使えばセッションの維持も可能です。もっとも、モバイル端末でsshを使うのは大変に骨が折れるのでほぼ不可能だし、通知なども発生しませんので、あまり便利とは言いがたい状況ではありました。

WeeChatで実現する統一環境


今回、CUIのIRC ClientとしてWeeChatを利用していましたが、WeeChatには単なるCUI Clientであるだけではなく、便利な機能がたくさんあります。

  • ログ取り、URLの圧縮などの便利機能をスクリプトで拡張できる

  • IRC Proxyとしても利用でき、他のクライアントを受け入れられる。

  • IRC protocol以外に専用プロトコルがあり、こちらは未読などを含めて全て管理可能

  • 専用プロトコルのクライアントには、Android用やHTML5ベースのものまである。


これらの機能を使えば、既存のIRC proxyが無くとも、全て統一管理した環境が得られることになります。

irc-connection3

今回、実際にweechatの設定を完了し、IRC proxyを廃止できましたので、備忘録代わりに記録しておこうと思います。

Weechatの設定


まずWeeChatですが、今回はdebian上に実現しているので、特に苦労もなくapt-getでインストール可能です。

$ apt-get install weechat


同様にMacでもhomebrewで一発でインストールできますし、Windows であれば残念ながらNative版こそありませんが、CygwinのNet Installerからインストールが可能です。インストールが完了したらコマンドラインからweechatを起動します。

weechat

接続などは、実行した後weechatのコマンドで設定が可能です。クイックスタートガイドを参考にサーバ登録、接続、チャンネルへのJOINが可能かと思います。例えば、IRCNet に接続して#testchannelに接続するためには、以下のコマンドで行えます。

/server add ircnet irc.ircnet.ne.jp
/connect ircnet
/join #testchannel


 

日本人向けの設定


とはいえ、このまま実行するとIRCNetなどのiso-2022-jpのサーバでは、日本語は正しく表示されません。これは、charsetの指定が必要です。日本人ならiso-2022-jpがデフォルトでしょうから、そのように設定し、freenodeなどでutf-8の場合は、そちらのみutf-8にしましょう。ここではデフォルトはiso-2022-jp、ircnetも同様、freenodeだけutf-8、とするような設定例を示します。

なお、コマンドラインからの設定を設定ファイルに保存するためには、/saveコマンドを使います。せずに終了すると綺麗に消えますので忘れずに!

/set charset.default.decode "iso-2022-jp-3" 
/set charset.decode.irc.ircnet "iso-2022-jp-3"
/set charset.encode.irc.ircnet "iso-2022-jp-3"
/set charset.decode.irc.freenode utf-8
/set charset.encode.irc.freenode utf-8
/save


(1/13追記: 当初iso-2022-jpとすることでfull width tildeなどで文字化けが起こっていましたが、iso-2022-jp-3とすることで回避できることがわかりました。ただし、libiconvが--enable-extra-encoding付きでコンパイルされていることが条件です)

しかし、ここまで設定しても、ircnetで日本語名のチャンネルに入れません。freenodeなどではまず推奨されないnon-asciiなチャンネル名を利用しているためです。”Why GARAPAGOS Japanese People!"と叫びたくなりますが、怒っても始まりません。

理由としてはデフォルトでチャネル名などをエンコードせずそのままutf-8で解釈してしまうためですので、エンコードしてもらうように設定します。

/set irc.network.channel_encode on
/save


ここまで設定すれば、あとは設定を駆使すればCUIのIRCクライアントとして普通に使うことができるようになります。前述のとおり、tmuxやscreen を使えば、常時接続環境も整います。

IRC Proxyの代替向けの設定


IRC Proxyとして使うなら絶対欠かせない自動接続などの設定は、/setコマンドを使います。例えば起動後自動でircnetに接続し、#testchannelにJOINするような設定は以下です。

/set irc.server.ircnet.autoconnect on
/set irc.server.ircnet.autojoin "#testchannel"
/save


繰り返しますが、/saveは忘れずに!同様の設定は~/.weechat/以下にある*.confファイルを(起動していない時に)直接編集することでも可能です。

ログ取りには/loggerコマンドを使います。チャンネルごとに設定するばあい。チャンネルのバッファに入り、以下を実行します。

/logger set 1


/setコマンドで全チャンネルを記録することも可能です。以下では、全チャンネルのメッセージログを取ります。

/set logger.level.irc 1


それ以外の便利機能は、概ねスクリプトに公開されています。これらは/scriptコマンドからインストールでき、/setコマンドなどで設定することが出来ます。

WeeChat リモートインタフェースの利用


次に、weechatのrelay機能を設定し、モバイルやブラウザから利用可能にできるようにしましょう。weechatのrelay 機能はIRCプロトコルと専用プロトコルの両方が利用可能ですが、今回は未読管理などを共有したいので、後者を使います。

専用クライアントサーバの起動方法ですが、/relayコマンドを使えば簡単に実行できます。”your-secret-password"の部分は、当然皆さんが書き換えてください。

/relay add weechat 9000
/set relay.network.password "your-secret-password"


これで、weechatが(tmuxなどでセッションが接続されて無くても)起動している間は、上記のport 9000で専用のリモートインターフェースからの接続が可能です。

今のところのものは、ダウンロードページで紹介されています。AndroidはGoogle Playで公開されています。iOS版がありませんが、HTML5版のGlowing Bearは、iOSに対応しています。

Glowing Bearの例で言うと、先ほどの設定を元にサーバ名、ポート番号、パスワードを設定すれば接続できます。

glowingbear

接続すると、weechatで使っていたものとそのままの状態がHTML5で復元されます。同時に利用することすら可能です。

なお、weechatの専用プロトコルはSSLを設定することも可能です。設定手順も公開されていますし、StartSSLを使って無料で署名したものも作れますので、暗号化したい人は参考にしてみてください。

デーモン化と自動起動の設定(手抜き版)


今回weechatをrelay機能で中継サーバとして使うようにしても、tmuxなどでセッションを開けっ放しにしておけば、常時利用できる形になるので特に問題はありません。各種デーモン化の方法はあるかと思いますが、今回はcronとtmux のセッション生成を使って、非常に手抜きしたデーモン化を実現しています。以下の1行のcrontab設定で、起動後3分以内に自動的にweechatを含むセッションが立ち上がり、(Debianの場合)再起動した旨のメールが飛びます。

0-59/3 * * * * /usr/bin/tmux list-windows 2>&1 | grep Chat >/dev/null || ( /usr/bin/tmux new-session -d weechat && echo tmux session regenerated)


 

最後に


これで、weechatを中央に据え、常時快適に接続できる環境を整えることが出来ました。クライアントにもいろいろ種類がありますし、モバイルでも使えるということで、非常に快適になったと思っています。参考になれば幸いです。