2008年01月03日
Web.Dev | CakePHPで開発
CakePHP: the rapid development php framework. Home
年末にリリースしたサイト(フルリニューアル)で、WebフレームワークにCakePHPを採用した。最初クライアントから既存の環境と合わせるためにPHP4でという話があったので、マジかよ!?と思いつつPHP4にも対応していて、且つ依存ライブラリがないCakePHPを選択した。結局はPHP5で開発できることになったのだが。
CakePHPのビューにSmartyテンプレートを使いたかったのだけど、Smartyを使うとCakePHPのビューキャッシュが効かなくなったのでパフォーマンスを気にして断念。なのに、最後の最後でクライアントからAkamai使うにあたってキャッシュされて困るページはありますか?と訊かれ、初めてAkamai使うことを知らされる。こんなことならSmarty使えばよかった。
ビューでPHPの生のコードを使えるのは一長一短。テンプレートを取得する必要はないけど、いちいち <php... と書くのは面倒だし、可読性も悪い。ビューでSmartyを使う選択肢はCakePHPが標準でサポートしててもいいように思った。
After Railsなフレームワークらしく、CakePHPにはAjaxサポートが備わっており、Ajaxヘルパークラスを使うことで容易にAjaxを使った機能をページ内に組み込むことができる。
ところが、今回サイトで使用しているアクセス統計プログラムのJavaScriptのコードとAjaxヘルパーが生成するJavaScriptとの相性が悪く、特定の環境でどうしてもエラーになってしまい、CakePHPのAjax機能を利用することができなかった。Ajaxで実装していたのは大した機能ではなかったので、自前でコードを書いて対処することができた。せっかく本来楽に開発できるところで、時間をロスしてしまった。
このアクセス統計のJavaScriptは、prototype.jsにも悪影響を与えていて本当に腹が立った。こっちではどうしようもないだけに、アクセス統計のプログラムはどんな環境で使われてもいいように配慮して作って欲しいものだ。
CakePHP習得の上で僕にとって難しかったのはModelのクセを掴むこと。DAOなのかEntityなのか、ActiveRecordな機能を備えているけど、Railsと一番違うところであった。最初、他のテーブルと関連を持つクラスをfindAll()とかで取得したときに、何が返ってきてるのかよく分からなかった。やたら複雑な連想配列が返ってくるのだけど、何故クラスのオブジェクトを返してくれないのか実は今でも理解できていない。
ってな具合で諸々不満点はあるのだけれど、これがなければ短期間でサイトを構築することはできなかったと思うので感謝です。後でDonationしようと思います。日本のユーザフォーラムにもお世話になりました。