General

Jeans CMSについて

2009年11月10日

だいぶ煮詰まってきた。少し考えをまとめておく。こういったことは、コードの簡潔化に必要のようだ。

Jeans CMSとは、つまり次のようなものであろう。

利用環境

 八方美人的なツールではない。かなり限られた環境での使用を目的とする。次のような条件に一致することが必要。

・Apache/PHP(>5.2)が使えること。
・SQLite (version 3)が、PDOで使えること。
・記事の編集ができるメンバーに最高権限を与えられること。
・文字コードはUTF8のみ

 DBは、SQLite固定とする。以前は、SQLite/MySQL/PgSQLのサポートを考えたが、クエリーの方言をラップするコードが複雑になるため、断念した。PHPのバージョンは今のところ5.2以上を考えているが、5.3以上にする可能性も有る。メンバーの権限の問題もコードの簡略化に大きく影響する。いまのところ、ログイン可能なメンバーは、コメントのみ書き込めるゲストと最高権限という、両極端な2つだけを考えている。

フレームワークとしてのJeans

 Housekeeping Jeansと名づけたフレームワークを考える。今のところ、次のコンポーネントがこれに相当する。

・次のPHPスクリプト:jeans.php, view.php, member.php, error.php, plugin.php
・次のDBテーブル:jeans_config, jeans_login

 役割は、次のとおり

・セキュリティー関連(XSS, SQL-injection, CSRFなどの対策)
・メンバーのログインの管理
・スキンのパース
・ライブラリの管理
・プラグインの管理

 現在、PHPスクリプトは合計で800行ほど。2000行以内を目安にしたい。これは、Nucleusのglobalfunctions.phpの行数に相当する。セキュリティーに大きく関係するこの部分は、なるだけ簡潔で、かつ、最小限の機能を提供するようにし、結果としてセキュリティー管理の簡便性・確実性が図れるようにしたい。

 グローバルに定義する関数は使用しない。変わりに、クラスのスタティックメソッドを多用する(クラスの命名方法に規約あり)。オブジェクトは、次の例外を除き、利用しない。

・PDOクラスのインスタンス
・plugin派生クラス(プラグイン)のインスタンス
・デストラクタが必要な場合

 PDOに関しては、オブジェクトはJeans内部でのみ利用され、フレームワーク外からのアクセスはスタティックメソッドを通じて行う。プラグインは現在のところ、Nucleusと同様に、インスタンスを作成する予定である。ただし、ベータバージョンでPHP5.3が採用になった場合、ここもスタティックで行く可能性もある。

 スキンは、派生させることが可能(例えば、defaultスキンの派生スキンを作成し、変更部分だけ記述するなど)。一見実装が難しそうに思えるこの機能は、実際にはコードの簡略化に大きく貢献しそうだ。

 ライブラリ、プラグインという2つの概念を考える。これらは互いに良く似ているが、ライブラリの方がより基本的な機能を提供し、プラグインの方がより高度な機能を提供することとする。

CMSとしてのJeans

 JeansをCMSとして捉えた場合、今のところ、次のものがここに含まれる。

・次のPHPスクリプト:admin.php
・次のスキン:admin
・次のDBテーブル:jeans_group, jeans_item, jeans_member

 Nucleusにおけるブログ・カテゴリー・アイテムという概念は簡略化され、グループ・アイテムの二本立てになった。グループは、OSのファイルシステムにおけるディレクトリのような存在で、入れ子にすることができる。グループ、アイテムの両方に、追加の情報を持たせることが可能で、これらの情報はjeans_configテーブルに記述することになるだろう。

 管理画面は、adminスキン及びadminライブラリの二つで構成される。管理画面を好みのものに変更したい場合、adminスキンの派生スキンを作成すれば、比較的簡単に行えるはず。

 メンバーの権限管理は、このレベルで行う(具体的には、adminライブラリで)。Housekeeping Jeansはどのような権限管理でも対応できるため、独自のadminライブラリを作成すれば、複雑な権限管理も可能なはずである。

ブログツールとしてのJeans

 Jeansをブログツールとして捉えた場合、今のところ、次のものがここに含まれる。

・次のPHPスクリプト:blog.php, item.php
・次のスキン:default

 ここは、まだまだ変更される部分。item.phpは、CMSとしての分類に入れることになる可能性が大。今のところ、$_GET['catid']などを利用しているので、ブログツールの分類に入れた。とにかく、CMSとしての姿と、ブログツールとしての姿に違いをつけることで、汎用的なCMSとして使えるようにしたい。

<%media(20091111-jeans0526.zip|現在のバージョン(0.5.26α)のバックアップはここ(LGPL2ライセンス)。)%>

コメント

コメントはありません

コメント送信