mapleの最近のブログ記事


技術評論社さんから上記のムックを出すということで、このたび Maple の項を書かせていただきました。2006-07-07 発売予定になってますね。Maple の項では基本概要、詳細、ステップバイステップで進めるアプリケーション作成とページ数上では(あくまでページ数上で :p)結構なボリュームです。その他 Rails, Ethna, Catalyst, TurboGears と LL フレームワークの目白押しです。どうぞよろしくおねがいします。

一番初めの話では「4大フレームワーク」だったのにいつの間にか増えてます。つまりお得です。

core_Extension_FilterChainWithPrivate
Maple Core's FilterChain - Load maple filter from default directory (FILTER_DIR) and private filter directory (PRIVATE_FILTER_DIR).

o Usage

(1) Download and put file to maple directory.

(2) Change FilterChain service to this class in config/base.ini.

[FilterChain]
name = Extension_FilterChainWithPrivate
path = core/Extension/FilterChainWithPrivate.class.php

(3) Define PRIVATE_FILTER_DIR. (maybe, maple.inc.php.)

define('PRIVATE_FILTER_DIR', WEBAPP_DIR . '/filters');

(4) Put your application filter to "PRIVATE_FILTER_DIR"'s directory.


o Download
- core_Extension_FilterChainWithPrivate 1.0.0


以前に紹介した、アプリケーションごとにそのアプリケーションだけに適応するような Filter を設置するディレクトリを準備する hack ですが、最近はこのように FilterChain サービスそのものを別のものに切り替えて使用しています。

名前が少々長いし、これ以上の付加要素を追加する場合の FilterChain の名称に少々困りそうな感じ。今のところないので大丈夫ですが。

Filter_AssignToTemplate

user-pic
0

Filter_AssignToTemplate
- Assign variables, object to smarty template.

o Usage

* maple.ini
[AssingToTemplate]
foo = FOO      ;; literal assign
bar = ref:Bar  ;; object assign by ref. Bar is already in DIContainer

* example.tpl
{$foo}         {* print FOO *}
{$bar->baz()}  {* exec baz() in Bar class *}

o Download
- Filter_AssignToTemplate 1.0.0


テンプレートへ assign もしくは object の assign_by_ref を一気に行う Maple Filter「Filter_AssignToTemplate」を公開します。
超地味でやってることも知れてるものの、決まったオブジェクトをテンプレートまで一括で持ってこれる機構が Maple には無いので愛用してます。リテラルを定数的に持っていくなら Smarty 定数使ってますが。今なら Maple で使用できるテンプレートとして Pure PHP および HTML_Template_Flexy がありますが、それらを統括する API がないので(加えて私が Smarty 以外のテンプレートを使う需要がないので)Smarty 専用です。

なお PEAR Package として公開してますが、*今のところ* PEAR Installer で導入する利点は一切ありません。そのままブラウザで落としてね!

今年初めのセミナーでおーにしさんと

「なんだかんだと Maple でアプリを作ってきた上で出来た、汎用 Filter とか Validater とか、みんな持ってるよねえ。」

と話してたのを今更ながら思い出す。
続いて「定期的に公開していこうよ!」と話していたものの、その後の年度末進行で時間が取れず仕舞だったのですが、これからちょくちょくと出していこうかなと思ってます。あちらは見る限りかなりへこたれてる状態になってるので、気長に復活を待ちましょう。

Maple: Ajax

user-pic
0

DHTML ほとんど書けないよ〜という貴方も少し背伸びをすればみんな憧れ Ajax!という胡散臭い形でなんとかしてみようという試みです。

コードずらずらで長ったらしいのでご注意を。

maple の「設定ファイル」にはいろんな種類のものがある。そのうち Maple の動作そのものの決定する設定ファイル「maple.inc.php」。これに関して、実はずいぶん前に「他の設定ファイルは INI ファイルなのに、なんでこれだけ PHP で define なのか」などという話があった。

これ、もし INI ファイルによる設定にしようとすると、今までできていた当たり前のことができなくなるということがわかった。

define('MAPLE_DIR', BASE_DIR . '/maple');
define('WEBAPP_DIR', BASE_DIR . '/webapp');

define('FILTER_DIR', MAPLE_DIR . '/filter');
define('CONVERTER_DIR', MAPLE_DIR . '/converter');
define('VALIDATOR_DIR', MAPLE_DIR . '/validator');
define('LOGGER_DIR', MAPLE_DIR . '/logger');

定数としてある値を使って、次の定数を決定している。

これを INI とかの設定ファイルでやる場合、定数・変数という概念はプレーンテキストには存在しないので、定数扱いのものを読み込んで、プログラム側で eval するなり置換するなりの処理を行うか、定数・変数の概念をなくしてしまって全てを記述するか、設定ファイル側に特別なルールを持って記述するか、といったことが必要になってしまう。

Maple のこの設定ファイルは、おそらく Mojavi の設定ファイルを参考に採用した形式であろうけど、これが凄い理に適っているというか、しっくりきているものになっちゃっている。プレーンテキスト形式のなんらかに設定ファイルに変えるとなると、かなり面倒というか、今まで当たり前のことができなくなる可能性があるのでどうしたもんかとか思ってるわけです。

コメントに書いてましたがちょこっと長く、また面白みもあるのでエントリへ。

Maple: SD 3月号から 3.1.0 要素を足してみる

2.3. Action 名の命名規則

P.56 (2) の Action 命名ルールにおいて、以下のように読み替えてください。

旧:「foo_bar アクションは modules/foo/bar/ ディレクトリ内の Foo_Bar.class.php 」
新:「foo_bar アクションは modules/foo/bar/ ディレクトリ内の Bar.class.php 」

;; 個人的には modules/Foo/Bar.class.php になるものとばっかり


 

kunit / 2006-02-20 22:27 「modules/Foo/Bar.class.php」にしたいんですが、そうすると Foo_Bar と Foo_Baz が同じディレクトリにクラスを置くことになり、maple.ini が重なるんですよね・・・ これはもう3系の限界だと思って、ここまでにしてます。
 

言われてみれば確かにそのとおりだ!全然気づかなかった。

思いついてはいるでしょうが、action 名と共通の bar.ini、baz.ini という風にはどうなんでしょう?

foo_bar_baz というアクションなら

modules/

modules/Foo/
modules/Foo.ini

modules/Foo/Bar/
modules/Foo/Bar.ini

modules/Foo/Bar/Baz.class.php (action class Foo_Bar_Baz)
modules/Foo/Bar/Baz.ini

とでもすることで、コードは煩雑化するものの、各階層ごとに ini 設定も記述できるし、整理ができるような気がせんでもないです。
Action は最初のタイミングで既に決まっているので、foo, bar, baz の分割および異なったファイルを読むのは容易でしょうし。別途 module 全体にかかるような設定ファイルを modules/root.ini とか modules/maple.ini とでもしておけばいいでしょうが、
まあ、言われるとおり、3 系でやるとなると変化がでかすぎますわな。

この辺は generator で勝手にやってくれるようになった部分なので、このままでいこうが、いきなり変えようが、(下位互換とかはとりあえず考えないのであれば)、いろんな意味でどうとでもなる部分。ぱっと見 (ホントにぱっと見。さぼって grep すらしてない ;)) 関わる箇所は ConfigUtil, ActionChain の2つで、ここは base.ini で切り返れる箇所。うちでも patch とかなしでやろうと思えば、できますな。やろうと思えば。

記事こそは 3.0.2 で書いています。基本的には知識の使いまわしはできますが、3.1.0 でちょっと楽できたり+α要素がある部分がありますので、その分を書き出してみました。記事を手元に照らし合わせながら確認してみてください。

1. 「Maple 設定ファイル」の記述

1.1. 設定ファイルの中身について

3.1.0 での追加要素はありますが、記事の説明で基本は問題ないと思います。

1.2. 「文字について」について

3.1.0 において、SCRIPT_CODE, SKELETON_CODE 定数が追加されています。これは共に generator が使用する定数です。generator が EUC-JP で記述されているため、EUC-JP のままでいいでしょう。


2. 「Action クラス」の作成

2.1. PHP コードについて

generator が登場しましたので、Maple の root より、

# php script/generate.php action form smarty form myapp
# php script/generate.php action submit smarty submit myapp

として出来上がるものを リスト3, リスト4, リスト7, リスト8 として扱ってください。

2.2. Setter, Getter の排除

コードの半分を占めていた ;) set**, get** というメソッドは必要なくなりました。

2.3. Action 名の命名規則

P.56 (2) の Action 命名ルールにおいて、以下のように読み替えてください。

旧:「foo_bar アクションは modules/foo/bar/ ディレクトリ内の Foo_Bar.class.php 」
新:「foo_bar アクションは modules/foo/bar/ ディレクトリ内の Bar.class.php 」

;; 個人的には modules/Foo/Bar.class.php になるものとばっかり


3. 「テンプレートファイル」の記述

generator によりテンプレートも仮のものが出来上がりますので、それぞれをリスト5, リスト6 に書き換えてください。
テンプレートファイル内で Action クラス内の変数にアクセスする場合、{$action.name} というような配列参照でできるようになっています。この参照できる範囲は Action の public property です。
また、Smarty 自体は必須ではなくなっています。(別のテンプレートの場合は、などというマジ文章はさすがに割愛。)

しまった、先書かれちゃった!

ということで、現在発売中 (のはず。本屋行ってない) の Software Design 2006年3月号に Maple の記事を書きました。是非買ってね!

執筆は年末から年始にかけてのタイミングなので (ちょうど DAoC Movie 1 のエンコード中に書いてたんですな、これが :)) Maple 3.0.2 向けの記事になってますが、Maple の基本をステップバイステップに紹介していて、内部的な動作ではない、外から見えるレベルの基本構造を知るにはよいのではないでしょうか。今だと generate してぱっと雛形ができて、コード量も少なくてよいので、そういう意味ではあちゃーなタイミングであり 3.1.0 コノヤロウ!という思いは秘密にする必要はないと思うのでとりあえず書いておきます (笑) こればっかりはしゃーないわけです。

昔々、内容は全部理解できないけれども読んでいた SD。それに関われるとは思っても見なかったです。機会を下さったまいパパさん、種を下さった kunit さんおよび Maple User & Dev コミュニティの皆さん、そして書く上で裏方的に関わってくれた ITEMAN に感謝します。

Maple Day 発表資料

user-pic
0

2006/01/28 に発表した Maple Day のスライドを公開します。

maple-20060128.pdf

特別 Maple みっちりな内容でもなく、その他の話や Bad ケースの話など色々させていただきました。

Information

Twitter: @kumatch

このアーカイブについて

このページには、過去に書かれたブログ記事のうちmapleカテゴリに属しているものが含まれています。

前のカテゴリはHM/HRです。

次のカテゴリはMobileです。

最近のコンテンツはインデックスページで見られます。過去に書かれたものはアーカイブのページで見られます。

Information

Twitter: @kumatch

OpenID対応しています OpenIDについて