追記)大阪でも2/5(日)に開催します!
http://atnd.org/events/24800

[email protected]えて8時間耐久でCakePHP2を学ぶという勉強会を1/25に下北沢OSSCafeで開催しました。当日はUStreamも常時30人前後の人が視聴しており、現地の参加者も含めて50人弱が耐久形式で最新のCakePHP2の利用方法を学びました。
なお今回のターゲットの@shinichiNさんはフレームワークなどは未経験とのことでしたので、WordPressを使ったり簡単なPHPスクリプトを自分で書けるくらいの人がCakePHPの基本を理解するというのが今回の主旨です。

MVCモデルとは牛皿定食である


フレームワークを使ったことが無い人にとって、とっつきにくいのがMVCモデルの考え方です。ModelがデータベースでViewがHTMLでという説明を聞いているとまるでこれまで作っていたプログラムとまったく違うものを作らないと行けない気がしてきます。しかし実際のところMVCモデルは大きくなったプログラムを分割する為の経験則です。牛丼を牛皿定食にしても内容物として肉、玉ねぎ、お米があることに変わりはないようにMVCモデルもこれまで作っていたプログラムを一定のルールに従って分割しただけです。

普通のPHPスクリプトの例で考えてみましょう。(クリックで拡大)

上記のスクリプトはなるべくシンプルにデータベースのデータを画面に表示するという普通のPHPスクリプトですが、このうちデータベースに関連する処理とHTMLに関連する処理を別の場所に移すというふうに考えます。(このスクリプトはDB処理とHTMLが一箇所にまとまるように書いてありますが、分散していた場合はそれぞれを抜き出して移動します)

DB処理をモデルにHTMLをビューに移してみました。そしてそれでも残った元々の部分がコントローラーになり、モデルとビューを呼び出しています。スクリプトの内容は分割してincludeで呼び出すようにしただけで全く同一です。こういったものが独自フレームワークと呼ばれCakePHPが一般的になる前からも大きなシステムでは活用されていました。また自分流でスクリプトを書いているとなんだかんだでこういった形を使うようになってきます。
フレームワークを使う場合は各フレームワークごとに決められた場所にMVCのそれぞれの部分を配置することになります。CakePHPの場合であれば下記のような形です。

CakePHP2インストールの肝はPDOとmod_rewriteの確認

CakePHP2はCakePHP1やWordPressなどと違ってPDOというPHPの機能を使っています。インストールの際にはPDOが利用できることをphpinfo()で確認します。またXAMPPやMAMPPでは初期状態ではmod_rewriteが有効になっていません。mod_rewriteを有効にするか、core.phpのAPP.BaseUrlの設定を有効にしてください。
またYukio SaitohさんがWindowsの場合の設定のポイントをまとめて下さいました!

Controller:: ディスパッチャを理解せよ

多くのフレームワークは指定されたURLに応じた所定のコントローラーを呼び出すという機構を採用しています。これをCakePHPではディスパッチャーが行なっており、指定されたURLに応じたコントローラーのメソッドを呼び出します。作ったコントローラーを呼び出す為のURLを考えたり、とあるURLに対応するコントローラーをどうすれば作れるのかを理解すれば自分で作った処理を自由に呼び出せるようになります。
この際に命名規則に従う必要もありません。$usesやアクションの設定を省略した場合は命名規則に従ったデフォルトが呼び出されるだけですので。きちんと指定をすれば自由に名前をつけられます。

Model:: find()を極めろ

CakePHPはモデルの機能が中心といってもよいフレームワークです特にfind()メソッドを使えばほとんど全てのケースのデータベース処理を自動化できます。このfind()に慣れれば慣れるほどにCakePHPでの開発がスムーズになります。
またこのfind()が返却する結果と要求するオプションは大きな配列変数になっています。

配列に依存しすぎという批判もありますが、とにかくえいやと配列を渡すとうりゃっと配列が返ってくるのがCakePHP流なのでそれに慣れるのが早道です。(そもそもPHP自体が配列中心なところがあるので僕はこの設計は成功していると思っています。)

View:: URLやフォームはヘルパーで自動生成せよ

ビューに関しては app/View/Layouts/default.ctpを変更してヘッダ、フッタなどを変更する事と、ヘルパーを利用したタグの自動生成くらいしか覚えることはありません。とりあえずはヘッダなどを任意のデザインに差し替えて、テンプレート内にURLを書くようなタグでヘルパーを使うところから始めればよいでしょう。

お疲れ様でした

実際にはいろいろとデモンストレーションや質疑応答をしながらの8時間の勉強会でしたが、多くの方がCakePHPを好きなように動かせました。(ソースコードを一字一句書き写すのではなく、好きな名前をつけたりしながら各自が確認をしていました)細かいことを詳細に確認するのも大事ですが、まずは全体像を掴んでいじり回せるようになる事が第一歩かと思います。

今回は下北沢OSSCafeという素晴らしい環境で、なおかつ@cognitomさんのハイクオリティUStreamの録画が残っています。動画を全画面表示するとソースコードすら確認できる脅威のクオリティをご堪能ください。(残念ながら午前中のところは録画がありません)

8時間耐久CakePHP(1/4) - Controller編
8時間耐久CakePHP(2/4) - Model編
8時間耐久CakePHP(3/4) - Model編の続き
8時間耐久CakePHP(4/4) - View編

デモで使っていたプロジェクトはとりあえずgithubに置きました。
https://github.com/yandod/shimokita8
同様の勉強会を大阪と福岡でやろうかなと思っています。他にも開催の要望があれば場所さえあればなんとかなりますのでご相談ください。