詳細

Chippieの目指すところ

Chippieは「CMS as Hybrid-system with Pluggable Pieces」の略称です。

一般的なCMS(Contents Management System)の定義に、データベース上のデータレコードを実際にサーバ上に存在するファイルとほぼ同等のものとして扱うHybrid-systemという考え方を取り入れました。一般ユーザ向けのインターフェース(CMS/PMSモジュール)のほか、高度に抽象化されたPHPプログラマ向けライブラリ(Chippie コアライブラリ)を提供します。

抽象化の過程でできる限り無駄を省き、データベースサーバへのリクエストをキャッシュするなど簡単な軽量化の工夫も施してあるため、たいていのサーバで軽快に動作します。

また、コアライブラリを用いて構築するWebページ上には、ピースと呼ばれるAjaxオブジェクトを配置できます。ピースには様々な種類があり、PHPプログラマなら自作も可能です。Ajaxで使われる複雑なJavaScriptを記述することなく、ページ遷移を必要としない動的なWebページを作れるようになっています。

Hybrid-system

元来、WebサイトのアドレスはHTMLファイルと一対一に対応しているのが普通でした。ところが、Webアプリケーションを容易に開発できる環境が整い、サーバのアドレス書き換えモジュール(Apache mod_rewriteなど)が多用されるようになるなどの経緯を経て、今やWebサイトのアドレスがファイルのありかを指す必然性はどこにもありません。

そこで、Webサイトが指すWebページという概念を抽象化し、PHPでページのクラスを定義しました。ページクラスのインスタンスが個々のWebページであり、インスタンス化のパラメータとしては、ファイルもデータベースから引かれたデータも取れる─すなわち、具体的なファイルとデータベース上のデータレコードがほぼ等価に情報源として扱われるしくみをHybrid-systemと称しているのです。

また、Webサイトのアドレスは、そこに存在するWebページの内容をある程度想起できるものであるべきです。ブログなどの一部のCMSではデータを効率的に操作するためにアドレスを人間に理解できない文字列にしてしまう措置が取られていますが、Chippieはむしろアドレスの重要性に着目しています。Hybrid-systemでは、ファイルならファイル名を変えればアドレスが変わるのはもちろんのこと、データベースからどのデータを引いてくるかを決めるアドレスもページ制作者の意図に応じて柔軟に変えられるようになっています。

Chippie コアライブラリ

記事や企画、企画の分類、ユーザやグループなど、多機能なWebサイトを設計する上で似た概念はたくさん出てきます。これらをPHP4以降のオブジェクト指向に依った機能で使いやすくクラス化し、場合によっては特別な変数名にインスタンス化して用意してくれるのがChippieのコアモジュールです。

Webページの抽象クラス(page, base, xhtml_connected, xhtml e.t.c.)

実際には、PHPファイルから以下のようにライブラリを呼び出して使います。

<?php
	include("lib/chippie/default.php");
	$p = new page("新しいWebページ");
	$p->set_style("special.css");
	$p->header();
?>

<h1>テスト</h1>
<p>段落。</p>

<?php
	$p->footer();
?>

ライブラリの default.php を include すると、Webページの抽象クラス page などが定義されます。この例では変数 $p にインスタンス(実体)を生成し、メソッド set_style で追加のスタイルシート special.css を読むよう設定したあと header メソッドで <html> などのお決まりのタグを出力しています。「お決まり」として出力する細かい内容は page_template.php というテンプレートファイルを編集することで自由に変えられます。

なお、 page クラスはテンプレートを出力するだけでなく、初めてインスタンス化されたときは、ページのアドレスをChippieデータベースに登録してユニークなID(リソースIDと呼びます)をもらい、アクセスカウンタを初期化するなどの作業を自動で済ませてくれます。

データベースに登録させたくないページには page の親系にあたる base クラスが用意されており、HTMLレベルで特別なデザインを適用させたいページのために xhtml_connectedxhtml クラスが用意されています。もちろん、自分でこれらのクラスを継承した新しいクラスを作ることもできます。

ユーザやグループ、記事情報などを管理するインスタンス(users, groups, articles e.t.c.)

コアライブラリを読み込んだとき定義されるのは抽象クラスだけではありません。特別な名前の変数が特別なクラスのインスタンスとなり、データベースを簡単に操作できるようになります。

	$a = $users->by_slug("arc");
	echo "$a->name's mail address is $a->mail.";

この例では、ユーザ登録された人たちの中から arc というIDを持つユーザを探し出し、その情報を $a に代入して、次の行で出力しています。個々のユーザ情報は c_user という抽象クラスで管理され、それぞれ name とか mail といったメンバ変数を持っており、変数 $users は全てのユーザ情報を統括する特別なインスタンスです。 update とか delete といったメソッドを持っています。

他にも、グループ(クラス c_group)を統括する変数 $groups や記事情報(クラス c_article)を管理する変数 $articles などがあり、それぞれ同様に update, delete などのメソッドを持っています。

さて、ユーザにしろ、グループや記事情報にしろ、多数の要素と、その集合を管理するマネージャという構図は変わりません。そこで、全ての要素クラスは親に抽象クラス c_element を持ち、全てのマネージャは抽象クラス c_controllerc_controller_connected を少し改変したクラスのインスタンスとなるように設計されています。

冒頭の繰り返しになりますが、以上のように、Webサイトの作成と運営に必要な機能を、なるべく簡潔に、クラスの継承によって取りまとめたのがChippie コアライブラリなのです。ライブラリとしてはPEARほどの汎用性は持ち合わせていませんが、一般的なWebサイトに必要な道具が最初から一揃い準備してあり、足りない場合は既存のクラスを継承するなどして簡単に機能を拡張できるため、一般的なCMSよりも小回りがきく設計になっています。

CMS/PMSモジュール

上述のコアライブラリを使って作られたChippieシステムの一部がCMS/PMSモジュールです。ページの制作者(PHPやHTMLのプログラマとは限らない)や権限を持った閲覧者が、Webページ上のインターフェースを通じて記事情報やユーザ情報を登録・編集できるようにするしくみです。

CMS(Contents Management System)モジュール

Chippieでは、Webページの情報をリソースIDという最小単位ごとにデータベースで一元管理しています。各リソースIDごとにトラックバックやコメント、アクセス数や所属する企画の情報などが保存されており、CMSモジュールはそれらの値をWebページ上から簡単に操作できるようにしてくれます。

Hybrid-systemでWebページを作る際も、CMSモジュールのデータ編集機能が役に立ちます。

PMS(Personnel Management System)モジュール

Chippieは、SNS(Social Networking Service/ソーシャルネットワーキングサービス, 例:mixi)のようにユーザ登録したり特定のグループに属している人にのみ情報を配信したり機能を提供する認証システムを持っています。システムの呼称はChippieの導入先によってまちまちですが、digitalmuseumでは「digitalians α2」と呼ばれています。

そのシステムへのログインフォームなどを提供し、インターフェースとなるのがPMSモジュールです。

仕様

コアライブラリを組む上で前提にした条件(仕様)が、Chippieを利用する人にとって制約となることもあります。

稼働環境

クライアント(ページ閲覧者に必要なもの)サーバ(ページを運営する側で用意するもの)
ブラウザMozilla Firefox 1.5.x〜2.x〜, Opera 8.x〜, Internet Explorer 6.x〜7.x〜, Safari 2.x〜
Ajax実行のためにはJavaScriptが必要
ソフトウェアと
モジュール
Apache 1.4.x〜2.0.x〜 with mod_rewrite, mod_php4〜5
MySQL 3.23.x〜5.0.x〜
画面サイズ800x600〜1024x768以上推奨 権限テーブルを自由に作成・編集できるMySQLデータベース一つ

そもそもChippieはPHP4以上で動作するライブラリなので、PHP4を動かせないサーバではChippieは使えません。

また、アドレスとPHPのプログラムを適切に対応付けるために、要求されたアドレスを正規表現に従って書き換える mod_rewrite(Apacheのモジュール)を使っています。このため、 Apache+mod_rewrite 相当の機能を持ったWebサーバでないとChippieを使えません。

さらに、様々な情報を管理するためにMySQLサーバを利用します。PostgreSQLサーバに関してはニーズがないため今のところ対応していません。テーブルを自由に作ったり編集できるデータベースが一つ以上用意されていることが必要です。

その他の制約

Webサイトの文字エンコーディングがEUC-JPであること

現状、Chippieの標準文字エンコーディングはEUC-JPを採用しています。Ajax対応のため一部UTF-8への変換処理をしているところもあり、ニーズ次第ではUTF-8にも標準で対応することが考えられます。

Webサイトが階層構造をしていること

大分類企画記事 ∋ ファイルなどの情報源 という階層構造をなしていることが前提になっており、PHPの変数として大分類・企画・記事のマネージャ $contents, $projects, $articles が用意されています。大分類に相当する上位構造がない場合は、全ての企画を一つの大分類に属すように設定してその階層を隠蔽することもできますが、ある程度の無駄が生じます。


技術的な質問などがありましたら、arc@dmzまでお願いいたします。セキュリティにはそこそこ気を配っていますが、もし、いわゆるセキュリティホールがあった場合、こっそり教えてください。

これまでの閲覧者数:3392
トラックバック先URI:http://digitalmuseum.jp/trackback/3/

執筆者:arc@dmz
担当者:arc@dmz
制作者:arc@dmz

作成日時:2007/4/28 11:32:09
更新日時:2007/4/28 11:32:09
更新履歴:
詳しい更新履歴はありません。