- 2010年10月24日 1:00 AM
- CakePHP

Bakerの皆さんはCakePHPの魅力は十分に分かっているでしょう。
しっかりとした規約と十分にラップされたデータベース周りのロジック。
様々な環境に簡単にデプロイ出来るPHPの強みとPHPの手軽さ。
私自身、CakePHPを使い始めて2年目になります。
2年もCakePHPのコードばかりを書いていれば、CakePHPのうまみを全て味わい尽くしたようにも思えます。
しかし、それを見事に”CakePHP辞典”が打ち崩してくれました。
書店で手に取り、目次を読んだ時点でCakePHPの魅力や楽しさが蘇ってきました。
CakePHPにはまだまだ知らない深みがあると。
CakePHP辞典とは
CakePHP向けの携帯サイト構築用ライブラリ”KtaiLibrary“を作成している@ecworks_masapさんこと滝下真玄さんが書かれた本です。
帯には以下のように書かれています。
随一の圧倒的な情報量!
フレームワークの新しい使い方が、必ず見つかる本!
え、誇大広告過ぎやしないか?とも思えるこの謳い文句。
そう思っても、騙されたと思って手に取ってみてください。
始めの1分で謳い文句通り”フレームワークの新しい使い方“が見つかります。
私がそうでした。
“滝下さんに買いますね!書評書きますね!“と言っておきながら、実は買うかどうか迷っていた(苦笑)
そこで、書店に行って実際に内容を見てみることにしました。
行ったのは”有林堂 戸塚駅前支店”(自宅がこの周辺なのでよく現れます)。
こんなところにも、ちゃんと置いてありました。
それで、ぱっと目次を開いた瞬間…これは買いだな、と。
そんな本です。
API代わりに使う
それで、なぜ”ぱっと開いた瞬間に買うことが決まる“のか。
それは目次の情報量に秘密があります。
ちょっと失礼して、目次を引用してみます。
(ページ番号は省略しています)
モデルクラス
バリデーション
アソシエーション
AppModelクラス
Modelクラス・プロパティ
Modelクラス・メソッド
Model::find() データソースからデータを検索して入手
Model::findBy() 指定フィールドを条件付けて検索
Model::bindModel() アソシエーション設定を動的に行う
Model::unbindModel() アソシエーションを動的に解除する
Model::setSource() 指定したテーブルでモデルのセッティングを行う
Model::set 値をセット
Model::deconstruct() 日時データを指定フィールドが認識できる日時形式に加工
Model::schema() スキーマを入手
Model::getColumnType() 指定カラムのデータ形式を入手
Model::getColumnTypes() 各カラムのデータ形式をまとめて入手
…
滝下真玄著 – CakePHP辞典より
えー、書ききれませんね。
これは”モデル”の目次の3分の1も書けていません。
こんな目次が始めの21ページに渡り、書かれています。
“ぱっと見で機能がわかる目次“がこの本の大きな魅力の一つだと思います。
この情報は普段ならCakePHPのAPIドキュメントから探します。
しかし、このドキュメントは英語である上に、説明がある程度までしか書かれていません。
さらにサンプルコードも少ない。
単純に比較する訳にはいかないのですが、APIドキュメントは下記のリンクの”Model::find()“の説明を見てください。
これに対して、”CakePHP辞典”にはここまで説明があります(引用するのはModel:find()の説明の一部だけです)。
$typeに設定する値
- all : 条件に合致するすべてのデータを取り出します
- first : 最初に見つかったデータのみを取り出します
- list : 指定したフィールドのデータをリスト化して取り出します。指定フィールドが1つの場合は、idをキーとする連想配列で取り出します。指定フィールドが2つの場合は「1番目 => 2番目」の連想配列で取り出します。フィールドが無指定の場合はidを配列で取り出します。
- threaded : 通常は自分のレコードとアソシエーションモデルのレコードを1レコード値として受け取ることができますが、threadedを指定すると、そのレコードの親子関係を解析し、子レコードを階層で取得することができます。このレコード内にさらにこのレコードが存在する場合も再帰的に取得します。この機能を使う場合は「parent_id」という名前のフィールドが必要になります(ほかの名前に変更することはできません)
- neighbors : find(‘first’)と似ていますが、これは該当レコードの隣り合ったレコードの情報を取得できます。連想配列で「prev」キーの値は該当レコードの値の前のレコード、「next」には後のレコードが格納されます。
滝下真玄著 – CakePHP辞典より
このように、”この辞典一冊で特定のメソッドの使い方がわかる“というのが魅力の二つ目です。
そしてこの二つの魅力が合わさることで、あなたは(少なくとも私は)CakePHPに再度惚れてしまうでしょう。
例えば、私は普段使わない”SecurityComponent“に地味に使える機能があることに気がつきました。
Securityコンポーネント
SecurityComponentのクラス・プロパティ
SecurityComponentのクラス・メソッド
SecurityComponent::requirePost() POST形式のリクエストを必要とするアクションを指定
SecurityComponent::requireGet() GET形式のリクエストを必要とするアクションを指定
SecurityComponent::requirePut() PUT形式のリクエストを必要とするアクションを指定
SecurityComponent::requireDelete() DELETE形式のリクエストを必要とするアクションを指定
…
SecurityComponent::blackHole() 不正なリクエストに対して行う処理を指定する
滝下真玄著 – CakePHP辞典より
POST、GETなどの形式を制限することが出来るんですね!
さらに”SecurityComponent::blackHole()”というコールバックメソッドまで。
うまく使えば、いつも自分で書いているあんなことやこんなことが簡単に…。
皆さんに知っていてもらいたいのは”Set“クラスですね。
CakePHPは基本的にデータを配列で扱います。
そのため、コードの大半が配列処理で埋まります。
この世話を色々としてくれるのがこの”Set“クラス。
もちろんSetクラスも”CakePHP辞典”に載っていますよ。
と、あまり詳しく書いたり、引用すると滝下さんに怒られてしまいそうです(笑)
あとは、本を読んで勉強してくださいね。
便利なtipsを知る
先ほど紹介した辞典的な使い方も良いのですが、ちょっとしたtipsもCakePHP辞典には載っています。
“これは良いな“と思ったのが、30ページにある”開発環境と本番環境でのコードの共通化“というtips。
(コメントは省略しています)
class DATABASE_CONFIG {
var $default;
var $default_pub = array(
);
var $default_dev = array(
);
function DATABASE_CONFIG(){
if($_SERVER['SERVER_ADDR'] == '12.34.56.78'){
$this->default = $this->default_pub;
}else{
$this->default = $this->default_dev;
}
}
}
滝下真玄著 – CakePHP辞典より
このようなコードを示したtipsがいくつか載っています。
どれもこれも、すぐに実践で使えるコードです。
これもCakePHP辞典の嬉しいところ。
おまけ、しかし有益な情報
この情報は”資料“として載っているものです。
おまけとして載せたのでしょう。
しかし、とても有益な情報です。
- CakePHPの定数
- すぐに忘れるのがこの定数。各ディレクトリのパスなどが格納される定数が一覧化されています。
- CakePHPの処理の流れ
- CakePHPの処理が図示されています。コアコード読むのに便利!
- CakePHPバージョン1.2と1.3の違い
- 1.2と1.3の差異の概要が分かる。
- CakePHPに関する情報の入手
- この情報は初心者にとってとても有益。フレームワークを始めたころは、どこから情報を入手するのかわからないですから。ここを網羅しておけばとりあえず大丈夫でしょう!
あとは最後の索引。
“名前は分かるんだけど、どうやって使うんだっけ…“という場合は最後の索引から探してください!
ここにも全てのクラスとメソッドが網羅されてます。
CakePHP辞典はまさに”辞典“と呼ぶに相応しい内容です。
情報へのアクセスのしやすさ、その内容の濃さ。
表現力を高めるために、よく”辞書を読書する“ということが行われます。
小学生のときに先生にやらされた方もいるはず。
フレームワークの表現力を高めるためにも、是非”CakePHP辞典”を読書してください。
CakePHPの魅力に気づき、再度惚れてしまうこと間違いなし。
|
CakePHP辞典
|
こちらもあわせてどうぞ
ちょっと一言
昨日出すはずの記事が、今日になってしまった...。
引用するのもちょっと適当ですね。
技術書は、テーブルなどでくくられている場合が多いので、ご勘弁くださいorz
-
http://topsy.com/1-byte.jp/2010/10/24/cakephp_dictionary/?utm_source=pingback&utm_campaign=L2 Tweets that mention [書評] これを読めばCakePHPに再度惚れられる?CakePHP辞典 — Topsy.com


