My Jeans CMS:2010年 01月の記事

デストラクタ [コード]

2010年1月27日

現在、プラグインをサポートするため、plugin.phpを整備中です。ほとんどできました。

プラグインオプションを保存する際、SQLクエリーをそのつど発行するのではなく、Jeansのシャットダウン時にまとめて発行することで速度の向上を図ろうとしています(その前後で『BEGIN』と『COMMIT』を実行)。はじめ、この実装にオブジェクトのデストラクタ(__destruct()メソッド)を利用していたのですが、ここではまりました。

オブジェクトごとに、デストラクタの実行順序を制御したいのですが、どうもこれがうまくいきません。PHPに限った話ではないのですが、やはりデストラクタ部分の実装は難しいです。この部分でコードの実行をクラス内のメソッド呼び出しにとどめておけば、個々のデストラクタはそれぞれ問題なく実行されます。しかし、制御が他のオブジェクトに依存するようなケースでうまく実行させるのは、PHPの内部構造までちゃんと把握していないと無理だと感じました。

そこで、register_shutdown_function()でcore::shutdown()を登録し、ここからそれぞれのクラスのshutdown()メソッドをスタティックに呼び出すことにしました。register_shutdown_function()で登録した関数の実行は、オブジェクトの破棄よりも先に起こるようです(5.2と5.3の両方で確認しました)。

この方法で、うまく制御できているように思います。プラグインでもshutdown()メソッドが使えるので、多分、便利です。

プラグインのサポート [コード]

2010年1月20日

Nucleusと同様、Jeansでも、必須ではない機能は本体に組み込まず、プラグインとして供給するようにします。プラグインの仕様はまだ考察中なのですが、とりあえずコードを書いてみました(SVNに上げてあります)。

ここの部分、ベータが出るまでに大きく変更される可能性も有ります。プラグイン周りはかなり重要な部分なので、少し時間をかけて吟味する必要があります。jeans.phpやview.phpも、2度ほどスクラッチから書き直したりしているので、プラグインについても(plugin.php)、そうなる可能性が有ります。

リビジョン92 [一般的なこと]

2010年1月17日

このサイトのバージョンをSVNリビジョン92とし、同時にこのリビジョンをバージョン0.6.5 α(プレ・アルファ)として、SVNでタグ付けしました。

だいぶ煮詰まってきました。インストール時におけるいくつかのバグを修正し、多くの環境に適応できるようになっていると思います。課題として残っているのは、次のものです。

1)メディアアップロード機能
2)メール送信機能
3)プラグインサポート

これらの機能を実装してから最初のアルファーバージョンとするか、あるいは今の状態でアルファーバージョンとして公開するか、悩んでいるところです。ご意見有りましたら、よろしくお願いします。

とりあえず、この0.6.5は安定版のつもりです。次のリンク先の『Download GNU tarball』から、取得できます。
http://sourceforge.jp/projects/jeanscms/svn/view/jeanscms/tags/v0650/

Jeans CMSの特徴: Housekeeping Jeansについて [仕様・規約]

2010年1月13日

先の記事でもすこし触れましたが、Jeansでは、『Housekeeping Jeans』と呼ぶ骨格部分を他のコード(クラス)と明確に分けているのが、特徴です。

Housekeeping JeansはPHPフレームワークの一つと呼んでよいと思います。多分、MVCライクなのでしょうが、個人的には、MVCモデルはGUIプログラムには向いているけれどwebアプリケーションに向いているように思えないので、あまり気にしていません。多分Jeansは、派生型のMVCに近いのだと思います(このあたり、専門家ではないので良くわかりません)。

特徴は、デザインを決める部分(スキン)とPHPで記述されたアプリケーション部分(クラス)とを、明確に分けていることです。スキンにPHPコードを直接書くこともできますが、それは推奨されませんし、ほとんどのケースで必要ないはずです。

現在のSVNバージョンの試用について [一般的なこと]

2010年1月12日

現在のバージョンは、インストーラが入っています。もし、以前のバージョンのJeansをインストールしてあった場合、以前のバージョンのファイルは、SQLiteのDBファイルも含めて、すべて削除してから入れ直していただいた方が良いです。SQLのテーブルの構造などを見直して変更したりする事が多いので、こういう形になります。

β版の配布までは、こういった状況が続くと思います。それでも、Jeans CMSをいきなり実用で使ってみたいという奇異な方は(多分いらっしゃらないと思いますが)、バージョンアップの際にこちらの記事を参考にして、DBデータを保存しておき、新しいバージョンのJeansを入れ直した後に、保存したデータを管理画面のDatabaseのところで復帰させる事が必要です。このサイトでは、そういう方法を用いてバージョンアップを行っています。ただし、現時点で既に、先に取り上げた記事の内容がそのまま使える訳でなく、ダウンロードしたDBファイルを若干修正しないといけません。かなりややこしい作業になります。

β版から後は、スムーズにバージョンアップができるように運営するつもりです。

スキン変数からスキンタグへ [コード]

2010年1月11日

Nucleusでは、<%blog%>などの表記を『スキン変数』と呼んでいて、Jeansでもそのように扱ってきました。これがどのような経緯で変数(variables)と呼ばれるようになったのかよく知りませんが、個人的には、これを変数と呼ぶのにどうも違和感があります。

これはむしろタグなのではないかと思うし、実際、WordPressなどの別のツールで似た機能をするものはタグと呼ばれています。そこで、Jeansでもこれをタグと呼ぶことにしました。つまり、Nucleusにおけるスキン変数は、Jeansではタグもしくはスキンタグということになります。Jeansではテンプレートもスキンも同じなので、Nucleusのテンプレート変数に相当するものも、タグもしくはスキンタグで、多くの場合<%data%>タグがこれに相当します。

この名称変更に伴い、いままでスキンタグ(スキン変数)を実装するためのメソッドを

public static function var_xxx()

としていたところ、

public static function tag_xxx()

に変更しました(リビジョン79)。

スキン中でラムダを使う [一般的なこと]

2010年1月8日

ふと思いついたアイデアがあるので、メモしておきます。

Jeansのスキンでの表示は、<%blog%>などのスキン変数の呼び出しから始まり、つづけてSQLクエリーが実行され、それぞれの行データを<%data%>を用いて表示するのが基本です。

この行データ(あるいは一般的に、データ)の中にラムダ(無名関数)が含まれているとき、それを呼び出すようにすれば色々できて面白いかもしれません。PHP5.2では、ラムダをを作成するのにcreate_functionを用いる必要があるのであまり使いやすくありませんが、近い将来(もしかしたらバージョン1.0までに)、PHP5.3に移行するので、そうなれば便利です。

ラムダを使わないとスキンが書けないようになる訳ではありません。スキンを書くときにはラムダを使っていることを感じさせないようにすることが必要だと思います。スキンを書くための敷居は低く設定しておきたいので。Jeansではスキンの派生という概念があり、それによりJeans本体のコードを簡潔にしてあります。これ以上はスキンの文法を複雑にしたくありません。

Jeans CMSにおけるセキュリティーの確保 [セキュリティー]

2010年1月5日

今のところ、セキュリティーの確保として、次のような攻撃について対処しています。

1)ヌルバイト攻撃
2)SQLインジェクション
3)XSS
3)リモートファイルインクルードとディレクトリトラバーサル
5)CSRF
6)セッションハイジャック

明けましておめでとうございます [一般的なこと]

2010年1月5日

今年もよろしくお願いします。

年末年始の休暇の間に、少し進みました。インストーラもほぼ出来上がっています。今のところ考えている開発ロードマップは、次の通りです。

1)管理画面での多言語化の見直し
2)アルファーバージョンの公開
3)メディアアップロード機能の追加
4)プラグインのための規約づくりとコードの追加
5)ベータバージョンの公開