メイン

2009年1月25日

CakePHPへの愚痴いろいろ

CakePHPは便利なフレームワークの一つであることは確かだが、いくつか使ってみての愚痴を書いてみたい。

(1)仕様変わりすぎ

バージョンによって仕様がコロコロ変わっている。使い始めて「あれ?」となったのは、思いつくだけでも、

・conditionの書き方変更
・findAll廃止
・web routingの変更

などなど。このため入門書や解説サイトが役に立たないことがある。

(2)ロジックはモデルに

というベストプラクティスのようなものが少し前に議論されていたが、「当たり前の話ではないか」と違和感を感じざるを得なかった。

Sooey:CakePHPを使ったMVC設計のベストプラクティス

特にPerlやPHPでプログラミングを始めた人は、CakePHPに限らずコントローラーにベッタベタにロジックを書く人が多く、Javaでプログラミングを始めた人は、ちゃんとドメインモデルを守ってモデル・エンティティにロジックを書くというスタイルに慣れていると思う。あくまで主観。

(3)モデルはエンティティではない

最初にハマった。data?何それ。

Happy Engner Life:CakePHPのモデルをエンティティとして扱う

(4)プラグインの構成要素

CakePHPのプラグインは「コントローラー+モデル+ビュー」をまとめたものが、プロジェクト間での可搬性という意味でプラグインという概念を考えると、「コンポーネント+ヘルパー」のパッケージを使う機会のほうが多いと思う。

ヘルパーとは、ビューのロジックの切り替えを隠蔽したもの(HTMLを書く必要を無くすという意味合いではない)である。その切り替えロジックはコントローラー間で共通である事が多く、コントローラー間の処理を共通する処理はコンポーネントで書くのがセオリーだ。

例えば携帯電話向けページの処理。ヘルパーでキャリア判別を行っているものも見たことがあるが、キャリア判別をコンポーネントのbeforeRenderで行い、ヘルパーはコンポーネントの判別結果(フィールド値なり)を参照して分岐を行えば、判別処理を一箇所にまとめることができスッキリとする。

このような「モバイルプラグイン」のようなコンポーネントとヘルパーの組み合わせであれば、可搬性という意味でもいいのではないかと思うのだが、周りはどうしているのだろうか。一方で、ヘルパーはコンポーネントに依存しちゃいかん、という文も見かけたことがある。全く不可解だ。

(5)設定の切り替え

本番環境とテスト環境によって設定の値を変えたい場合が多々あるが、CakePHPは環境の切り替えをサポートする機構が弱いのではないかと思った。できれば設定値一発で、使用する設定ファイルを切り替えられるのが理想だ。

既に自分で取り入れていて一番シンプルなのは、.htaccessやhttpd.confの中に、SetEnvで環境ごとの値を置いておいて、PHP側で$_SERVERから読み出して認識させる方法。

テスト環境と本番環境で思い出したが、テスト環境は「test」や「debug」という英単語で良いと思うのだが、本番環境を「real」としていた会社チームがあった。素で「debub」と書く奴もいたな。プログラミング言語は英語で書く言語だけに、スペルミスはもちろん、こういう微妙な間違いもチームの士気を下げる一因となってしまう。

2008年1月29日

CakePHPの単数形→複数形の処理はしっかりしていた

CakePHPを触る機会があったのだが、始めに疑問に思ったのが単数形→複数形の処理。Rails系のフレームワークに初めて触るので、見当がつかない。サンプルを見ても案の定「Users」「Items」「Messages」とか都合がよろしい単語しか書いてない。

例えば、「inquiry」など子音+yで終わる単語はyをiに置き換えてesとなり、「inquiries」となるはずだが、googleで「CakePHP 複数形 "ry" "ies"」と調べても出てこない。まさか「Inqurys」??

とりあえず書いてみるべ、ということで「InquiresController」というコントローラ作って、「Inquiry」というモデルを作ったら、ちゃんと動いた。公式マニュアルにも「大丈夫だぜ」と書いてあった。

4.5. (任意) カスタム Inflections 設定

イレギュラーなものや、多言語で英語の規則にないものも定義できるようだ。ふーん。

↓リファレンスとしておすすめ

CakePHP ポケットリファレンス (Pocket Reference)
株式会社ブルーオーシャン 岡田 佳典
技術評論社
売り上げランキング: 11515
おすすめ度の平均: 4.5
5 いい感じです。
4 cakePHPの時には是非
5 いま発売されているcake系書籍で一番良いです