plum

### はじめに

plumはIRC(internet relay chat)用の中継/クライアントプログラムです。 IRCサーパとIRCクライアントの接続を中継していろいろな機能を提供します。 同じようなプログラムにpircなどがありますが、 plumには以下のような特徴があります。

拡張が簡単
  plumの提供する機能のほとんどはモジュールで実現されています。 モジュールは簡単に組み込んだり取り外したりでき、 自分で作ることもできるので、好きな機能を追加することができます。
デバッグが簡単
  plumは徹底したモジュール化を行っているので、 バグの原因になっているモジュールを簡単に特定することができます。 また、plumは実行の際に未定義の変数をチェックしているので、 変数名の間違いなどを簡単に発見することができます。
いろいろなOSで動く
  plumはperlで書かれていますが、 特定の環境に依存する処理はほとんど行っていないため、 perlさえあればハードウェアやOSを問わず、どんな環境でも動作します。
複数のサーバに接続できる
  plumは同時に複数のサーバに接続できるように設計されています。 そのため、複数のIRCネットワークを同時に利用したり、 1つのplumでメッセージなどに自動で反応するロボットを 複数常駐させることができます。

### plumの動作

plumはIRCサーバとIRCクライアントとの間で転送を中継します。 つまり、本来は直接接続するはずのIRCサーバとIRCクライアントを 接続しないようにし、IRCサーバとplum、plumとIRCクライアントを接続します。 これによりplumはIRCサーバとIRCクライアントから送られてくる メッセージを全て受け取ることができます。 plumはIRCサーバからメッセージを受け取るとそれをIRCクライアントへ送り、 IRCクライアントからメッセージを受け取るとそれをIRCサーバへ送ります。 そのためIRCサーバもIRCクライアントも間にplumがあることを意識 することなく動作することができます。
plumを使う場合と使わない場合では以下のような違いがあります。 まず、plumを使わない場合はIRCクライアントからIRCサーバへ直接接続します。 このときIRCクライアントとIRCサーバがお互いに接続されています。

        IRCクライアント --- IRCサーバ

plumを使うと、plumがIRCクライアントとIRCサーバの中継を行います。 このときIRCクライアントとplum、plumとIRCサーバは接続されていますが、 IRCクライアントとIRCサーバは接続されていません。

        IRCクライアント --- plum --- IRCサーバ

これだけでは実際にはplumはあってもなくても同じで、 ただIRCクライアントとIRCサーバが直接接続されていないだけです。 そこでplumはIRCクライアントに対してはIRCサーバのふりをし、 IRCサーバに対してはIRCクライアントのふりをします。

                           +---- plum ----+
        IRCクライアント --- IRCサーバ
                            IRCクライアント --- IRCサーバ

これにより、plumにIRCクライアントが接続されていないときでも IRCサーバからはIRCクライアントがあるように見え、 plumにIRCサーバが接続されていないときでも、 IRCクライアントからはそこにIRCサーバがあるように見えます。 そのため、IRCクライアントを終了してしまっても、 IRCサーバからはまだIRCクライアントが接続されているように見えます。 IRCに常駐している人の多くは、このような方法でIRCサーバに接続しています。

### 必要なもの

plumを利用するためには以下のものが必要です。

perl
  plumはperlで書かれているので、 実行するためにはperlインタプリタが必要になります。 perlはバージョン4.036以上のものならどれでもかまいませんが、 ネットワークの機能を使用しているため、 なるべくバージョン5.003以上のものをおすすめします。 また、MS-DOS用などのperlではネットワークの機能が 実装されていないものがありますが、 このようなperlではplumを実行することはできません。
ネットワーク
  IRCはネットワークを利用したサービスなので、 IRCのゲートウェイであるplumもネットワークを利用しています。 そのため、ネットワークが利用できない環境では plumを利用することはできません。
IRCクライアント
  plumは単なるゲートウェイにすぎないので、 plumを利用するためにはIRCのクライアントプログラムが必要です。 IRCクライアントはどんなものでもかまいませんが、 RFC1459のIRCプロトコルに準拠したものを使用して下さい。 また、IRCクライアントは日本語に対応しているものがよいですが、 plumには漢字コードを変換する機能があるので、 日本語に対応していないものでも利用できるものがあります。

### 実行方法

plumを実行するためには、シェルやMS-DOSプロンプトから以下のように入力します。

        perl plum

実行時のオプションなどはありません。 plumを実行すると、plum.confという設定ファイルを読み込んで、 それに従ってモジュールの組み込みを行います。 このとき、plum.confが見つからなければ何もせずに終了します。
また、複数の設定ファイルを同時に読み込んで複数のサーバに接続したり、 複数のユーザを常駐させることもできます。 この場合は以下のように入力します。

        perl plum user1 user2

このとき、plum.conf、plum-user1.conf、plum-user2.confの 3つの設定ファイルを読み込みます。 指定した設定ファイルのどれかが見つからなくても無視して実行します。 例えばplum.confが見つからなければ、 plum-user1.confとplum-user2.confの2つの設定ファイルだけを 読み込んで実行します。 ただし設定ファイルが1つも見つからない場合は何もせずに終了します。

### クライアントの設定

plumを実行することができたら、次にplumにIRCクライアントを接続します。 IRCクライアントを接続するためには、 IRCクライアントの設定を変更する必要があります。 plumはIRCサーバのふりをするので、IRCクライアントからは 本物のIRCサーバではなく、plumに接続することになります。 そのため、IRCサーバに関する設定をplumに対する設定に変更します。

1. まず、IRCサーバの名前をplumを実行したマシンの名前にします。 plumを実行したマシンに名前がついていない場合、 もしくは名前がわからない場合は、名前のかわりにIPアドレスを指定します。
2. 次に、IRCサーバのポート番号をplum.confで指定したポート番号に変更します。 ここで指定するポート番号はplum.clientで指定したポート番号です。 plum.confでポート番号の設定をしていないなら、デフォルト6667を指定します。
3. 最後に、IRCサーバに接続するパスワードを設定します。 本物のIRCサーバは普通パスワードを要求しませんが、 plumでは普通パスワードを設定して他の人に勝手に使われないようにします。 ここで指定するパスワードはplum.clientで指定したパスワードです。 plum.confでパスワードの指定をしていないなら、 IRCクライアントでもパスワードに関する設定は必要ありません。

これでIRCクライアントからplumに接続できるはずです。 接続できない場合は設定が間違っていないかをよく確認して下さい。 また以下のトラブルシューティングも参考にして下さい。

### トラブルシューティング

実行してもすぐに終了する
  plum.confがない
    plum.confはカレントディレクトリにあるものを使用します。 カレントディレクトリにplum.confがあることを確認して下さい。
サーバに接続しない
  ファイアウォールがある
    plumはサーバとの間にファイアウォールがあると、 サーバに接続することができません。 ファイアウォールの影響を受けないところでplumを実行して下さい。
  サーバの接続がいっぱいになっている
    サーバに接続できる人数がいっぱいになると、 それ以上接続することができなくなります。 plum.confに別のサーバの設定を追加して下さい。
  ネットワーク距離が遠い
    ネットワーク的な距離が遠かったり、 回線速度が遅いと接続するまでに非常に 時間がかかることがあります。
クライアントから接続できない
  ファイアウォールがある
    plumとクライアントとの間にファイアウォールがあると、 クライアントから接続することができません。 ファイアウォールの影響を受けないところでplumを実行して下さい。
  ネットワーク距離が遠い
    ネットワーク的な距離が遠かったり、 回線速度が遅いと接続するまでに非常に 時間がかかることがあります。
クライアントから接続してもすぐに切られてしまう
  plum.confに設定したクライアントマスクに引っかかっている
    IRCクライアントを実行しているマシンが、 plum.clientで許可されているかどうか確認して下さい。
  別のユーザが同じポートをすでに使用している
    plum.clientのポートの番号を変更してみて下さい。
  パスワードが間違っている
    パスワードは正しく入力して下さい。
その他
  不明
    どんな状態なのかをなるべく詳しく教えて下さい。 その時にできればsys/dump.plmの出力する システム情報を一緒に教えて下さい。