概要

FreeStyle WikiはPerlによる拡張可能なWikiクローンです。 日本語による技術的なドキュメントをWebベースでメンテナンスすることを目的としています。 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(設定ファイル)
  |
  +-/images(画像ファイル)
  |
  +-/theme(テーマ)
  |
  +-/plugin(プラグイン)
  |
  +-/lib(ライブラリ)
  |
  +-wiki.cgi(CGIスクリプト本体)
  |
  +-setup.dat(設定ファイル)

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

setup.datの設定

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

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

セキュリティ

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

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

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

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

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

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

また、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");

TOP


管理画面について

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

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

TOP


プラグイン

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

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

plugin::core

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

plugin::admin

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

plugin::farm

WikiFarmを実現するためのプラグインです。

plugin::info

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

plugin::comment

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

plugin::bbs

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

plugin::recent

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

plugin::rss

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

plugin::search

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

plugin::attach

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

plugin::pdf

PDFの生成を行うプラグインです。

plugin::bugtrack

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

plugin::category

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

plugin::calendar

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

plugin::todo

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

TOP


プラグイン開発

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

プラグインのインストールはsetup.plのinit関数で行います。 実際にはパッケージごとにまとめてパッケージ名::Installというモジュールを作成し、 そのモジュール内でインストール処理を行うようにします。

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

setup.plでプラグインをインストールします。

 $wiki->install_plugin("plugin::test");

この場合は内部的に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メソッドを実装したクラスでなくてはなりません。 inlineメソッドの第3引数以降にWiki文書中で指定した引数が渡されます。 また、記述された位置に出力する内容(HTMLも可)を返すよう実装します。

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

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

 $wiki->add_plugin("bbs","plugin::core::BBS");

エディットフォーム

エディットフォームプラグインはページの編集画面に表示されるプラグインです。 エディットフォームプラグインは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通信に使用しています。

MIME::Base64

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

メール送信時のMIMEエンコードに使用しています。

tDiary

http://www.tdiary.org/

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

TOP


ライセンス

FreeStyle WikiはGNU GPLライセンスの元で配布、改変が可能です。

TOP


作成者

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

TOP