Jeans CMSのデモ、及び情報発信
0.6.7α [一般的なこと]
2010年02月15日
このデモページを、バージョン0.6.7α(SVNリビジョン135)に上げました。
ロードマップとして挙げた機能を、一通り実装しました。画像のアップロードも、下のとおり、可能です。

ロードマップとして挙げた機能を、一通り実装しました。画像のアップロードも、下のとおり、可能です。
コメント対策プラグインを導入 [一般的なこと]
2010年02月04日
昨日から今日にかけて、一つだけですがスパムコメントを入れられてしまいました。ほうっておくととんでもないことになりそうなので、とりあえずスパム対策だけは行う必要があります。
Nucleusでの経験で、NP_ProtectByMD5がスパム対策にかなり有効であることが分かっていたので、これをJeansに移植し、同時に、プラグイン周りのコードを少し見直しました。
もともとJeansを作ろうと思ったきっかけは、Nucleusのプラグインを書いていたときに、これをもっと楽に書きたいと思ったことでした。で、実際にJeansでプラグインを書いてみると、まずまず書きやすかったです。ほっと一安心です。
今回作成したプラグインは、jp_ProtectByMD5です。機能は、NP_ProtectByMD5とほとんど同じです。Jeansのプラグインがどんなものかに興味ある方は、SVNで閲覧もしくはダウンロードしてみてください。スキンタグ、イベント、多言語化といったテクニックを用いています。
今回のプラグインで用いていないテクニックは、アクションの実行と管理画面です。アクションの方はすでに実装済みで、これはライブラリクラスでのそれと同様に扱えます(static public function action_post_xxxx()を記述するだけ)。管理画面は未実装ですが、とりあえず考えているのは、管理領域にskin.incを用意すればそれをパースするというやり方です。管理領域でもスキンがそのまま使えるので、Nucleusの管理画面よりも作成しやすくなると思います。
Nucleusでの経験で、NP_ProtectByMD5がスパム対策にかなり有効であることが分かっていたので、これをJeansに移植し、同時に、プラグイン周りのコードを少し見直しました。
もともとJeansを作ろうと思ったきっかけは、Nucleusのプラグインを書いていたときに、これをもっと楽に書きたいと思ったことでした。で、実際にJeansでプラグインを書いてみると、まずまず書きやすかったです。ほっと一安心です。
今回作成したプラグインは、jp_ProtectByMD5です。機能は、NP_ProtectByMD5とほとんど同じです。Jeansのプラグインがどんなものかに興味ある方は、SVNで閲覧もしくはダウンロードしてみてください。スキンタグ、イベント、多言語化といったテクニックを用いています。
今回のプラグインで用いていないテクニックは、アクションの実行と管理画面です。アクションの方はすでに実装済みで、これはライブラリクラスでのそれと同様に扱えます(static public function action_post_xxxx()を記述するだけ)。管理画面は未実装ですが、とりあえず考えているのは、管理領域にskin.incを用意すればそれをパースするというやり方です。管理領域でもスキンがそのまま使えるので、Nucleusの管理画面よりも作成しやすくなると思います。
メディアは、DBに保存 [一般的なこと]
2010年02月03日
プラグイン実装部分はほぼ終わって、メール送信機能も作り終えました。現在は、メディアアップロード部分を書いています。色々と考えた結果、Jeans本体では、アップロードされたメディアをDBに保存する事にしました。
動作が軽いツールを目指すのであれば、本来はファイルとして保存して、呼び出す時はApacheから直接(PHPを経由せず)読み込むべきなのですが、DBに入れる形にしたのは、次の理由からです。
1)PHP経由で呼び出すようにしても、jeans.phpとmedia.phpの2つの小さなPHPのパースだけで実装できるため、それほど重くならない。
2)上記の事、eアクセラレータなどを用いればさらに軽くする事が出来る。
3)セキュリティー上の理由で、DBに保存する方が、色々と安心。
4)DBに保存する方法だと、super-adminではないユーザーに画像をアップロードさせるような利用方法が可能。
ファイルに保存するようにしたい場合、別途プラグインを利用する事になると思います。
動作が軽いツールを目指すのであれば、本来はファイルとして保存して、呼び出す時はApacheから直接(PHPを経由せず)読み込むべきなのですが、DBに入れる形にしたのは、次の理由からです。
1)PHP経由で呼び出すようにしても、jeans.phpとmedia.phpの2つの小さなPHPのパースだけで実装できるため、それほど重くならない。
2)上記の事、eアクセラレータなどを用いればさらに軽くする事が出来る。
3)セキュリティー上の理由で、DBに保存する方が、色々と安心。
4)DBに保存する方法だと、super-adminではないユーザーに画像をアップロードさせるような利用方法が可能。
ファイルに保存するようにしたい場合、別途プラグインを利用する事になると思います。
デストラクタ [コード]
2010年01月27日
現在、プラグインをサポートするため、plugin.phpを整備中です。ほとんどできました。
プラグインオプションを保存する際、SQLクエリーをそのつど発行するのではなく、Jeansのシャットダウン時にまとめて発行することで速度の向上を図ろうとしています(その前後で『BEGIN』と『COMMIT』を実行)。はじめ、この実装にオブジェクトのデストラクタ(__destruct()メソッド)を利用していたのですが、ここではまりました。
オブジェクトごとに、デストラクタの実行順序を制御したいのですが、どうもこれがうまくいきません。PHPに限った話ではないのですが、やはりデストラクタ部分の実装は難しいです。この部分でコードの実行をクラス内のメソッド呼び出しにとどめておけば、個々のデストラクタはそれぞれ問題なく実行されます。しかし、制御が他のオブジェクトに依存するようなケースでうまく実行させるのは、PHPの内部構造までちゃんと把握していないと無理だと感じました。
そこで、register_shutdown_function()でcore::shutdown()を登録し、ここからそれぞれのクラスのshutdown()メソッドをスタティックに呼び出すことにしました。register_shutdown_function()で登録した関数の実行は、オブジェクトの破棄よりも先に起こるようです(5.2と5.3の両方で確認しました)。
この方法で、うまく制御できているように思います。プラグインでもshutdown()メソッドが使えるので、多分、便利です。
プラグインオプションを保存する際、SQLクエリーをそのつど発行するのではなく、Jeansのシャットダウン時にまとめて発行することで速度の向上を図ろうとしています(その前後で『BEGIN』と『COMMIT』を実行)。はじめ、この実装にオブジェクトのデストラクタ(__destruct()メソッド)を利用していたのですが、ここではまりました。
オブジェクトごとに、デストラクタの実行順序を制御したいのですが、どうもこれがうまくいきません。PHPに限った話ではないのですが、やはりデストラクタ部分の実装は難しいです。この部分でコードの実行をクラス内のメソッド呼び出しにとどめておけば、個々のデストラクタはそれぞれ問題なく実行されます。しかし、制御が他のオブジェクトに依存するようなケースでうまく実行させるのは、PHPの内部構造までちゃんと把握していないと無理だと感じました。
そこで、register_shutdown_function()でcore::shutdown()を登録し、ここからそれぞれのクラスのshutdown()メソッドをスタティックに呼び出すことにしました。register_shutdown_function()で登録した関数の実行は、オブジェクトの破棄よりも先に起こるようです(5.2と5.3の両方で確認しました)。
この方法で、うまく制御できているように思います。プラグインでもshutdown()メソッドが使えるので、多分、便利です。
プラグインのサポート [コード]
2010年01月20日
Nucleusと同様、Jeansでも、必須ではない機能は本体に組み込まず、プラグインとして供給するようにします。プラグインの仕様はまだ考察中なのですが、とりあえずコードを書いてみました(SVNに上げてあります)。
ここの部分、ベータが出るまでに大きく変更される可能性も有ります。プラグイン周りはかなり重要な部分なので、少し時間をかけて吟味する必要があります。jeans.phpやview.phpも、2度ほどスクラッチから書き直したりしているので、プラグインについても(plugin.php)、そうなる可能性が有ります。
ここの部分、ベータが出るまでに大きく変更される可能性も有ります。プラグイン周りはかなり重要な部分なので、少し時間をかけて吟味する必要があります。jeans.phpやview.phpも、2度ほどスクラッチから書き直したりしているので、プラグインについても(plugin.php)、そうなる可能性が有ります。
リビジョン92 [一般的なこと]
2010年01月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/
だいぶ煮詰まってきました。インストール時におけるいくつかのバグを修正し、多くの環境に適応できるようになっていると思います。課題として残っているのは、次のものです。
1)メディアアップロード機能
2)メール送信機能
3)プラグインサポート
これらの機能を実装してから最初のアルファーバージョンとするか、あるいは今の状態でアルファーバージョンとして公開するか、悩んでいるところです。ご意見有りましたら、よろしくお願いします。
とりあえず、この0.6.5は安定版のつもりです。次のリンク先の『Download GNU tarball』から、取得できます。
http://sourceforge.jp/projects/jeanscms/svn/view/jeanscms/tags/v0650/
Jeans CMSの特徴: Housekeeping Jeansについて [仕様・規約]
2010年01月13日
先の記事でもすこし触れましたが、Jeansでは、『Housekeeping Jeans』と呼ぶ骨格部分を他のコード(クラス)と明確に分けているのが、特徴です。
Housekeeping JeansはPHPフレームワークの一つと呼んでよいと思います。多分、MVCライクなのでしょうが、個人的には、MVCモデルはGUIプログラムには向いているけれどwebアプリケーションに向いているように思えないので、あまり気にしていません。多分Jeansは、派生型のMVCに近いのだと思います(このあたり、専門家ではないので良くわかりません)。
特徴は、デザインを決める部分(スキン)とPHPで記述されたアプリケーション部分(クラス)とを、明確に分けていることです。スキンにPHPコードを直接書くこともできますが、それは推奨されませんし、ほとんどのケースで必要ないはずです。
Housekeeping JeansはPHPフレームワークの一つと呼んでよいと思います。多分、MVCライクなのでしょうが、個人的には、MVCモデルはGUIプログラムには向いているけれどwebアプリケーションに向いているように思えないので、あまり気にしていません。多分Jeansは、派生型のMVCに近いのだと思います(このあたり、専門家ではないので良くわかりません)。
特徴は、デザインを決める部分(スキン)とPHPで記述されたアプリケーション部分(クラス)とを、明確に分けていることです。スキンにPHPコードを直接書くこともできますが、それは推奨されませんし、ほとんどのケースで必要ないはずです。
現在のSVNバージョンの試用について [一般的なこと]
2010年01月12日
現在のバージョンは、インストーラが入っています。もし、以前のバージョンのJeansをインストールしてあった場合、以前のバージョンのファイルは、SQLiteのDBファイルも含めて、すべて削除してから入れ直していただいた方が良いです。SQLのテーブルの構造などを見直して変更したりする事が多いので、こういう形になります。
β版の配布までは、こういった状況が続くと思います。それでも、Jeans CMSをいきなり実用で使ってみたいという奇異な方は(多分いらっしゃらないと思いますが)、バージョンアップの際にこちらの記事を参考にして、DBデータを保存しておき、新しいバージョンのJeansを入れ直した後に、保存したデータを管理画面のDatabaseのところで復帰させる事が必要です。このサイトでは、そういう方法を用いてバージョンアップを行っています。ただし、現時点で既に、先に取り上げた記事の内容がそのまま使える訳でなく、ダウンロードしたDBファイルを若干修正しないといけません。かなりややこしい作業になります。
β版から後は、スムーズにバージョンアップができるように運営するつもりです。
β版の配布までは、こういった状況が続くと思います。それでも、Jeans CMSをいきなり実用で使ってみたいという奇異な方は(多分いらっしゃらないと思いますが)、バージョンアップの際にこちらの記事を参考にして、DBデータを保存しておき、新しいバージョンのJeansを入れ直した後に、保存したデータを管理画面のDatabaseのところで復帰させる事が必要です。このサイトでは、そういう方法を用いてバージョンアップを行っています。ただし、現時点で既に、先に取り上げた記事の内容がそのまま使える訳でなく、ダウンロードしたDBファイルを若干修正しないといけません。かなりややこしい作業になります。
β版から後は、スムーズにバージョンアップができるように運営するつもりです。
スキン変数からスキンタグへ [コード]
2010年01月11日
Nucleusでは、<%blog%>などの表記を『スキン変数』と呼んでいて、Jeansでもそのように扱ってきました。これがどのような経緯で変数(variables)と呼ばれるようになったのかよく知りませんが、個人的には、これを変数と呼ぶのにどうも違和感があります。
これはむしろタグなのではないかと思うし、実際、WordPressなどの別のツールで似た機能をするものはタグと呼ばれています。そこで、Jeansでもこれをタグと呼ぶことにしました。つまり、Nucleusにおけるスキン変数は、Jeansではタグもしくはスキンタグということになります。Jeansではテンプレートもスキンも同じなので、Nucleusのテンプレート変数に相当するものも、タグもしくはスキンタグで、多くの場合<%data%>タグがこれに相当します。
この名称変更に伴い、いままでスキンタグ(スキン変数)を実装するためのメソッドを
としていたところ、
に変更しました(リビジョン79)。
これはむしろタグなのではないかと思うし、実際、WordPressなどの別のツールで似た機能をするものはタグと呼ばれています。そこで、Jeansでもこれをタグと呼ぶことにしました。つまり、Nucleusにおけるスキン変数は、Jeansではタグもしくはスキンタグということになります。Jeansではテンプレートもスキンも同じなので、Nucleusのテンプレート変数に相当するものも、タグもしくはスキンタグで、多くの場合<%data%>タグがこれに相当します。
この名称変更に伴い、いままでスキンタグ(スキン変数)を実装するためのメソッドを
public static function var_xxx()
としていたところ、
public static function tag_xxx()
に変更しました(リビジョン79)。
スキン中でラムダを使う [一般的なこと]
2010年01月08日
ふと思いついたアイデアがあるので、メモしておきます。
Jeansのスキンでの表示は、<%blog%>などのスキン変数の呼び出しから始まり、つづけてSQLクエリーが実行され、それぞれの行データを<%data%>を用いて表示するのが基本です。
この行データ(あるいは一般的に、データ)の中にラムダ(無名関数)が含まれているとき、それを呼び出すようにすれば色々できて面白いかもしれません。PHP5.2では、ラムダをを作成するのにcreate_functionを用いる必要があるのであまり使いやすくありませんが、近い将来(もしかしたらバージョン1.0までに)、PHP5.3に移行するので、そうなれば便利です。
ラムダを使わないとスキンが書けないようになる訳ではありません。スキンを書くときにはラムダを使っていることを感じさせないようにすることが必要だと思います。スキンを書くための敷居は低く設定しておきたいので。Jeansではスキンの派生という概念があり、それによりJeans本体のコードを簡潔にしてあります。これ以上はスキンの文法を複雑にしたくありません。
Jeansのスキンでの表示は、<%blog%>などのスキン変数の呼び出しから始まり、つづけてSQLクエリーが実行され、それぞれの行データを<%data%>を用いて表示するのが基本です。
この行データ(あるいは一般的に、データ)の中にラムダ(無名関数)が含まれているとき、それを呼び出すようにすれば色々できて面白いかもしれません。PHP5.2では、ラムダをを作成するのにcreate_functionを用いる必要があるのであまり使いやすくありませんが、近い将来(もしかしたらバージョン1.0までに)、PHP5.3に移行するので、そうなれば便利です。
ラムダを使わないとスキンが書けないようになる訳ではありません。スキンを書くときにはラムダを使っていることを感じさせないようにすることが必要だと思います。スキンを書くための敷居は低く設定しておきたいので。Jeansではスキンの派生という概念があり、それによりJeans本体のコードを簡潔にしてあります。これ以上はスキンの文法を複雑にしたくありません。