maehachi08 Anything Blog

2013年05月06日
CUIのIRCクライアント『WeeChat』でターミナル画面でIRCを操作

What's WeeChat?

WeeChatとは、CUIのチャットクライアント(IRC Client)です。高速、かつ軽量でマルチプラットフォーム(GNU/Linux、*BSD、MacOS X、Windows 等)に対応していることが特徴です。複数のIRCサーバを登録でき、IRCサーバ毎にニックネーム等の設定も出来ます。

Environment infrastructure

WeeChatをインストールしたOS環境は以下のとおりです。

# uname -an
Linux manage001.pachi.local 2.6.32-358.el6.x86_64 #1 SMP Fri Feb 22 00:31:26 UTC 2013 x86_64 x86_64 x86_64 GNU/Linux

# cat /etc/redhat-release 
CentOS release 6.4 (Final)

Install WeeChat

WeeChatはRPMパッケージでインストールします。ちょうどepelレポジトリで公開されていました。

# yum -y install weechat

Start WeeChat

初めてWeeChatを起動する場合、デフォルトのオプションで設定ファイルが作成されます。キーバインドに関わる設定ファイルは~/.weechat/weechat.conf、接続するIRCサーバに関わる設定は~/.weechat/irc.confです。
WeeChat を設定するにはこのファイルを編集するか、 WeeChat内使えるWeeChatコマンドにパラメータを付けて設定します。

では、WeeChatを起動します。

# weechat-curses

起動したら端末画面上では以下のように表示されます。

WeeChat 0.4.0 (C) 2003-2013 - http://www.weechat.org/
16:40:23 |   ___       __         ______________        _____ 
16:40:23 |   __ |     / /___________  ____/__  /_______ __  /_
16:40:23 |   __ | /| / /_  _ \  _ \  /    __  __ \  __ `/  __/
16:40:23 |   __ |/ |/ / /  __/  __/ /___  _  / / / /_/ // /_  
16:40:23 |   ____/|__/  \___/\___/\____/  /_/ /_/\__,_/ \__/  
16:40:23 | WeeChat 0.4.0 [コンパイル日時 Apr  2 2013 10:55:56]
16:40:23 | - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
16:40:23 | バー "input" が作成されました
16:40:23 | バー "title" が作成されました
16:40:23 | バー "status" が作成されました
16:40:23 | バー "nicklist" が作成されました
16:40:23 | ロード済みプラグイン: alias, aspell, charset, fifo, irc, logger, lua,
         | perl, python, relay, rmodifier, ruby, script, tcl, xfer

Configuration of WeeChat

weechat-cursesコマンドで初めてWeeChatを起動した時は、接続情報等が未設定なので接続先IRCサーバ等の設定を行う必要があります。
設定方法は、設定ファイル「~/.weechat/irc.conf」を直接編集するか、WeeChat内でWeeChatコマンドにパラメーターを付けて設定します。ここではWeeChatコマンドを使用して設定します。WeeChatコマンドで設定した内容を"cat ~/.weechat/irc.conf"とかでも確認できます。

まず、接続するIRCサーバを登録します。

/server add hoge irc.example.com/6667 -ssl -autoconnect -password=mypassword

IRCサーバのチャンネルを登録し、自動参加を設定します。チャンネルはカンマ区切りで複数指定可能です。

/set irc.server.hoge.autojoin "#channel1,#channel2"

サーバ接続に使用するユーザ名を設定します。これは、表示される名前ではなく、サーバ接続に使用する名前です。

/set irc.server.hoge.username "maepachi"

IRCで表示するニックネームを設定します。

/set irc.server.hoge.nicks "maepachi"

IRCサーバに対してSSL接続しようとしてエラーになることがあります。これは、"ssl_verify" オプションがデフォルト有効なためSSL接続処理で厳密な確認が行われ、0.3.1 より前のバージョンでは信頼性の確認に成功していたものが失敗する場合があるためです。この場合のエラーメッセージとしては以下のような内容の場合があります。

2013-05-05 17:54:55     =!=     gnutls: 証明書内のホストネームは "irc.example.com" とマッチしません
2013-05-05 17:54:55     =!=     irc: TLS ハンドシェイクに失敗
2013-05-05 17:54:55     =!=     irc: エラー: Error in the certificate.

このエラー内容は、WeeChatコマンドで設定したサーバホスト名と証明書に記述されているサーバホスト名が異なる場合に発生しました。
証明書に関するエラーの場合、"ssl_verify" を無効化することで接続が成功することがあります。しかし、"ssl_verify" を無効化するということはSSL接続において厳格ではないので、セキュリティ強度が落ちることに注意してください。

/set irc.server.hoge.ssl_verify off

Connect to irc server

最低限の設定が出来たので、IRCサーバに接続します。/server addした時に"-autoconnect"を設定しているので次回WeeChat起動時には自動的に接続されます。

/connect hoge

切断する場合はdisconnectです。

/disconnect hoge

Switch of channnel

チャンネル切り替えはbufferです。ここでは他にもチャンネルに関わる操作を記述しておきます。

### Channel_hoge に切り替える
/buffer #Channel_hoge

### Channel_bar に接続する
/join #Channel_bar

### チャンネルを切断する(バッファは開いたままにする)
/part #channel

### チャンネルを切断する(バッファも閉じる)
/close #channel

Plugins of weechat

WeeChatには様々なpluginがあり、対応言語であればpluginを作成することも出来ます。pluginに関しては、4.1. WeeChat におけるプラグインにザッと目を通しましょう。

### ロードされているpluginのリストを表示
### もしくは、/usr/lib64/weechat/pluginsディレクトリを参照
/plugin list

### plugin "hoge"をロード
/plugin load hoge

### plugin "hoge"をアンロード
/plugin unload hoge

デフォルトでロードされるpluginを以下に記述します。

Plugin nameDescription
aliasコマンドの別名を定義
aspellコマンドラインのスペルチェック
charsetバッファの文字コードに従ってデコード/エンコード
demoデモプラグイン (デフォルトではコンパイルされません)
fifo外部から WeeChat にコマンドを送信するための FIFO パイプ
ircIRC チャットプロトコル
loggerバッファの内容をファイルに保存
relayネットワーク経由でデータを中継 (IRC プロキシ)
rmodifierネットワーク経由でデータを中継 (IRC プロキシ)
pythonPython スクリプト API
perlPerl スクリプト API
rubyRuby スクリプト API
luaLua スクリプト API
tclTcl スクリプト API
guileGuile (scheme) スクリプト API
xferファイル転送とダイレクトチャット

Tips

weechatコマンドのエイリアス設定

/bufferとか長くてタイポしちゃうー!!って場合は、コマンドにエイリアスを振る事が出来ます。aliasプラグインの機能。

/alias b /buffer

これで/bでチャンネル切り替えが可能です。

/b #Channel_hoge

キーワード登録

LimeChatなんかでもキーワード登録した文字列がチャンネル内で書き込まれた場合、文字列がハイライトされますよね。あれです。ircプラグインの機能。

/set weechat.looks.highlight "pachi,maepachi,maehachi"

バッファの内容をファイルに保存

バッファの内容をファイルに保存できます。デフォルトで有効です。 保存形式とその方法をオプションで設定できます。loggerプラグインの機能。

### loggerを有効にする
/set logger.file.auto_log on

### ログ保存ディレクトリのパスを~/.weechat/logs/YYYY_mm_ddとする
### これでログファイルを日付ごとに管理できます
/set logger.file.path "%h/logs/"%Y_%m_%d"

### ログファイル名のセパレート文字列をアンダーバー( _ )にする
/set logger.file.replacement_char "_"

### ログファイル内で記録される行単位のタイムフォーマット設定
/set logger.file.time_format "%Y-%m-%d %H:%M:%S"

WeeChatをtmux等のターミナルマルチプレクサツールと併用することでターミナルアプリケーションの中でIRCを表示できます。ウィンドウやペインで表示しておけばマウス移動なく快適なターミナルライフを満喫できるでしょう♪♪