2012年4月30日月曜日

cakePHPの構造と動作のまとめ(その3)

前回は基本的なフォルダ構成についておおよそまとめた。それらの構成を見てるとどういう動きをするのかもおおよそ解ってきた(つもりだ)けど、やっぱりつもりじゃ何となく嫌だしある程度調べてみたので今回はそのまとめ。
ただ、大まかな流れを書いてるサイトは沢山あっても、どこの何を参照しながらcakePHPが構築されていってるのかというような詳しい部分を書いてるところはあまり見当たらない。
そこで、まずcakePHP内の表示部分に以下のコードを貼って呼び出される関数を追いながら調べてみようと安易な気持ちで考えた。

print '<pre>';
print_r(debug_backtrace()); 
print '</pre>';
 debug_bactrace() <- 呼び出し元の関数やファイルをどんどんと追って行く
まずは簡単なページを作成

ちょっと行程を飛び越えちゃうんだけど、CookBook2.xのブログのチュートリアルを参考にしてモデルとコントローラーとビューを作成してみた。作成したものはチュートリアルのと全く同じだから割愛。

まずは「app/View/Posts/index.ctp」の一番最後に上記のソースを貼り付けて表示させてみることに。

ものすごいことになった

妙に表示が遅いなって思ったら…思わず馬鹿じゃないのって言いたくなる結果になっちゃった。

<pre>Array
(
    [0] => Array
        (
            [file] => /var/www/html/cake20/lib/Cake/View/View.php
            [line] => 908
            [function] => include
        )

    [1] => Array
        (
            [file] => /var/www/html/cake20/lib/Cake/View/View.php
            [line] => 872
            [function] => _evaluate
            [class] => View
            [object] => View Object
                (
                    [Helpers] => HelperCollection Object
                        (
                            [_View:protected] => View Object
 *RECURSION*
・
・
(その後75751行迄続く)

1000行程度なら頑張って解析する気にもなるけど、75751行は…。
もしかしたら、debug_backtraceの使い方をぼくは間違えてるのかな。。ひょっとして、ファイルに書き込まれてる関数全部吐き出すの?呼び出されたものだけじゃなくて?
と不安になって調べてみたけど、間違えてないっぽい(多分)。とすると、ひとつのページを呼び出すのに75751行分もあちこち参照してるのかぁ。
こんな長いのは初めてみたからびっくり。それだけぼくはちっぽけなのしか作ってこなかったってことなのかな。

方針転換

ひとまず、上のコードのprint_r(debug_backtrace());print count(debug_backtrace());に変更。どれくらいのファイル/関数が呼ばれてるのかだけ出力してみると、7つだけだった。
というわけで、更に変更して以下のコードを入れてみることにした。ついでにどこを呼び出してるかも見てみることに。

foreach(debug_backtrace() as $key => $r){
 print '[Key]'.$key.'<br/>';
 print !empty($r['file']) ?'[file]'.$r['file'].'<br/>';
 print !empty($r['line']) ?'[line]'.$r['line'].'<br/>';
 print !empty($r['class']) ?'[class]'.$r['class'].'<br/>':'';
 print !empty($r['function']) ?'[function]'.$r['function'].'<br/>':'';
 print !empty($r['args']) ?'[args]'.count($r['args']).'<br/>':'';
 print '<br />';
}

すると、非常にあっさりとした感じに。

[Key]0
[file]/var/www/html/cake20/lib/Cake/View/View.php
[line]908
[function]include

[Key]1
[file]/var/www/html/cake20/lib/Cake/View/View.php
[line]872
[class]View
[function]_evaluate
[args]2

[Key]2
[file]/var/www/html/cake20/lib/Cake/View/View.php
[line]463
[class]View
[function]_render
[args]1

[Key]3
[file]/var/www/html/cake20/lib/Cake/Controller/Controller.php
[line]959
[class]View
[function]render
[args]2

[Key]4
[file]/var/www/html/cake20/lib/Cake/Routing/Dispatcher.php
[line]110
[class]Controller
[function]render

[Key]5
[file]/var/www/html/cake20/lib/Cake/Routing/Dispatcher.php
[line]85
[class]Dispatcher
[function]_invoke
[args]3

[Key]6
[file]/var/www/html/cake20/app/webroot/index.php
[line]96
[class]Dispatcher
[function]dispatch
[args]2

これなら追えそうかもしれない。

とにかく追跡してみる

あとはこのfile情報やline情報をベースに、ネットでも調べながら、モデルコントローラーコンポーネントビヘイビアヘルパーエレメントレイアウトなどをあえて呼び出しつつ、色んな場所で実行しながらマッピングをしていった。
何だか非常に効率が悪い気もするしもっとスマートなやり方がある気もするけど、自分不器用なんで気にしない。

あちこちに貼ってみた結果

どうも、こんな風になってるらしい。

もうわけがわからないですが、これもかなり端折っちゃった。最初の目的がセキュリティ関連がどうなってるんだろうというのがあったんだけど、複雑すぎて結局わからないまま。
(もっと知識がついた段階で、改めて中を調べてみようかと思います) 簡単な流れをまとめると、
http://localhost/cake20/posts/を呼び出した場合

1)まずはcake20/index.php(またはcake20/app/webroot/index.php)が呼び出される

ini_set('include_path', ROOT . DS . 'lib' . PATH_SEPARATOR . ini_get('include_path'));によって参照パスが定義されてる。

2)様々な定義がされた後、Dispatcherに渡される

app/config/core.phpapp/config/bootstrap.phpの設定情報もこの時点で定義されるらしい。

3)ルーティング情報が読み込まれ、一連のコントローラーが読み込まれた後、$Dispatcher->_invoke()によってコントローラが呼び出される

ここがコアみたい。実際は_invoke()によって描写の最後まで実行される。

4)$controller->constructClasses()コンポーネントとヘルパー(モデルも?)が読み込まれる

あと記載はしてないけど、プラグインもこの時に読み込まれる(らしい)ただ、モデルが読み込まれるって書かれてるっぽいんだけど、それらしい動きをどうもしてない。
むしろモデルは$this->[モデル名]みたいな感じでコントローラ内で呼び出した最初の時に、__get()__isset()のマジックメソッドによって読み込まれてるっぽい。
(怪しいんで、図解にはモデルは書いてません)

5)beforeFilter()などはこの時に呼び出される

そういったもろもろのはこの時に定義される。

6)$this->_invokeAction()によってPostsController->index()が呼び出される

要はぼくが作ったファイルはこの時に呼び出され、実行される。
もちろんそのファイルないし関数が作成されてなかったらエラーとなる。

また、上にも書いたように、モデルは$this->[モデル名]みたいに呼び出された最初の際にマジックメソッドによって読み込まれてるみたい。
($usesにそのモデル名がなかった場合、エラーになる)

7)index()の読み込みが終わったら、$this->render()にて描写開始

なのかな?このあたりがちょっとあやふや。
なお、render()が実行される前にbeforeRender()が実行される。

8)レイアウト→ビュー→エレメントを使ってHTMLが構築される

この時点では、あとは渡された情報から作成されるだけ。

9)終了処理が行われた後、表示される

afterFilter()関数が作成されてあればそれが呼ばれる。
あと図には書かなかったけど、$controller->shutdownProces()が呼び出されて終了処理が行われ、そして表示される。


なんというか、複雑すぎて結局全部は追えなかった。図を作成するのに4日近くかかったけど、どういう動きをするかを実際に検証しながら知ることができたからやってみてよかったといえばよかったかも。
(間違えてるかもしれませんが)

2012年4月25日水曜日

cakePHPの構造と動作のまとめ(その2)

前回はMVCの基本だけまとめたが、今回はcakePHPを構成しているパーツ全般とその場所に関してのメモ。なお、ぼくはcakePHPディレクトリをcake20とした為、ディレクトリの場所などは/cake20/appというように記述します。

全体の構造

appディレクトリ
基本的に作成したものは全てこの中に格納する。ここの詳細は下に記載。

lib/Cakeディレクトリ
cakePHPのアプリケーションが格納されてる。いじらない方がいいらしい。

pluginsディレクトリ
既に開発されてるプラグインをいれるディレクトリ…と思うんだけど、appディレクトリ内にもPluginディレクトリがあり、CookBookでも「app/Pluginに入れてね」って書いてあるし、いつ使うのかはよくわからない(--;)

vendorsディレクトリ
拡張ライブラリファイルを格納する、らしい。これもappディレクトリ内に重複してる。この使い分け方もまだよくわからない。

appディレクトリの構造
app/Config

基本となる設定ファイルが入る。データベースの設定やルーティング設定など。

□Shemaフォルダ
bakeというプロジェクト自動生成プログラムを走らせた時に設定ファイルが生成される。その際少しいじったりするらしい。

acl.ini.php
acl.php
名前的にACL(Access Controll List)をいじるっぽいです。

core.php
基本となる設定はここをいじることになる。デバッグモードのON/OFFもここ。

bootstrap.php
アプリケーション全体に共通することはここに書くらしい。
中をのぞくと

This file is loaded automatically by the app/webroot/index.php file after core.php

と書かれてる。core.phpをあまり改造せずにこっち側で変更、というようなやり方ができるんだね。

database.php.default
実際はdatabase.phpに名前を変更して使用する。
データベースの接続設定や、前回ちょろっと書いたモデルのデータソースの設定もここでするらしい。

email.php.default
実際はemail.phpに変更して使用する。
cakePHP2.0から実装されたみたい。メール機能を実装する際に設定する。
詳しい使い方はcakePHP2.x「CakeEmail」の使い方に丁寧に書かれています。

routes.php
URLなどのルーティグ設定はここで行う。

app/Controller

コントローラーは基本ここに格納していく。

□Componentフォルダ
作成したコンポーネントファイルはこの中へ。そうすると、コントローラ内で簡単に呼び出せるようになる。

AppController.php
app/Controller内に作成する全てのコントローラーのParentクラスになるみたい。全てのコントローラーに適応させたいものがあればここで拡張する。

PagesController.php
静的ファイルを呼び出す際にここが呼び出されるらしい。
ここ自体はいじらず、Viewディレクトリの中にある「Pages」内にファイルを作成し、
http://localhost/cake20/pages/[ファイル名]
とすることで呼び出せるようになる。

app/Model

モデルファイルはこの中へ保管していく。基本的には1つのDBテーブルをつくったら1つのモデルを作成するみたい。

□Behaviorディレクトリ
作成したビヘイビアはこの中へ格納する。同じようにモデル内で簡単に呼び出せるようになる。

□Datasourceディレクトリ
作成したデータソースアプリケーションはこの中へ。その後使用するにはconfig/database.phpの設定も必要になるみたい。

AppModel.php
全てのモデルに拡張したいメソッドはここに記述する。

app/View

ビューファイルはこの中に新たなフォルダを作成して格納していく。ディレクトリ名なども命名規則に沿って作成しないといけない。

□Elementsディレクトリ
作成したエレメントはこの中へと入れていく。そうすることで、ビュー内で簡単に呼び出すことができるようになる。

□Emailsディレクトリ
メール送信時のテンプレートをこの中へ入れていく。textディレクトリとhtmlディレクトリがあり、どちらもdefault.ctpというファイルが入ってる。
htmlメールにも対応してるんだね。

□Errorsディレクトリ
エラー時の文面をここで作成/編集できる。

□Helperディレクトリ
ヘルパーファイルはこの中へと格納。そうすることで、簡単な操作で呼び出せる。
この中にも「AppHelper.php」という作成した全てのヘルパーファイルを拡張できるファイルが存在してる。

□Layoutsディレクトリ
基本となるレイアウトはここで編集する。中には「Emails」「js」「rss」「xml」「ajax.ctp」「default.ctp」「flash.ctp」が存在する。
(全てHTML描写時(メール送信時)に使うレイアウトであって、この中にjsファイルなどを入れるわけじゃないっぽい)

□Pagesディレクトリ
静的コンテンツをここで作成する。通常、cakePHPでコンテンツを作成する場合はコントローラーとビューとモデルがセットとなるけど、ここに作成することでビューファイルのみでできるようになる。アクセスするには「http://localhost/cake20/pages/[作成名]」で可能。

□Scaffoldsディレクトリ
cakePHPにはScaffoldingという開発援助ツールがあるらしいんだけど、そのカスタムをする際にここにいれるらしい。
多分そこまで使わない気がする。

app/webroot

画像やcssファイル、jsファイルなど、cakePHPの影響を受けさせたくないものを格納する。
一応ここが仮想上のrootディレクトリになるみたい。
中にはそれぞれ格納するディレクトリがあり、index.phpと.htaccessとtest.phpとアイコンが入ってる。
test.phpとindex.phpは殆ど内容は同じ。
http://localhost/[cakePHPディレクトリ]/test.phpとすることでテストページが機動する。
(cakePHP2.0以上の場合、test.phpを機動するにはPHPUnitのインストールが必須)


その他のディレクトリ

□app/Console
コマンドライン上でcakePHPを使う際のアプリケーションはここに納めるみたい。
使い方はここらに詳しく書かれてました。

□app/Lib
内部ライブラリを作成した際にはここにいれる、らしい。
Vendorとの使い分け方は今はまだイマイチ頭に浮かんでこない。

□app/Locale
国際化に対応する為のものをここに入れる。

□app/Plugin
□app/Vendor
上に書いたとおり。通常のプラグインパッケージやベンダーライブラリはここに入れるらしい。上のフォルダとの違いは何だろう?

□app/Test
test.phpにてテストしたい場合、この中のCaseディレクトリの中に入れるみたい。
bakeという自動生成プログラムを実行すると楽しく作成してくれるっぽい。

□app/tmp
一時保存ファイルがこの中に入る。書込み可能にしておく必要あり。


ここまで、中の構成などを見てきた。まだ作成までいってないしあくびがでそうになるけど、動きや構成を知っておかないと後でしょんぼりな思いをしたりするし、何より怖いしね。ただ、これまで見てきた限りでは拡張などで基本的なことは全部できるようになってそうって印象。

[参考リンク]
cakePHP CookBook2.x(日本語版)
cakePHP CookBook2.x(英語版)
cakePHP CookBook1.3(日本語版)

cakePHPの構造と動作のまとめ(その1)

cakePHPの命名規則に関してメモしようと思ったんだけど、その前にフォルダの中を見ているうちに一体どういう構造になっててどういう動きをするんだろうっていう方が気になったから、先にそっちをまとめておこうと思う。

大まかなことはcakePHP CookBook2.xに書いてあるんだけど、ちょっとフォルダ構成を見て気になったので。

あと、このページにも結構詳細に書いてあった。
cakePHP guide:HTTP リクエストに対する CakePHP の動作フロー

基本1:cakePHPはMVCフレームワークであること

PHPフレームワークには結構多い構造らしいんだけど、cakePHPもMVCデザインを採用してるらしい。 これは主な処理の基本である「データ(DB)の取扱い」「描写」「リクエストと計算」をそれぞれ切り分けて作成していこうというもの。

要は今まで資料集めもプレゼン資料作成もスケジュール管理も全部1人でやってたのをそれぞれ担当を設けてやっていくって感じなのかな。

そうすることでそれぞれのパーツを複数で開発していきやすくなるし、変更がある際にもどこを変更するべきかが明確になる(らしい)。

M:モデル(Model)

ここでは主にデータベース処理やPost時の内容の検証(バリデーション)などを行う。テーブル内容の設定といったものもここに書き込む。
基本は1テーブルにつき1つのモデルページを作成する。他のテーブルと結合する場合も、ここに設定を書き込むと自動的にjoinしてくれる。SQLインジェクション対策は自動的に行ってくれる。
また、モデルにはビヘイビアデータソースコールバックと呼ばれる拡張ツールがある。

ビヘイビア
汎用的な処理を複数のモデルページで使えるようにするツールで、クラスファイルとして格納できる。

データソース
csvやRSSフィードなどもモデルとして扱えるようにするツール。面白いのはMysqlや他のDBと同じようにRSSフィードも扱えるようになるってことかも。
(そもそも、cakePHPでは基本的にSQL文は使わずに独自の関数で呼び出すらしい)

コールバック
データの検索、挿入、更新、削除の前後に行う共通の操作を記述する。

V:ビュー(View)

これは最後のウェブページの描写を担当するいわばデザイナー。
ウェブページを手軽に作成していく為の様々なツール(ヘルパー)が用意されている。
またビューページは他にエレメントレイアウトといったページで構成される。

ヘルパー
フォームの作成などを手助けしてくれる。ヘルパーは多数用意されていて、javascriptを簡単に記載できるようなのもある。
CookBook(英語版)を読むと、Prototype.jsMootools.jsjQuery.jsをサポートしてるらしい。もちろんそれらを使うにはダウンロードする必要があるけど。
またヘルパーは自作もでき、そこでもコールバック関数が使えるみたい。

レイアウト
著作権など全てのページで描写するものは基本的な形はレイアウトにまとめることができる。

エレメント
メニューバーといった、複数のページで描写するものはエレメントにまとめることができる。

C:コントローラー(Controller)

MVCの順序では最後になるんだけど、最も根本的な部分となる。内部的な処理を行ったり、Modelからデータを受け取ったり、Viewへデータを渡したりする。またCookieやSession処理、主なセキュリティ処理やPost/Getで受け取ったデータの検証なども行う。

コントローラーもまたコンポーネントコールバック関数といった拡張機能がある。

コンポーネント
コントローラー版ヘルパーのようなもので、役に立つコンポーネントが既にいくつか用意されているし、当然自作もできる。

コールバック
Viewでの描写前や、リクエスト前などに共通して他の動作をさせたい場合、コールバック関数に記載することで実装できる。


長くなってしまったので、続きは次回にでも。
だけどこう見るだけでも1つのページにアクセスする際相当沢山のページを読み込むっていうのがわかるなぁ。
ただそれを管理しやすい仕組みにはなってるらしい。それもまあ次回に。

[参考リンク一覧]
cakePHP CookBook2.x(日本語版)
cakePHP CookBook2.x(英語版)
cakePHP guide:HTTP リクエストに対する CakePHP の動作フロー

2012年4月23日月曜日

cakePHP2.1を導入する

早速自宅のPCにcakePHP2.1.1を導入してみた。

ダウンロードはここから

ちなみに、OSはLinuxのCentOS6。既にPHPとMysqlとapacheはインストール済。
PHPのヴァージョンは5.3.3、Mysqlは5.1.61、apacheは2.2.15。
CakePHP2.x系を導入する為にはPHP5.2.8以上が必要らしい。

というわけで、早速ダウンロード→解凍。Windowsサーバーの場合はそのままhtdocs内にぶっこめばOK。
$ unzip cakephp-cakephp-2.1.1-0-g43cf2f0.zip
.(リストがずらずらずらっと続く)
.
$ mv cakephp-cakephp-43cf2f0 /var/www/html/cake20
(わかりやすいようcake20というフォルダ名にした)
$ /sbin/restorecon -R /var/www/html
(SELinux対策でcake20のファイルタイプを/var/www/htmlと同一のものに)
http://localhost/cake20/にアクセス。
なんか赤いのやら黄色いのやらがわらわらと…。
リファレンスを見る限り、これらが全部緑色になるようにしないといけないみたい。

とりあえず、上から。
Warning (512) /var/www/html/cake20/app/tmp/cache/ is not writable [CORE/Cake/Cache/Engine/FileEngine.php, line 320]
writableって書いてるからそこの書込み権限がないって怒ってらっしゃるのだろう。
$ chmod 707 /var/www/html/cake20/app/tmp/cache
ってやったら表示は消えた。
(この表示はWindows環境の場合はでないかも)
Notice (1024) Please change the value of 'Security.salt' in app/Config/core.php to a salt value (略)
Notice (1024) Please change the value of 'Security.cipherSeed' in app/Config/core.php to a numeric (digits only) seed value (略)
これもリファレンスを見ると、app/Config/core.phpSecurity.saltSecurity.cipherSeedの値を前者は好きなランダム文字列に、後者は数字に変えればいいらしい。 それぞれcore.phpの187行目と192行目にあった。
[app/config/core.php]
/**
 * A random string used in security hashing methods.
 */
Configure::write('Security.salt', '(ごじゃごじゃした文字列に変更)');

/**
 * A random numeric string (digits only) used to encrypt/decrypt strings.
 */
Configure::write('Security.cipherSeed', '(長い数字に)');
これらは推測できないものなら何でもいいらしい。それで2つの警告文面も消えた
Your tmp directory is NOT writable.
最初と同じで、tmpの書込み権限がないって怒ってる。
$ chmod 707 /var/www/html/cake20/app/tmp
で消えてくれた。あと、tmp内にある全てのフォルダに書込み権限をつけた方がいいみたい。
Your database configuration file is NOT present.
Rename APP/Config/database.php.default to APP/Config/database.php
そのまんまapp/configフォルダの中の「database.php.default」の名前を「database.php」に変えろって言ってるのね。
これがデータベース接続する為に使うファイルで、接続設定もここで行う。
[app/config/database.php.default]
/**
ライセンス情報や設定の仕方などが並ぶ。
編集する箇所は60行目あたりから
**/
class DATABASE_CONFIG {

 public $default = array(
  'datasource' => 'Database/Mysql',
  'persistent' => false,
  'host' => 'localhost',
  'login' => '(ユーザー名)',
  'password' => '(パスワード)',
  'database' => 'cakephp', //データベース名
  'prefix' => '',
  'encoding' => 'utf8', //文字コード。コメントアウトされてるから外す
 );
(以下略)
datasource
使用データベースを記載。PostgreSQLを使う場合は「Database/Postgres」(PostgreSQLのバージョンは7以上)。それらは30行目に書いてる。

persistent
永続的接続にするかどうか。すれば当然負荷がかかる。しない場合はfalse。

host
接続ホスト。ローカル環境だから今回はlocalhost。

login
password
接続に使うユーザー名とパスワードを記載。

prefix
指定すると、全てのテーブルの前にその文字をつける、らしい。ひとつのデータベース内に複数のテーブルを作成していった際わかりやすいようにする為の処置かな。
設定した頭の文字は、cakePHP内では省略して記載できるようになるっぽい(DBのテーブル名はちゃんと指定しないとだめぽだけど)

encoding
ここを指定することでSQL文の「set names (文字コード);」を自動でしてくれるらしい。


ここまで設定して再びhttp://localhost/cake20/にアクセスしてみたら、全部綺麗な緑色が咲いてくれました。

導入自体はカンタン。データベースのパスワードをvar/www/html内に入れるあたりなどちょっとセキュリティ関連が気になるところだけど、今はローカル環境での導入だからもうちょっと知識がついてから考えることにしよ。

2012年4月22日日曜日

はじめに(CakePHPってなんぞ?)

フレームワークのcakePHP2.1を勉強しないといけなくなった。

フレームワークって名前は聞いたことあったし、いずれ学ばないとって思ってはいたけど…
概要を知れば知るほど面倒くさそうに思えてくる。2.x系の日本語版の解説ページがまだそんなになさげというのも、ますます面倒くさい。英語版も読めなくはないけど、自国語で読めた方が理解もしやすいんだけどな。

とりあえず、まだフレームワークのフの字も知らないぼくが、フレームワークとCakePHPについて調べた内容のまとめから。

■フレームワークとは既に用意されるパーツを組み合わせて開発していく手法
簡単に言えば、普通のPHPはネジと板金を使って1から作成していくのに対して、フレームワークはある程度完成されたパーツを組み立てて作成していく、という違いかな。
その分短いコードで高速に開発していける、ということだろうか。

■CakePHPとはMVCフレームワークであること
CakePHPはM(Model=データ処理)、V(View=表示部分)、C(Contoller=内部処理)の3つに
作業をページで切り分けて開発していくフレームワークの仲間、らしい。
切り分けることでそれぞれのページが何の作業をしているかが明確となり、開発者とデザイナーが同時に作業できるようにもなるそうな。確かにそうだねぇ。

■命名規則が厳格
CakePHPは、それぞれのページの命名方法やMysqlデータベースのテーブル名も命名規則にのっとって作成しなければならない。更にはテーブルのフィールド名もある程度決まってくる。
ここに関しては基本のコアになるとも思うから、 次の次にでも忘れない為にも書いていこうかと思います。

■開発時はURLを見ればどのページのどの関数が使われてるかが一目瞭然
CakePHPでは、Controllerという1つのページで複数のページを扱うことになるらしい。
その場合、1つの関数が1つのページを意味するようになる。
Webページの開発では、投稿フォームやその結果ページ、一覧ページ、詳細ページなど同じコンテンツを複数ページにわたって処理、表示するということが多く、それらを1つのコードにまとめることで管理しやすくするのが目的、かな?
そして、URLを見れば簡単にどのControllerのどの関数が使われているのかがすぐわかる仕組みになってる。

■導入はCakePHPをダウンロード→ルートフォルダに放り込めばいいだけ
その後多少の設定はあるけど、基本はそれでできるっぽい。
Linuxならvar/www/html内、Windowsならapache/htdocsの中にフォルダごと放り込めばすぐ使えるようになる。
ただし、CakePHP2.0以上を導入する場合はPHPは5.2.8以上でないといけないらしい。


■ただPHPやMysqlとはまったくの別物だと考えた方がよさげ
PHPに関して言えば、殆どの関数をCakePHP内に用意されてる関数で処理するし、
Mysqlでも同じで、かつ複合プライマリキーは対応していない。というよりSQL文自体、CakePHP内で書けるようにはなってるけど基本は書かない。
ネジと板金の状態とある程度作られたパーツとだと扱い方も変わってくるってことですね。

とりあえず、今回は概要だけで次回からは導入方法などを記載していきます。
そんなのは普通に検索すればすぐにでてきますが…あくまでぼくが忘れない為になので。

【参考リンク】
cookbook2.x
初心者のためのCakePHP2.0 プログラミング入門
CakePHP.org
PHPフレームワークとは?-PHPプロ!