RBBSバージョン1基本仕様書

Copyright (C) 2003-2005 Mikio Hirabayashi
Last Update: Wed, 16 Feb 2005 23:52:03 +0900

目次

  1. 概要
  2. インストール
  3. Webサイトの設定
  4. 利用方法
  5. 管理・運用
  6. よく聞かれる質問
  7. ライセンス

概要

RBBSはWebインタフェースの掲示板システムである。RBBSのユーザは、新規に記事(スレッド)を投稿したり、既存の記事に返事(レスポンス)をつけたりすることができる。RBBSは、掲示板すなわち多対多のコミュニケーションシステムとして利用することを第一義とするが、blogや日記システムのような、個人的もしくは一対多のコミュニケーションにも利用できる。RBBSは以下の特徴を備える。

アクセシビリティ
記事を投稿する際には、XMLによって本文における見出しや段落を構造化する。文書の見栄えはスタイルシートによって定義される。文書構造とプレゼンテーションが分離されるため、Web環境における様々なニーズに対応した情報発信が可能となる。また、Wiki風の書式にも対応しているので、簡単に記事を執筆したり編集したりすることができる。
フローティングスレッド
投稿された各記事にレスポンスがついた際には、その記事は表示順が先頭になる。頻繁にレスポンスがつく記事はユーザの目に入りやすい位置に表示されるため、ユーザは話題に追従しやすくなる。また、各レスポンスは1行のみで行うため、チャットのような気軽なコミュニケーションがとられる。
Atomシンジケーション
新着記事やレスポンスのついた記事をユーザが簡単に確認するため、Atom形式による新着情報の配信を行う。Atom対応のニュースリーダなどを用いると、他のニュースサイトの新着情報を確認すると同時に、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/...

Webサイトの設定

ファイルのコピー

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.
keywords: RBBS, BBS, accessibility, Atom, feed, LaTeX
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が表示するページの言語、題名、著者、概要を指定する。`keywords' は、検索用のキーワードを指定する。`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 &lt;stdio.h&gt;

int main(int argc, char **argv){
  printf("Hello, World\n");
  return 0;
}
</asis>

レスポンスの投稿

各記事にレスポンスをつけるには、その記事の「RESP」リンクを選択する。すると、記事の下にレスポンス用の入力フォームが表示される。左側の欄には著者の名前、右側の欄には本文を入力してから、「SUBMIT」を選択する。レスポンスが投稿された記事は更新されたとみなされ、表示順が先頭になる。

レスポンスの本文はプレーンテキストとして記述し、内容に改行を含むことはできない。本文を入力せずに「SUBMIT」を選択すると、書き込みせずに記事を再読み込みする。著者名が「sink:」で始まる場合、対象記事の更新時間は変化しない。

Atomシンジケーション

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引数で指定する。

rbbsutil import [-mod id] [-fw] name [file]
`name' で指定したデータベースに `file' で指定したXMLの記事をインポートする。`-mod' をつけると指定したIDの既存の記事を上書きする。`-fw' をつけるとXMLでなくWiki形式の記事をインポートする。
rbbsutil export [-ft] [-fh] [-fa] [-fl] [-fw] name id
`name' で指定したデータベースから `id' で指定したIDの記事のXMLをエクスポートする。`-ft' をつけると元来のXMLでなくプレーンテキストを出力する。`-fh' をつけると元来のXMLでなくHTMLを出力する。`-fa' をつけると元来のXMLでなくAtomを出力する。`-fl' をつけると元来のXMLでなくLaTeX形式を出力する。`-fl' をつけると元来のXMLでなくWiki形式を出力する。
rbbsutil delete name id
`name' で指定したデータベースから `id' で指定したIDの記事を削除する。
rbbsutil list [-scd] [-sma] [-smd] name
`name' で指定したデータベースにある記事のIDのリストを出力する。記事の表示順は作成日時の昇順である。`-scd' をつけると作成日時降順になる。`-sma' をつけると更新日時昇順になる。`-smd' をつけると更新日時降順になる。
rbbsutil dump [-ft] [-fh] [-fa] name
`name' で指定したデータベースにある全ての記事のXMLをダンプする。`-ft' をつけると元来のXMLでなくプレーンテキストを出力する。`-fh' をつけると元来のXMLでなくHTMLを出力する。`-fa' をつけると元来のXMLでなくAtomを出力する。`-fl' をつけると元来のXMLでなくLaTeX形式を出力する。
rbbsutil recover name [file]
`name' で指定したデータベースを `file' で指定したXMLのダンプデータから復旧する。
rbbsutil savefile [-mod id] [-pw str] [-sj str] [-at str] [-cd str] name [file]
`name' で指定したデータベースに `file' で指定したファイルを保存する。`-mod' をつけると指定したIDの既存のファイルを上書きする。`-pw'、`-sj'、`-at'、`-cd' の各オプションはパスワード、題名、著者名、作成日時の属性を指定する。
rbbsutil loadfile [-al] name id
`name' で指定したデータベースから `id' で指定したIDのファイルを読み出す。`-al' をつけるとファイルの内容でなく属性を出力する。
rbbsutil deletefile name id
`name' で指定したデータベースから `id' で指定したIDのファイルを削除する。
rbbsutil listfile name
`name' で指定したデータベースにあるファイルのIDのリストを出力する。
rbbsutil optimize name
`name' で指定したデータベースを最適化する。
rbbsutil initialize name
`name' で指定したデータベースを初期化する。
rbbsutil password key [code]
`key' のみを指定すると、それを暗号化した文字列を出力する。`key' と `code' を指定すると、`key' が `code' と合っているかどうか検査する。

`rbbs export' と `rbbs dump' は、以下の環境変数の影響を受ける。

その他

上記の他に、以下の管理機能を備える。

設定ファイルに平文のパスワードが記述していあることが気に入らない場合は、`rbbsutil password' コマンドを用いて生成したDES暗号を代わりに記述することができる。その際には、値に接頭辞 `crypt:' をつける。

adminpass: crypt:Qu57sOeCZArQA

新着記事へのレスポンスをデフォルトで禁止するには、設定ファイルの `artflags' の値に `l' を含めればよい。レスポンスによる記事のフローティングを禁止するには、`resflags' の値に `s' を含めればよい。


よく聞かれる質問

Q. : Radio BBS(無線パケット通信のシステム)と関係あるか。
A. : 全く関係ない。紛らわしい名前をつけて後悔している。
Q. : 他のblogシステムやWikiクローンとどう違うか。
A. : RBBSはblogやWikiというよりも、むしろチャットシステムの趣きが強い。記事を書くという行為は、チャットルームを開設してそのネタを振るということである。すなわち、記事の内容はチャットのネタ振りに過ぎないので、コンテンツマネジメントシステムとしての機能は重視されていない。
Q. : RSS 1.0はサポートしていないのか。
A. : していないし、するつもりはない。Atomで十分だからである。
Q. : レスポンスの本文もXMLで構造化できないか。
A. : できないし、できるようにするつもりはない。レスポンスがシンプルであることがRBBSの個性だからである。
Q. : 記事のデータベースが壊れることはあるか。
A. : まずない。しかし、OSのレベルでクラッシュする際にはその可能性はある。心配ならば、定期的にバックアップをとるべきである。
Q. : LaTeX形式の出力データがpLaTeXでコンパイルできないが。
A. : 文字コードがUTF-8なので、それをEUC-JPなどに変換する必要があるだろう。また、画像のファイルは手動でダウンロードする必要がある。
Q. : blogのpingを打ったり受けたりできないのか。
A. : 基本的にはできないが、付録の `rbbsping' コマンドを使えば、更新pingを手動で打つことはできる。

ライセンス

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' 宛に電子メールを送ってほしい。