概要

FreeStyle WikiはPerlによる拡張可能なWikiクローンです。 FreeStyle Wikiは以下のような特徴を持っています。

TOP


インストール

サーバへの設置

アーカイブを展開し、そのままのフォルダ構造でサーバにアップロードします(docsディレクトリは不要)。 wiki.cgiはブラウザから起動されるスクリプトなのでパーミッションを実行可能にしておきます。

また、アップロードしたディレクトリの直下にbackup、attach、pdf、logディレクトリを作成します。 ディレクトリのうちdata、backup、attach、pdf、log、configディレクトリには CGIから書き込みができるようパーミッションを設定して置いてください。

必要に応じて、data、configディレクトリにアップロードしたファイルも CGIから書き込み可能なようにパーミッションを変更してください。

全体の構成は以下のようになります。

 -+-/attach (添付ファイル)
  |
  +-/pdf(PDFファイル)
  |
  +-/tmpl(テンプレート)
  |
  +-/backkup(バックアップファイル)
  |
  +-/data(データファイル)
  |
  +-/log(ログファイル)
  |
  +-/config(設定ファイル)
  |
  +-/theme(テーマ)
  |
  +-/plugin(プラグイン)
  |
  +-/lib(ライブラリ)
  |
  +-wiki.cgi(CGIスクリプト本体)
  |
  +-setup.dat(設定ファイル)

設定が完了したらブラウザからwiki.cgiを呼び出してみてください。 FrontPageが表示されればとりあえず設置は成功です。

setup.datの設定

データ保管場所などFreeStyle Wikiの基本的な設定はsetup.datを編集することで行います。

FreeStyle Wikiでは、ページが変更された場合に管理者にメールで通知する機能があります。 この機能を有効にするにはsetup.datの設定内容にsendmailのパスかSMTPサーバのホスト名を設定します。

セキュリティ

上記で解説したインストール方法ではsetup.datや各種データを保存しているディレクトリをHTTPで参照できてしまいます。 セキュリティ上問題になるようであれば.htaccessを使用してアクセス制限を行ってください。

 <FilesMatch "\.(pm|dat|wiki|log)$">
   deny from all
 </FilesMatch>

なお、データディレクトリに関してはHTTPでは見えない場所に配置することも可能です。 その場合はsetup.datのディレクトリ指定部分を変更してください。

バージョンアップ時の設置方法

設置ディレクトリ直下にあるsetup.dat、dataディレクトリ、backupディレクトリ、pdfディレクトリ、 logディレクトリ、configディレクトリ以外のファイルおよびディレクトリをいったん削除し、 配布ファイルで置き換えてください。

setup.datはできるだけバージョン間で相違のないよう配慮していますが、 止むを得ずバージョンアップ時に内容を変更する必要がある場合があります。 できれば最新のファイルで上書きしたあと、設定内容を修正するようにしてください。

また、3.4.0以降ではバージョンアップによって管理画面での設定項目が追加されている場合があります。 一度管理ユーザにてログインし、設定の更新を行ってください。

データのバックアップ方法

dataディレクトリ、attachディレクトリ、configディレクトリをコピーしてください。 差分表示が必要であればbackupディレクトリ、PDFも必要であればpdfディレクトリもコピーしてください (PDFファイルはPDFアンカ押下時に生成することができるのでバックアップしなくても構いません)。

ログは、デフォルトではlogディレクトリにaccess.log(アクセスログ)、freeze.log(凍結用のログ)、 attach.log(添付ファイルのログ)が出力されていますので、必要に応じてこれらもコピーしておいてください。

mod_perlで使用する場合

Ver3.4.1よりmod_perlにも対応しています。wiki.cgiの先頭部分を編集し、 chdirの引数にFSWikiのインストールディレクトリを指定してください。 例えばFSWikiをC:/Apache/htdocs/fswikiに配置した場合は以下のようになります。

 BEGIN {
   if(exists $ENV{MOD_PERL}){
     # カレントディレクトリの変更
     use Cwd;
     chdir("C:/Apache/htdocs/fswiki");

なお、Apache::PerlRun環境では全ての機能が動作することを確認していますが、Apache::Registory環境下では plugin::core::DiffやPDF生成など一部の機能の動作に支障があります。

TOP


管理画面について

画面上部のログインメニューから管理者ユーザでログインすると管理画面を使用することができます。 デフォルトの管理ユーザはID:admin、Pass:adminになっています。ログイン後、パスワードを変更してください。 管理画面ではページの凍結や削除、ユーザの管理、Wikiの動作設定などを行うことができます。

ユーザには管理ユーザと一般ユーザの二種類が存在します。管理ユーザ、一般ユーザは共に凍結されたページの 編集を行うことができたり、ページの作成や編集を禁止されている場合でも作成、編集を行うことができます。 また、プラグインの中にはログインしている場合のみエントリフォームが表示されたりするものもあります。 ただし、管理画面を使用することができるのは管理ユーザだけです。一般ユーザは管理画面を使用することはできません。

TOP


プラグイン

FreeStyleWikiのディストリビューションには以下のプラグインが含まれており、 インストール直後に使用可能な状態になっています。ここではパッケージの概要のみ説明します。 インラインプラグインの説明についてはpluginhelpで表示されるヘルプを参照してください。

管理画面でパッケージごとにプラグインを使用するかどうかを設定することができますが、 coreパッケージを使用不可にするとFSWiki自体が動作不可能な状態になります。 また、adminパッケージを使用不可にするとログイン機能、管理機能が使用できなくなります。ご注意ください。

plugin::access

ページのアクセス数を表示するためのプラグインです。

plugin::admin

ログイン機能やFSWikiの環境設定、管理者によるページの一括削除、凍結機能などを提供するプラグインです。

plugin::attach

ページにファイルを添付するためのプラグインです。

plugin::bbs

Wikiのページを掲示板として使用するためのプラグインです。

plugin::bugtrack

FSWiki上で動作するバグトラックプラグインです。

plugin::calendar

カレンダを表示し、1日ごとにページを作成するためのプラグインです。

plugin::category

ページをカテゴライズするためのプラグインです。

plugin::comment

ページに1行コメントを書き込むためのプラグインです。

plugin::core

FreeStyle Wikiの基本機能を実装しているモジュール群です。

plugin::editlog

ユーザごとの編集履歴を記録し、各ユーザの編集回数やページの最終更新者などを表示するためのプラグインです。 デフォルトではインストールされません。 使用する場合は管理画面のプラグイン設定からeditlogにチェックを入れてください。

plugin::farm

WikiFarmを実現するためのプラグインです。デフォルトではインストールされません。 使用する場合は管理画面のプラグイン設定からfarmにチェックを入れてください。

インストールすると画面上部のメニューに「Farm」が追加され、 現在のWikiサイトの配下にWikiサイトを作成することができます。 また、管理画面に「WikiFarmの設定」が追加され、Wikiサイトの作成や削除を制限することもできます。

plugin::footnote

脚注を書くためのプラグインです。

plugin::google

Googleで検索するためのフォームを出力するプラグインです。

plugin::info

ページの情報を表示するためのプラグインを提供します。

plugin::partedit

パラグラフごとに編集を行うためのプラグインです。デフォルトではインストールされません。 使用する場合は管理画面のプラグイン設定からparteditにチェックを入れてください。

インストールすると見出しの下に「編集」というアンカがつき、パラグラフごとに編集できるようになります。 なお、mod_perl環境ではいったんインストールしたあとに管理画面でチェックを外しても「編集」アンカが残ってしまいます。 この場合、Apacheを再起動する必要があります。

plugin::pdf

PDFの生成を行うプラグインです。画面上部のPDFアンカからPDFを生成することができます。

plugin::recent

最近更新されたページを表示するためのプラグインです。

plugin::rss

ページの更新状況をRSSとして出力するプラグインです。

plugin::search

検索機能を提供するプラグインです。

plugin::todo

TODOを管理するためのプラグインです。

TOP


プラグイン開発

プラグインのインストール

プラグインはパッケージごとにディレクトリを作成し、pluginディレクトリに配置します。 プラグインを有効にするには管理画面から「プラグインの設定」で該当するプラグインにチェックを入れます。

プラグインを開発する場合、パッケージごとにまとめてパッケージ名::Installというモジュールを作成し、 そのモジュール内でインストール処理を行うようにします。

 package plugin::test::Install;
 sub install {
   my $wiki = shift;
   $wiki->add_inline_plugin("hello","plugin::test::TestPlugin");
 }

有効になっているパッケージは自動的ににplugin::test::Installモジュールのinstallメソッドが呼び出され、 プラグインのインストールが行われます。

アクションハンドラ

アクションハンドラプラグインはactionというリクエストパラメータによって クライアントへのレスポンスを行うプラグインです。 アクションハンドラプラグインはdo_actionメソッドを実装したクラスでなくてはなりません。 また、戻り値として、表示する内容(HTML)を返すようにします。

 sub do_action {
   my $self = shift;
   my $wiki = shift;
   return "アクションハンドラプラグインからの出力";
 }

アクションハンドラの登録はインストールスクリプト中でWiki#add_handlerメソッドによって行います。

 $wiki->add_handler("EDIT","plugin::core::EditPage");

管理者のみ使用可能なアクションハンドラはWiki#add_admin_handlerメソッドによって登録します。 このメソッドによって登録されたアクションハンドラは管理者としてログインしている場合のみ実行可能になり、 それ以外の場合はエラーメッセージを表示します。

 $wiki->add_admin_handler("ADMINPAGE","plugin::admin::AdminPageHandler");

フックプラグイン

フックプラグインはある契機で特定のメソッドを実行するプラグインです。 メニューのON/OFF切り替えや、ページ保存時などのタイミングで特殊な処理を行う場合に使用します。 フックプラグインはhookメソッドを実装したクラスでなくてはなりません。

hookメソッドの第3引数には起動されたフックの名前が渡されます。 1つのクラスで複数の処理を実装する場合はこの変数を見て処理を分けます。

 sub hook {
   my $self = shift;
   my $wiki = shift;
   my $name = shift;
   ...
 }

フックプラグインの登録はインストールスクリプト中でWiki#add_hookメソッドによって行います。

 $wiki->add_hook("show","plugin::core::BBS");

フックには以下ものが存在します。

インライン

インラインプラグインはWiki文書中に{{プラグイン名 [引数1,引数2...]}}で埋め込むことで、特殊な出力を行うプラグインです。 インラインプラグインはinlineメソッドを実装したクラスでなくてはなりません。 戻り値としてWiki形式の文字列またはHTMLを返すようにします。Wiki形式のテキストを返す場合はPDFにも出力が反映されます。

以下にHTMLを返すプラグインの例を示します。

 sub inline {
   my $self = shift;
   my $wiki = shift;
   return "<B>簡単なプラグインです。</B>";
 }

以下はWiki形式のテキストを返すプラグインの例です。

 sub inline {
   my $self   = shift;
   my $wiki   = shift;
   my $parser = shift;
   return "[[FrontPage]]";
 }

インラインプラグインの登録はインストールスクリプト中でWiki#add_inline_pluginメソッドによって行います。 第一引数には実際にWikiページを記述する際にプラグインを指定するための文字列、 第二引数にはプラグインのクラス名、第三引数にはそのプラグインの返す文字列に応じてHTMLまたはWIKIを指定します。

 $wiki->add_inline_plugin("edit","plugin::core::Edit","HTML");

パラグラフ

パラグラフプラグインはWiki文書中に{{プラグイン名 [引数1,引数2...]}}で埋め込むことで、特殊な出力を行うプラグインです。 インラインプラグインと違って1行にプラグインしか記述できず、Pタグの補完も行われません。 テーブルやフォーム、リストなどを出力するプラグインをパラグラフプラグインとして実装します。 パラグラフプラグインはparagraphメソッドを実装したクラスでなくてはなりません。

paragraphメソッドは実装方法自体はインラインプラグインと同様です。以下にHTMLを返す場合の例を示します。 Pタグは補完されないので必要に応じてプラグイン側でつけてやる必要があります。

 sub paragraph {
   my $self = shift;
   my $wiki = shift;
   return "<p>パラグラフプラグインです。</p>";
 }

以下はWiki形式の文字列を返す場合の例です。

 sub paragraph {
   my $self   = shift;
   my $wiki   = shift;
   my $parser = shift;
   $parser->parse("*[[FrontPage]]\n".
                  "*[[Help]]\n");
 }

パラグラフプラグインの登録はインストールスクリプト中でWiki#add_paragraph_pluginメソッドによって行います。 第一引数には実際にWikiページを記述する際にプラグインを指定するための文字列、 第二引数にはプラグインのクラス名、第三引数にはそのプラグインの返す文字列に応じてHTMLまたはWIKIを指定します。

 $wiki->add_paragraph_plugin("bbs","plugin::bbs::BBS","HTML");

エディットフォーム

エディットフォームプラグインはページの編集画面に表示されるプラグインです。 エディットフォームプラグインはeditformメソッドを実装したクラスでなくてはなりません。 editformメソッドは編集画面に表示するHTMLを返却するよう実装します。

エディットフォームプラグインの登録はインストールスクリプト中で Wiki#$wiki->add_editform_pluginメソッドによって行います。

 $wiki->add_editform_plugin("plugin::core::EditHelper",0);

第3引数にはそのプラグインの表示優先度を指定します。この値が大きいほど上位に表示されます。

メニューアイテム

Wikiオブジェクトのadd_menuメソッドで画面上部のメニューアイテムを追加することができます。

 $wiki->add_menu(名称,URL,優先度);

第3引数にはそのプラグインの表示優先度を指定します。この値が大きいほど左側に表示されます。 また、URLを省略するか、空文字列を設定すると無効なメニューが登録されます。 既に同じ名前のアイテムが登録されていた場合は上書きされます。

管理者メニュー

Wikiオブジェクトのadd_admin_menuメソッドで管理者ログイン時のメニューを追加することができます。 このメニューが表示されるのは管理者がログインした場合のみです。一般ユーザがログインしても表示されません。 また、管理者メニューから呼び出されるアクションハンドラはadd_admin_handlerで登録しておくと ログインチェック、権限チェックが自動化されます。

 $wiki->add_admin_menu(名称,URL);

TOP


THANKS

FreeStyle Wikiでは以下のライブラリを使用しています。これらについての著作権は原作者が持ちます。 有用なライブラリを無償で提供してくださっている作者の皆様に感謝します。

PDFJ

http://hp1.jonex.ne.jp/~nakajima.yasushi/

PDFの生成にPDFJを使わせていただいています。 Pure Perlで実装されており、手軽にPDFを生成することができる素晴らしいライブラリです。

TeX::Hyphen

http://search.cpan.org/author/JANPAZ/TeX-Hyphen-0.140/

PDFJで欧文のハイフネーションを行うために使用しているそうです。

Algorithm::Diff

http://search.cpan.org/author/NEDKONZ/Algorithm-Diff-1.15/

差分の表示に使用してます。

HTML::Template

http://search.cpan.org/author/SAMTREGAR/HTML-Template-2.6/

Jcode

http://search.cpan.org/author/DANKOGAI/Jcode-0.83/

3.4.1よりjcode.plの代わりに使用しています。

libwww

http://search.cpan.org/author/GAAS/libwww-perl-5.69/

RSSの取得などHTTP通信に使用しています。Active Perlでは不要です。

libnet

http://search.cpan.org/author/GBARR/libnet-1.16/

Net::SMTPでのメール送信に使用しています。

MIME::Base64

http://search.cpan.org/author/GAAS/MIME-Base64-2.20/

メール送信時のMIMEエンコードに使用しています。Perl 5.8.0以降およびActive Perlでは不要です。

URI

http://search.cpan.org/author/GAAS/URI-1.23/

libwwwが内部的に使用しているようです。Active Perlでは不要です。

CGI::Session

ログイン機能のセッション維持に使用しています。

http://search.cpan.org/author/SHERZODR/CGI-Session-3.94/

Digest::MD5

http://search.cpan.org/author/GAAS/Digest-MD5-2.25/

CGI::Sessionが内部的にセッションIDの生成に使用しています。Perl 5.8.0およびActive Perlでは不要です。

Digest::Perl::MD5

http://search.cpan.org/author/DELTA/Digest-Perl-MD5-1.5/

Digest::MD5のPure Perl実装です。Perl 5.8.0およびActive Perlでは不要です。

tDiary

http://www.tdiary.org/

突っ込み、スタイル、プラグインなど斬新な機能を多数搭載したRubyによるWeb日記システム。 tDiary用のスタイルを使用させていただいてます。

TOP


ライセンス

FreeStyle WikiはGNU GPLライセンスの元で配布、改変が可能です。 FreeStyle Wikiに組み込むプラグインを公開される方はGPLコンパチのライセンスを推奨しますが、 その他のライセンスを宣言されても構いません。また、パッチに関しては本体にあてるものはGPL、 プラグインにあてるものはプラグインのライセンスにしたがうものとします。

TOP


作成者

Copyright 2002 - 2003 Naoki Takezoe <takezoe@netcentury.co.jp>

TOP