weechat のススメ（導入〜設定）


IRCクライアント、皆さんは何を使われてますか？

私は今まで mac上で [limechat](http://limechat.net/mac/ja.html) や [textual](http://www.codeux.com/textual/) といった GUI クライアントを使っていましたが、最近社内のイケてる同僚エンジニアより勧められた weechat を導入したところ色々と捗ったので、私の設定をご紹介しつつオススメしたいと思います。

## [weechat](http://weechat.org/) とは？
- モジュール式: 軽量のコアと選べるプラグイン
- multi-protocols architecture (mainly IRC)
- C 言語、Python、Perl、Ruby、Lua、Tcl、Scheme で拡張可能
- 詳しく文書化され、数種類の言語に翻訳されている
- GPLv3 ライセンスのもとにリリースされるフリーソフトウェア
- スクリプトを作成する大きなコミュニティを持つ活発なプロジェクト

（本家サイトより転載）

---

weechat は主に IRC用として使う CUI のチャットクライアントで、軽量かつ拡張性の高さが特徴の様です。

開発も活発な様で、2014/3/27現在 `ver0.4.3` がリリースされています。

とりあえず入れてみましょう！

## install

```
brew install weechat --with-ruby --with-python --with-perl
```
mac は brew で入ります。各言語で書かれたプラグインスクリプトを使いたいので、オプションを付けています。

正常にインストールできたら

```
weechat
```

で起動します。 ※ `weechat-curses` でも起動します(エイリアス)。

![スクリーンショット 2014-03-27 00.37.37.png](https://qiita-image-store.s3.amazonaws.com/0/4497/7a8767d2-69e9-e5ef-d2a7-9adf216c7fcd.png "スクリーンショット 2014-03-27 00.37.37.png")

これが初期画面。味気ない画面ですが、これからカスタマイズしていきます。
今から書いて行く設定を適用していくと、最終的に

![2__WeeChat_0_4_3__weechat_.png](https://qiita-image-store.s3.amazonaws.com/0/4497/02c8c625-e023-5e3f-3b4a-9adec15583ee.png "2__WeeChat_0_4_3__weechat_.png")

こんな感じの画面になります。
（私は iTerm2 + tmux 上で利用しています）

## サーバ設定
まずはサーバを設定します。

```
/server add hoge irc.example.com/6667
```

`hoge` 部分に任意のサーバ名を入れ、ホストを適宜入力してください。
必要であれば

```
 -ssl -autoconnect -password=mypassword
```

といったオプションがありますので、付与してください。

### 設定したサーバへの接続、切断

```
# 接続
/connect hoge
# 切断
/disconnect hoge
```

### チャンネル接続、切断

```
# 接続
/join #hoge
# 切断
/close #hoge
```

### チャンネル間の移動
weechat では、各チャンネル（に限らず１つの画面）を `buffer` と呼びます。

```
# buffer の移動
/buffer #hoge
```

### 設定を保存する

今から設定する内容は、保存しないと終了時に消えてしまいます。
設定をいじった場合は終了前に save しましょう。

```
/save
```

### weechat を終了する

```
/exit
```

## チャンネルリストを表示する
現状ですと、自分がどのチャンネルを設定しているか等分かりにくいです。
現在自分が設定しているチャンネル(buffer)リストを表示するプラグインを入れます。

```
/script install buffers
```

`/script install hoge` でプラグインスクリプトをインストールする事ができます。
この `buffers` というプラグインを入れると、先ほどのキャプチャ左端の様に設定したチャンネル一覧が常に表示される様になります。

`Alt + ↑ or ↓` で buffer の移動ができます。

## チャンネルを素早く移動できるようにする
ちまちまと `/buffer #hoge` と入力してチャンネルを移動するのは辛いものがありますので、便利プラグインを入れます。

```
/script install go
```

この `go` というプラグインを入れると、

```
/go
```

と入力してエンターを押した後、チャンネル名をタイプしていく毎にインクリメンタルサーチしてくれます。
`/go` の後にチャンネル名を入力しても移動できます。

### キーバインドを設定する

更に以下の様に設定しておくと

```
/key bind ctrl-G /go
```

`ctrl + g` で go を起動できて捗ります。

## ウィンドウを分割する

```
# 水平分割
/window splith
```

```
# 垂直分割
/window splitv
```

引数として数値を渡せば、`/window splith 60` など割合を指定して分割する事もできます。

先ほどのキャプチャでは４画面に分割しています。

### ウィンドウを統合する

```
/window merge
```

で分割したウィンドウを統合する（元に戻す）事ができます。
オプションもいくつかあり、

```
# 全部統合する
/window merge all
```
```
# ウィンドウ番号を指定して統合する
/window merge -window 1
```

等があります。

### ウィンドウ間を移動する

```
# 引数として up down left right を与えると、その方向へ移動できる
/window {up|down|left|right}
```

ただこれだといちいちコマンド入力が面倒なので、ショートカットを登録します。

```
/key bind ctrl-H /window left
/key bind ctrl-J /window down
/key bind ctrl-K /window up
/key bind ctrl-L /window right
```

ここでは vim のキーバインドに合わせていますが、各位お好きな様に設定すると良いのではないでしょうか。
なお `HJKL` 部分は大文字で設定しますが、実際のキー入力は大文字にしなくても大丈夫です。

### 入力バーを一カ所にまとめる

ウィンドウを分割すると、各ウィンドウに入力バーが存在します。これがうざい感じなので、画面下部に１つ入力バーがある状態にします。

```
/bar add rootinput root bottom 1 0 [buffer_name]+[input_prompt]+(away),[input_search],[input_paste],input_text
```

とした後

```
/bar del input
```

でOKです。

もとに戻したい場合は

```
/bar del rootinput
```

と入力します。

### アクティブなウィンドウだけハイライトする

現状だと、分割した全てのウィンドウがハイライトされている状態です。好みもあるかと思いますが、私の場合今どこのウィンドウを見ているかを忘れて誤爆する事がありますので、見ている（アクティブ）ウィンドウ以外をグレーアウトする設定にしています。

```
/set weechat.look.color_inactive_window on
```

### レイアウト設定を保存する

```
/layout store {name}
```

で現在のウィンドウとバッファを保存します。名前を付けて複数保存する事ができ、指定しない場合は `default` として保存されます。

また、保存した設定は

```
/layout apply {name}
```

で呼び出せます。

## 全チャンネルの発言をモニタするバッファを追加する

limechat 等の一般的な IRCクライアントには全チャンネルのタイムラインが表示されるウィンドウがあります。これも追加できます。

```
/script install chanmon
```

これを入れると `chanmon` バッファが生成されますので、ウィンドウ分割して表示させとくと便利です。

## ハイライト、通知周り

キーワードハイライトを設定し、通知を行えなければ話しになりませんね。

```
/set weechat.look.highlight "$nick,hoge,fuga,piyo"
# 正規表現指定
/set weechat.look.highlight_regex .*\bこんにちは\b.*
```

さらに

```
/script install highmon
```

これを入れると、ハイライトを含む発言のみを集めた `highmon` バッファが作成されます。

[こちらのページ](http://phyks.me/2013/12/highmon_weechat.html) に書いてある設定を行うと、ハイライトを含む発言が入力バーの下にどんどん表示されていくのでチェック漏れが無くなって良いです。チェックしたら

```
/clear_highmon
```

でバッファをクリアできます。
これもキーバインド設定しとくと捗りますよ。

```
/key bind ctrl-C /clear_highmon
```

これで `ctrl + c` で消去できます。
（再起動時に一気に再出力されるのがうざいですが、対策検討中..）

### Growl通知

mac の `notification_center` への通知プラグインもありますが、現状 Growl の方がデザイン等好みの設定をする事ができますのでこちらを利用しています。

利用する為には [gntp](https://github.com/kfdm/gntp/) という python のライブラリが必要なので、入れておきます。
※ pip で入れるので、pipが無い場合は先にコンソールから `easy_install pip` で入れておきます。

```
# コンソール上にて
sudo pip install gntp
```

```
# weechat入力バーにて
/script install growl
```

Growl 環境設定のアプリケーション欄に WeeChat の表示が出ていればインストール成功です。

## その他の設定

### ログレベルの設定

ログはデフォルトだと何でも記録してしまい膨大な量になるので、絞っておいた方が良いです。

```
0: 記録しない
1: ユーザからのメッセージ (チャンネルまたはプライベート)
2: ニックネームの変更 (自身と他のユーザ)
3: 任意のサーバメッセージ (参加/退出/終了メッセージを除く)
4: 参加/退出/終了メッセージ
9: すべて記録する

/set logger.level.irc 2
```

### join / part / quit を表示しない

```
/filter add irc_smart * irc_smart_filter *
```

### URL をクリックで開く（iTerm）
iTerm2 の `Preferences` > `Pointer` メニューの下部にある、`⌘-Click Opens Filename/URL` にチェックを入れる事で、`Command + Option + Click` で URL をブラウザで開く事ができます。

![スクリーンショット 2014-04-01 18.48.20.png](https://qiita-image-store.s3.amazonaws.com/0/4497/ea646270-4484-620f-748e-69a90fff8606.png "スクリーンショット 2014-04-01 18.48.20.png")



## その他便利なプラグイン

`/script` でインストールできるスクリプトプラグインの一覧を表示し（ここに表示されていないプラグインも沢山ある様です）、インストール等の操作が可能です。 

![スクリーンショット 2014-04-02 10.50.17.png](https://qiita-image-store.s3.amazonaws.com/0/4497/b74d4ad4-4423-74e9-9668-0699e628d6c7.png "スクリーンショット 2014-04-02 10.50.17.png")

左から、
`i` がインストール済み
`a` が autoload 設定済み
`r` が running 状態である
事を意味しています。

カーソルを移動して選択した状態でキー操作する事で、様々な操作ができます。（例えば `/script install hoge` 等と入力しなくても、選択して `i` をタイプすればインストールされる）

### プラグインインストール時に注意する事
エラーが発生した場合等に気づける様に、`weechat` バッファを表示しておくのをお勧めします。このバッファには各操作のログや、`/help hogehoge` を入力した際の出力内容が流れます。

![スクリーンショット 2014-04-02 11.07.06.png](https://qiita-image-store.s3.amazonaws.com/0/4497/0c862d60-c9c8-0f06-f103-30a6785bb370.png "スクリーンショット 2014-04-02 11.07.06.png")
上は `/help chanmon` を実行した結果

例えばプラグインのインストールに成功したが、必要なライブラリが不足していた為起動に失敗した場合等は `i` `a` は表示されているが `r` が表示されていない状態になるので、そういった時に `weechat` バッファでエラー状況を確認します。

### 発言者ごとにテキストを色分けする

```
/script install colorize_lines
```

を入れると
![スクリーンショット 2014-03-29 12.07.03.png](https://qiita-image-store.s3.amazonaws.com/0/4497/a3188838-7756-4fdd-79bb-8392b27a96b5.png "スクリーンショット 2014-03-29 12.07.03.png")
みたいに発言者ごとに色分けされます。

### grep検索

```
/script install grep
```

バッファとログファイルから正規表現で grep 検索できるようになります。

### url hinter

http://tkengo.github.io/blog/2014/04/15/introduction-weechat-url-hinter/

こちらで紹介されている `url_hinter` プラグインを導入すると、マウスを使用せずに URL をブラウザで開く事ができ、とても便利です。

※ 4/16現在公式プラグインとして申請中との事です

### url短縮

```
/script install shortenurl
```

isgd または tinyurl で URL を短縮してくれます。
ログファイルが膨大な場合に weechat を再起動すると、リクエスト飛ばしまくって起動に物凄く時間かかりますので、このプラグインは autoload 設定しない方が良さそうです。

### urlのみ集める

```
/script install urlbuf
```

発言から URL のみを集めた `urlbuf` バッファが作られます。
これもログファイルが膨大な場合の再起動時に時間がかかる要因となるので、 autoload 設定しない方が良さげ。

### 発言をカラフルにする

```
/script install prism
```

このプラグインを入れると発言にランダムなレインボーカラーを付与する事ができます。以下の様な種類があります。

```
/prism hoge
```
![スクリーンショット 2014-03-29 12.53.42.png](https://qiita-image-store.s3.amazonaws.com/0/4497/295ebd5f-b0a5-2774-beeb-b855c4c2cd8b.png "スクリーンショット 2014-03-29 12.53.42.png")

```
/prism -e hoge
```
![スクリーンショット 2014-03-29 12.53.52.png](https://qiita-image-store.s3.amazonaws.com/0/4497/588021e0-cb63-287f-4450-49c9cd1e69e6.png "スクリーンショット 2014-03-29 12.53.52.png")

`eye-destroying colors` モードw

```
/prism -b hoge
```

![スクリーンショット 2014-03-29 12.52.31.png](https://qiita-image-store.s3.amazonaws.com/0/4497/afc750c0-c12c-1720-37af-d6949385d2b1.png "スクリーンショット 2014-03-29 12.52.31.png")

テキストのリバースもできます。無駄に楽しい。

### マインスイーパーがやりたい

```
/script install minesweeper
```

## 困っている事
- 画像URLが貼られた時にプレビューを表示したい

## その他
### ユーザーズガイド
weechat は [ユーザーズガイド](http://www.weechat.org/files/doc/stable/weechat_user.ja.html) が日本語で詳細に書かれている為、これを読めば大抵の事は解決すると思います。

### スクリプトプラグイン制作
様々な言語でスクリプトプラグインを作る事が出来るので、自分で書いてみるのも楽しそうです。
[スクリプト制作ガイド](http://www.weechat.org/files/doc/stable/weechat_scripting.ja.html) も日本語で読めるので便利！

### 参考サイト

- http://blog.tnmt.info/2012/02/08/weechat-growl-for-windows/
- http://blog.glidenote.com/blog/2012/02/11/weechat-plugins/
- http://inputxoutput.com/howto-weechat/
- https://gist.github.com/studio3104/6899792


## まとめ

CUI チャットクライアント weechat の導入から便利な設定までをご紹介しました。

Limechat 等の GUI クライアントに比べると初期設定など手がかかる部分もありますが、自分用にカスタマイズしていく楽しさもあり、ただの IRC クライアントでは無く環境の様な感じで使えるので大変気に入ってます。

もっと便利な使い方、プラグイン情報などありましたらコメント頂けると有り難いです！

良い IRC 生活を :)