CakePHPを使った事が無い人は使ってみるべき

第4回CakePHP勉強会に参加してきました。
場所を提供してくださったグリーさん、スタッフの皆様ありがとうございました。

勉強会の内容の素晴らしさについては他の人がupしてくれていますので、フレームワークについて色々思った事を独り言してみます。

PHPフレームワークが乱立しているのではなく選択肢が多いというメリットに気づくべき

PHPは簡単なことをやるには学習コストが低い言語(?)です。
そして、Webアプリを作成するために、より楽できるようにルールを決めてくれているのがPHPフレームワークの役割です。

よく聞かれる質問の1つに「何時間で使えるようになるの?」ってことなのですが、完全に使いこなすのはどれも時間がかかります。
しかし、とりあえず動作させるために必要な初期コストには違いがあります。

その中で初期学習コストが低いのはCakePHPです。セットアップなんていうほどの作業はFTPによるアップロードだけです。コマンドを叩くことは必須ではありませんし、最初はファイルが不足していればエラー画面に表示される指示に従ってファイルを用意すれば良いだけです。そして、何より日本語のフォーラムが活発です。また、勉強会の盛り上がりも国内では一番です。日本語の書籍が充実しているのも大きいですね。

それに対して初期学習コストが一番高いのはsymfonyだと思います。Jobeet(Askeet)というチュートリアルがありますが、24日分 = 24時間以上 という結構なボリュームがあることからもわかりますし、公式ドキュメント量ではダントツで一番多いのもsymfonyです。*1

そして、フレームワークを拡張をする場合ではCakePHPでもsymfonyでもフックポイントは用意されていますし、更に複雑なことをしようとすると悩むのは同じです。ただ、symfonyでは機能が多いのでがっつりと拡張するような状況はCakePHPよりは少なくなると思います。

個人的な感想としては、どちらのフレームワークも優れていますし、目指している方向が異なります。そのため、色々な要因によってフレームワークを選択できるのがPHPの良いところだと思っています。

とりあえずCakePHPを使ってみる

で、PHPフレームワークCakePHPを使った事がない人へのメッセージです。
CakePHPは簡単に導入できるフレームワークです。CakePHPしか使った事が無い人にzfやsymfonyを勧めるのは躊躇しますが、symfonyを使ったことがある場合はCakePHPを使ってみることをオススメします。

CakePHPsymfonyRoRの影響を少なからず受けていますし、MVCという基本的な考え方は共通なので、ほとんど苦労することはないでしょう。ヘルパーなんてメソッド名や引数が同じだったりするものもあります。また、簡単にざっくりと作れてしまうCakePHPの気楽さはsymfonyでアプリを作っていれば余計に実感できると思います。

そして、CakePHPの良い部分も悪い部分もsymfonyを知っているから見えてくる部分があります。

フレームワークに使われない

フレームワークを1つに絞ったほうが、ライブラリの再利用といった点でもメリットがあります。でも、無理に特定のフレームワークに拘ってしまったがためにフレームワークに振り回されてしまっていませんか?

単発のアンケートフォームの開発で共用サーバーでFTPしかできない。。なんて案件だとsymfonyだと面倒です。
CakePHPを知っていれば簡単に作れるのはすぐにわかります。

また、symfonyを知っていればその知識を活かしてCakePHPをより使いやすくすることができます。
たとえば、簡単にテストを行いたいのでlimeを使ったり、アプリの設定定数をphp内に書きたくないのでsfYamlを利用したり、CakePHPのfile.phpだと機能が乏しいのでsfFinderを持ってきて使いやすくしたりといったことは難しくないですからね。

サポート、コア開発体制には気をつける

PHPの全てのフレームワークはマイナーなものも含めると非常に多くあります。どれでも良いのかというと注意点もあります。
それは"長期でサポートされることが保証されているフレームワークでないと駄目"という点だと思います。
これは、Mojaviを使ってきた苦い経験から言えることですね。。
そういう意味ではCakePHP, symfony, Zend Frameworkは安心して使えるフレームワークです。

CakePHP勉強会とは直接関係のないような内容になってしまいましたが、PHPフレームワークというのは難しいものではなく一般的なものになったんだなと改めて実感した勉強会でした。

*1:日本語の情報をあまり見ないだけです