RBBSはWebインタフェースの掲示板システムである。RBBSのユーザは、新規に記事(スレッド)を投稿したり、既存の記事に返事(レスポンス)をつけたりすることができる。RBBSは、掲示板すなわち多対多のコミュニケーションシステムとして利用することを第一義とするが、blogや日記システムのような、個人的もしくは一対多のコミュニケーションにも利用できる。RBBSは以下の特徴を備える。
RBBSはLinux、Solaris、HP-UX、FreeBSD、NetBSD、OpenBSD、Mac OS XおよびWindows(Cygwin)で利用できる。その他のUNIX系のOSでも利用できる。RBBSはC言語で実装されているので、スクリプト言語の実行環境は必要ない。CGIに対応しているWebサーバがあれば、RBBSを運用することができる。RBBSはGNU General Public Licenseに基づくフリーソフトウェアである。
ソースパッケージを用いてRBBSをインストールするには、GCCのバージョン2.8以降と `make' が必要である。これらはLinuxや各種BSDには標準的にインストールされている。
RBBSの配布用アーカイブファイルを展開したら、生成されたディレクトリに入ってインストール作業を行う。
ビルド環境を設定する。
./configure
プログラムをビルドする。Windowsでは、代わりに `make win' とする。
make
プログラムの自己診断テストを行う。
make check
プログラムをインストールする。作業は `root' ユーザで行う。Windowsでは、代わりに `make install-win' とする。実際にはシステム標準の場所にインストール必要はなく、後述する手順で任意の場所にインストールしてもよい。
make install
一連の作業が終ると、以下のファイルがインストールされる。
/usr/local/bin/rbbsutil /usr/local/bin/rbbsping /usr/local/libexec/rbbs.cgi /usr/local/share/rbbs/rbbs.dtd /usr/local/share/rbbs/rbbs.conf /usr/local/share/rbbs/rbbsstyle.css /usr/local/share/rbbs/rbbshelp.xml /usr/local/share/rbbs/rbbshelp-ja.xml /usr/local/share/rbbs/styles/...
RBBSはCGIスクリプトとして動作するので、CGIが利用できるようにWebサーバを設定しておく必要がある。例えばApacheを用いる場合、`httpd.conf' や `.htaccess' に以下のような設定を行う。
Options +ExecCGI AddHandler cgi-script .cgi
その上で、`rbbs.cgi'、`rbbs.conf'、`rbbsstyle.css'、`rbbshelp.xml' を、CGIが利用できる場所にコピーする。例えば、システム標準の場所にRBBSがインストールしてあり、`/home/mikio/public_html/rbbs' でRBBSを公開する場合は、以下の手順でコピーする。ソースパッケージにある同じファイルをコピーしてもよい。
cd /home/mikio/public_html/rbbs cp -Rf /usr/local/libexec/rbbs.cgi . cp -Rf /usr/local/share/rbbs/rbbs.conf . cp -Rf /usr/local/share/rbbs/rbbsstyle.css . cp -Rf /usr/local/share/rbbs/rbbshelp.xml .
`rbbshelp.xml' は英語のヘルプのファイルであるが、日本語のヘルプを表示したい場合は、代わりに `rbbshelp-ja.xml' を `rbbshelp.xml' としてコピーするとよい。
cp -Rf /usr/local/share/rbbs/rbbshelp-ja.xml rbbshelp.xml
`/usr/local/share/rbbs/styles' の中に `rbbsstyle.css' を置き換えるスタイルファイルとそこから参照される画像ファイルがあるので、適宜利用してほしい。
上記手順で設置した `rbbs.conf' が設定ファイルである。それを任意のエディタで編集する。設定ファイルは、属性名と属性値をコロンで区切った行から構成される。代表的な設定内容を以下に示す。この他に、表示される文字列を指定する属性が40個ほどある。不要な機能がある場合は、ラベルを空文字列にするとよい。設定ファイルの文字コードはUTF-8である。
systemuri: http://localhost/rbbs/rbbs.cgi dbname: casket helpfile: rbbshelp.xml stylefile: rbbsstyle.css logfile: jetlag: 1440 pagelang: en pagetitle: Raving Bulletin Board System pageauthor: mikio pagesummary: A book of quotations can never be complete. norobot: false captionfile: memocaption: true homepageuri: ../ adminpass: qwerqwer writepass: httpauth: false postauth: false artflags: resflags: languages: en,ja,ko,zh,de,fr,it,es,ru,ar categories: rave,agenda,suggestion,question,answer,confession,joke defsubject: defauthor: sort: mdd listnum: 32 shownum: 8 feednum: 32 blknum: 4 resnum: -16 filenum: 64
`systemuri' は、設置した `rbbs.cgi' のURI(URL)を指定する。少なくともこの項目だけは設置先に合わせて変更する必要必要がある。逆に言えば、他の項目はデフォルトのままで構わない。`dbname' は、記事のデータを保存するディレクトリの名前を指定する。`rbbs.cgi' の場所からの相対パスになるが、絶対パスで指定しても構わない。同様に、`helpfile' と `stylefile' は、ヘルプのXMLファイルとスタイルシートのCSSファイルのパスを指定する。`logfile' はログファイルのパスを指定する。`jetlag' はローカル時間帯の時差を分単位で指定する。この値が1440以上ならば、システムの日付から算出する。`pagelang'、`pagetitle'、`pageauthor'、`pagesummary' は、RBBSが表示するページの言語、題名、著者、概要を指定する。`norobot' は、ロボットを禁止するか否かを指定する。`captionfile' は、ページのキャプションとして表示するHTMLの断片を記述したファイルを指定する。`memocaption' は、メモをキャプションに挿入するかどうかを指定する。挿入するなら `true' にする。`homepageuri' は、ホームページのURIを指定する。`adminpass' は、管理者のパスワードを指定する。これを空にした場合、全てのユーザが管理操作を行うことができる。`writepass' は、記事の著者のパスワードを指定する。これを空にした場合、全てのユーザが記事の投稿を行うことができる。`httpauth' は、基本認証のユーザ名とRBBSのユーザ名を同期させるか否かを指定する。同期させるなら `true' にする。`postauth' は、各記事の著者にその記事の管理を委譲するかどうかを指定する。委譲するなら `true' にする。`artflags' は、各記事にデフォルトでつけるフラグを指定する。`resflags' は、各レスポンスにデフォルトでつけるフラグを指定する。`languages' と `categories' は、記事を投稿する際に選択可能な言語とカテゴリを、カンマ区切りのリストとして指定する。`defsubject' は題名の初期値を指定する。`defauthor' は著者名の初期値を指定する。`sort' は、記事の並び順を指定する。`cda'(作成日時昇順)、`cdd'(作成日時降順)、`mda'(更新日時昇順)、`mdd'(更新日時降順)のどれかの値をとる。`lisnum' は、新着リストで表示する記事の数を指定する。`shownum' は1ページに表示する記事の件数を指定する。`feednum' は、Atomフィードに掲載する記事の件数を指定する。`blknum' は、記事の簡略表示の際に表示するブロックの数を指定する。`resnum' は、表示するレスポンスの数を指定する。ゼロの場合は無制限となり、正数の場合はその数だけ先頭から選択して表示し、負数の場合はその絶対値の数を末尾(新着)から選択して表示する。`filenum' は、表示するファイルの数を指定する。
設定ファイルはCGIスクリプトと同じディレクトリに置かれるが、パスワードが記述してあるため、Webで公開されてはならない。したがって、設定ファイルが公開されないように、Webサーバの設定を行う必要がある。例えばApacheを用いる場合、`httpd.conf' や `.htaccess' に以下のような設定を行う。
<Files ~ "\.conf$"> Order allow,deny Deny from all </Files>
設定ファイルで指定したデータディレクトリは、CGIスクリプトの実行ユーザによって読み書きできる必要がある。例えば、以下のコマンドを実行する。CGIスクリプトの実効ユーザをデータディレクトリのオーナと同じにしてもよい。
cd /home/mikio/public_html/rbbs mkdir casket chmod 777 casket
設置したCGIスクリプト `rbbs.cgi' にアクセスすると、RBBSを利用できる。ページの上の方には、新着リストが表示される。すなわち、投稿された記事の題名が新着順(更新順)にリストされる。個々の題名を選択すると、その記事の内容を見ることができる。
新着リストの下にはナビゲーションリンクが置かれる。それらは以下の機能を持つ。
その下には、新着記事の本文が表示される。各記事の本文の肩にもナビゲーションリンクがある。それらは以下の機能を持つ。
新しい記事を投稿するには、ナビゲーションリンクの「POST」を選択する。すると、記事の内容を入力するページに移る。なお、投稿者がパスワードで制限されている場合は、パスワードを入力するページに移るので、そこで投稿者用のパスワードを入力する。
次に、「Language(言語)」「Category(分類)」「Subject(題名)」「Author(著者名)」を入力してから、「Text(本文)」を入力する。入力し終わったら「SUBMIT(送信)」を選択する。なお、「Password(管理用パスワード)」の欄がある場合は、そこで入力したパスワードを覚えておけば、後で管理者専用の「EDIT」機能が利用できる。
すると、入力した記事がどのように表示されるかを確認するページに移る。下の方にある「Source」というところは、その記事をXMLで表現したものである。表示を確認したら、「SUBMIT」を選択して記事を書き込む。
記事の各行は段落として扱われる。ただし、行頭が「!」の場合、その行は小見出しとして扱われる。行頭が「!!」の場合、その行は副小見出しとして扱われる。行頭が「*」の場合、その行は箇条書きとして扱われる。行頭が「|」の場合、その行は整形済みテキストとして扱われる。大量の整形済みテキストを扱うには、「===|」という行を前後に置けばよい。行頭が「@graph:」の場合、その行のURLを参照する画像として扱われる。行が「----」の場合、そこに罫線が引かれる。文の一部を修飾することもできる。文中で「[[^foo]]」とすると、「foo」は強調句になる。文中で「[[~foo]]」とすると、「foo」は引用句になる。文中で「[[+foo]]」とすると、「foo」は挿入句になる。文中で「[[-foo]]」とすると、「foo」は削除句になる。文中で「[[foo|bar]]」とすると、「foo」は「bar」へのハイパーリンクになる。本文の例を以下に示す。
!私のグルメ 私は自他ともに認める[[^グルメ]]です。 私の好きな料理を3つあげるとしたら、以下のものになるでしょう。 *ハヤシライス : 牛肉のコクが決め手 *ピザトースト : アクセントの[[-セロリ]][[+ピーマン]]が最高 *ホルモン焼 : ホッピーを飲みながらどうぞ !RBBSのロゴ 作りました。 @graph:http://rbbs.sourceforge.jp/logo.png ---- !Hello World C言語における最も簡単なプログラムです。 !!サンプル [[GCC|http://gcc.gnu.org/]]でコンパイルしました。 |int main(int argc, char **argv){ | printf("Hello, World\n"); | return 0; |} !!サンプル2 制御構文も習いましょう。 ===| int i; for(i = 0; i < 10; i++){ printf("%d\n", i); } ===|
記事の本文をXMLで構造化することもできる。本文の最初の文字が「<」の場合、本文がXMLとして扱われる。XMLの記事は以下のブロックから構成される。
ブロックの各要素およびitem要素の内容のテキストには、以下の修飾が可能である。
XMLによる本文の例を以下に示す。
<topic>朝食</topic> <para>今日の朝食はハムエッグだった。おいしかった。</para> <list> <item>ハムエッグ = 340 kcal.</item> <item>クロワッサン = 280 kcal.</item> <item>コーヒー = 0 kcal.</item> </list> <topic>昼食</topic> <para>昼食は<del>抜いた</del><ins>スニッカーズで済ませた</ins>。</para> <topic>夕食</topic> <para>豪勢に焼肉を食った。<emp>中落ちカルビ</emp>が最高だった。</para> <topic>今日の発見</topic> <para><link to="http://qdbm.sourceforge.net/">QDBM</link> というソフトを見つけた。ロゴがイマイチだった。</para> <graph data="http://qdbm.sourceforge.net/logo.png"/> <para><cite>幸福は香水のごときものである。</cite> -- エマーソン</para> <break/> <topic>今日のHello, World</topic> <asis>#include <stdio.h> int main(int argc, char **argv){ printf("Hello, World\n"); return 0; } </asis>
各記事にレスポンスをつけるには、その記事の「RESP」リンクを選択する。すると、記事の下にレスポンス用の入力フォームが表示される。左側の欄には著者の名前、右側の欄には本文を入力してから、「SUBMIT」を選択する。レスポンスが投稿された記事は更新されたとみなされ、表示順が先頭になる。
レスポンスの本文はプレーンテキストとして記述し、内容に改行を含むことはできない。本文を入力せずに「SUBMIT」を選択すると、書き込みせずに記事を再読み込みする。著者名が「sink:」で始まる場合、対象記事の更新時間は変化しない。
RBBSはAtom 0.3のシンジケーションをサポートする。新着記事のフィードと特定の記事のフィードの2種類が利用できる。ページの上の方にある「FEED」リンクは、最新の記事の更新情報のURLである。各記事にある「FEED」リンクは、その記事のみの更新情報のURLである。
RBBSが出力するHTMLは、XML(XHTML 1.0)に基づく。また、その内容はアクセシビリティを配慮した簡潔なものとなっている。プレゼンテーション(表示方法)は、`rbbsstyle.css' に記述されたCSSによって決められる。ユーザの環境に合わせてプレゼンテーションを変更する場合は、このファイルを修正してほしい。CSSの能力を越えたカスタマイズが必要な場合、RBBSの出力をXSLT等のツールで加工するとよい。
記事を閲覧する際には、Tabキーを利用すると、ナビゲーションリンクを次々と移動できて便利である。また、携帯電話でアクセスする際には、以下のショートカットキーを使うと便利である。
各記事の「EDIT」リンクを選択すると、管理者のパスワードを聞かれた後に、記事の編集用ページに移る。記事のデータはXMLで表現される。ルート要素は「article」であり、その内容として「head」「body」「tail」を含む。記事のXMLの完全な書式については、`rbbs.dtd' を参照すること。記事の文字コードはUTF-8でなければならない。
head要素は以下の要素を含む。各要素は全て必須であり、順番も以下に示す通りでなければならない。
body要素は記事の本文を表す。書式については「記事の投稿」の項を参照すること。
tail要素はレスポンスを表す。ゼロ個以上の「response」要素を含み、その内容はレスポンスの本文である。また、「response」要素は以下の属性を持つ。各属性は全て必須である。
XMLを編集し終えたら「SUBMIT」を選択して確認画面に移動する。さらにここで「SUBMIT」を選択すると、記事の編集が確定し、反映される。通常、記事の更新時間はその時点での日時に変更されるが、確認画面で「Update Time Stamp」のチェックを外した場合は、XMLで指定した更新日時がそのまま用いられる。
記事を編集する際にXMLを空にすると、その記事は削除される。
Webサーバのマシン上で管理作業を行うためのコマンドとして `rbbsutil' が提供される。書式は以下である。このコマンドは用途に応じた複数のサブコマンドから構成される。サブコマンド名は第2引数で指定する。
`rbbs export' と `rbbs dump' は、以下の環境変数の影響を受ける。
上記の他に、以下の管理機能を備える。
設定ファイルに平文のパスワードが記述していあることが気に入らない場合は、`rbbsutil password' コマンドを用いて生成したDES暗号を代わりに記述することができる。その際には、値に接頭辞 `crypt:' をつける。
adminpass: crypt:Qu57sOeCZArQA
新着記事へのレスポンスをデフォルトで禁止するには、設定ファイルの `artflags' の値に `l' を含めればよい。レスポンスによる記事のフローティングを禁止するには、`resflags' の値に `s' を含めればよい。
RBBSはフリーソフトウェアである。あなたは、Free Software Foundationが公表したGNU General Public Licenseのバージョン2あるいはそれ以降の各バージョンの中からいずれかを選択し、そのバージョンが定める条項に従ってRBBSを再頒布または変更することができる。
RBBSは有用であると思われるが、頒布にあたっては、市場性及び特定目的適合性についての暗黙の保証を含めて、いかなる保証も行なわない。詳細についてはGNU General Public Licenseを読んでほしい。
あなたは、RBBSと一緒にGNU General Public Licenseの写しを受け取っているはずである(`COPYING' ファイルを参照)。そうでない場合は、Free Software Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA へ連絡してほしい。
RBBSは平林幹雄が作成した。作者と連絡をとるには、`mikio@users.sourceforge.net' 宛に電子メールを送ってほしい。