WebOS Goodies

WebOS の未来を模索する、ゲームプログラマあがりの Web 開発者のブログ。

WebOS Goodies へようこそ! WebOS はインターネットの未来形。あらゆる Web サイトが繋がり、共有し、協力して創り上げる、ひとつの巨大な情報システムです。そこでは、あらゆる情報がネットワーク上に蓄積され、我々はいつでも、どこからでも、多彩なデバイスを使ってそれらにアクセスできます。 WebOS Goodies は、さまざまな情報提供やツール開発を通して、そんな世界の実現に少しでも貢献するべく活動していきます。
Subscribe       

TWiki : データベースアクセスプラグインを使う

さて、また TWiki ネタ再開です。あとひとつ試したいものがあります。TWiki から本当のデータベースをアクセスするための DatabasePlugin です。これを使用すると、MySQL などのデータベースに格納されたデータを TWiki のページで利用できます。プラグイン導入方法の紹介も兼ねて、今回はこの DatabasePlugin をインストールしてみようと思います。

当然ながら、このプラグインの動作にはなんらかのデータベース(MySQL と Oracle で動作確認されているようです)が必要です。MySQL のインストール方法などは MySQL のページをご覧ください。

インストール

それでは、DatabasePlugin をインストールしましょう。残念ながら GentooLinuxebuild などは用意されていませんので、手動でインストールしなければなりません。

ファイルのインストール

プラグインのインストールはアーカイブファイルをダウンロードして $TWiki(TWiki のインストールディレクトリ)にコピーするだけです。以下のようにコマンドを実行すればよいと思います。

wget http://twiki.org/p/pub/Plugins/DatabasePlugin/DatabasePlugin.zip
unzip DatabasePlugin.zip
cp -R bin data lib $TWiki

"$TWiki" は TWiki のインストールディレクトリです。また、.zip ファイルの URL は変更されている可能性もありますので、DatabasePlugin のページで確認したほうが無難です。ページの一番下にある添付ファイルです。

データベース・テーブルの作成

ここでアクセスするデータベースと専用のユーザーを作成してしまいましょう。mysql コマンドでデータベースに接続し、以下の SQL を実行します。

CREATE DATABASE twiki;
GRANT select, on twiki.*
    to twiki@localhost identified by 'パスワード';

ここでは仮にデータベース名を "twiki" ユーザー名を "twiki" としています。もちろんその他の名前でもかまいません。

さらに、テーブルも作成しておく必要があります。テーブルのカラム構成は任意でかまいませんが、ここでは簡単な電話帳のデータベースとして以下のようなテーブル "phone" を作成しておきます。

CREATE TABLE twiki.phonebook (
    id INT AUTO_INCREMENT PRIMARY KEY,
    name VARCHAR(256),
    phone VARCHAR(256) );

以降の例では上記の設定を前提にしますので、変更した場合は適宜読み替えてください。

設定ファイルの編集

DatabasePlugin の設定ファイルは "/var/www/$TWiki/bin/DatabasePluginConfig.pm" です。ここにアクセスするデータベースの情報を記述します。後述しますが、このファイルは公開してしまうと非常にまずいので、Apache の設定でアクセスを拒否する必要があります。

前半ではいくつかグローバル変数が定義されていますが、$db_driver を "Local" に設定するだけで OK です(デフォルトでそうなっているはずです)。

ポイントはその次の @dbinfo です。配列になっており、各要素にひとつのテーブルの情報を格納します。各要素も配列になっており(つまり @dbinfo は 2 次元配列なわけですね)、そこには以下のような情報を格納します。

インデックス格納する情報
0Wiki からアクセスする際に使用する識別子
1データベースプログラムの種類
2データベース名
3Oracle の SID というもの。よくわからない^^;
4テーブル名
5アクセスに使用するユーザー名
6ユーザーのパスワード
7データベースが動作しているホストの FQDN

今回の場合は、以下のように記述すればよいでしょう。

@dbinfo = (
    [
    "phonebook",        # description
    "mysql",            # DB driver
    "twiki",            # DB name
    "mySID",            # DB sid
    "phonebook",        # DB table
    "twiki",            # DB username
    "twiki_pass",       # DB password
    "localhost"         # DB host
    ]
);

Apache の設定

"DatabasePluginConfig.pm" にはデータベースユーザーのパスワードが生で記録されているため、外部に公開するのはよろしくありません。そこで、Apache の設定でアクセスを拒否してしまいましょう。

具体的には、バーチャルホスト の設定に以下の記述を追加すればよいでしょう。Location に関しては TWiki がルートにインストールされていることを前提にしています。それ以外の場合は、適宜パスを修正してください。もちろん、".htaccess" を使っても問題ありません。

<Files "/var/www/$TWiki/bin/DatabasePluginConfig.pm">
    deny from all
</Files>
<location "/bin/DatabasePluginConfig.pm">
    deny from all
</location>

また、"DatabasePluginEdit" というスクリプトもアクセスを禁止しておいたほうが良いでしょう。これは phpMyAdmin 経由でデータベースのテーブルを編集するためスクリプトですが、残念ながらうまく動作させることができませんでした。妙な動作をされても困るので、いっそのことアクセス禁止にします。

<location "/bin/DatabasePluginEdit">
    deny from all
</location>

以上の設定をしたら、Apache を再起動しておきましょう。

/etc/init.d/apache restart

プラグインの有効化

最後に、TWikiConfigure 画面でプラグインを有効にします。インストール時に各種設定をした、"http://$TWiki/bin/configure" のページです。インストール時同様、ファイルの所有権を一時的に変更する必要があります。詳細は TWiki のインストールを参照してください。

プラグインの設定は以下の場所にあります。

設定して「Next」のボタンをクリックすると、パスワードを聞いてきます。インストール時に指定したパスワードを入力してください。

以上で Database プラグインのインストールは終了です。

使ってみる

それでは、動作確認を兼ねて使ってみましょう。まずはテーブルにデータがないと始まらないので、mysql コマンドでデータベースに接続して以下のレコードを挿入します。

INSERT twiki.phonebook
    (name,phone) VALUES ('hokousya','03-1234-5678');

そして、Sandbox Web のページに行き、お馴染み「Create TestTopic###」のボタンで新しいページを作成します。内容は以下のようにしてください。

%DATABASE_TABLE{description="phonebook"}%

ページを保存すると、以下のように先ほどテーブルに挿入したデータがきちんと表示されています。ブラボー!

と、ここまではよかったのですが、Database プラグインのページにあるその他の文法を試そうとしたところ、エラーが出てしまいました。ちょっと調べてみたところ、このプラグインは 2004 年からメンテナンスされてませんね・・・orz。現在のバージョンには対応できていないのかもしれません。

最後はちょっと残念な結果に終わってしまいましたが、TWiki 自体は非常に高機能で、とても応用範囲の広いシステムです。多人数で高度な Web サイトを構築する際には最適のシステムと言えるのではないでしょうか。というところで、TWiki シリーズを終わりにしようかと思います。ユーザー認証など、もっとやりたかったこともあるのですが、さすがに疲れました(^^ゞ。また今度、気が向いたら挑戦したいと思います。

関連記事

この記事にコメントする

Recommendations
Books
「Closure Library」の入門書です。
詳しくはこちらの記事をどうぞ!
Categories
Recent Articles