ちょっとあけて再び技術系。
CakePHPというと知らない人にはちょっとおいしそうな香りがしますが、
何のことはない、PHPのフレームワークです。


CakePHPの特徴


強いて言えば猫がかわいい。 (^ ^

ちょっと調べた感想。
結構完成度は高いフレームワークだと思います。
導入のハードルが低いという話を聞いていたので、
どうなんだろうと思いましたが、なかなか。
ハードルを下げるための努力がいろいろとされていますね。

そして何より、ドキュメントをはじめとして、日本語化が充実しており、
本なんかなくても十分触れそうな感じです。
Zend Frameworkよりも確かにとっつきやすいです。

CodeIgniterと比較してよく言われるのは、データベースがあることが前提になっていること。
とは言え、DB使わない開発なんてほとんどないと思います。

一通りドキュメントを読んだ程度ですが、簡単に使えるようにしたいという要件と、
ORマッパーの作りが問題になりそうな気がしなくもないです。
普通に考えると、ここは意識してないと、後々パフォーマンスの問題が顕著に出てきそうです。
余計な処理で結構無駄にメモリーを使ってそうなイメージがありました。

CakePHPのインストールとエラー


もと東大生もと社長の自由奔放ブログ Just do it now!-CakePHPのwelcomeページ
▲CakePHPのwelcomeページ
何はともあれ、まずはインストール。
とは言え、バーチャルホストを1個追加して、データベースを作って、
ちょいちょいと設定をした位で使えました。

強いて言えば、先日調べたPHPのタイムゾーンの扱い変更に伴うエラーが出たくらい。



strtotime(): It is not safe to rely on the system's timezone settings.


というエラーが出ていたので、php.iniで設定しました。

# vi /usr/local/lib/php.ini

916 [Date]
917 ; Defines the default timezone used by the date functions
918 ; http://php.net/date.timezone
919 ;date.timezone =

となっているので、919行目にAsia/Tokyoを設定します。

919 date.timezone =Asia/Tokyo


保存したら、Apacheの再起動。
# /etc/rc.d/init.d/httpd restart


後は、tmpディレクトリに書き込み権限を追加した位だったかな?
簡単すぎて、手順書すら残してなかったです。
これでめでたくインストール画面が表示されます。


関連記事


ここで書いてある、5.3から5.4への変更点の

Date拡張モジュールでTZ 環境変数によるタイムゾーンの設定をサポート中止

ですね。

設定が間違っていると出るエラーもわかりやすくてこのあたりも親切です。

Zend Framework
使えないスケルトンが入っているだけで、知らないとかなりとっつきにくい印象がありました。

関連記事


CakePHPの便利なScaffolding


もと東大生もと社長の自由奔放ブログ Just do it now!-CakePHPのScaffolding
▲CakePHPのScaffolding
何が便利って、Scaffoldingが便利ですね。
CodeIgniterでは廃止されたらしいですが、簡単に言うとほぼ何もしなくて、
データベースのテーブルに対する登録・検索・更新・削除のページを作ってくれます。
いわゆるCRUDってやつです。
そして、下に実行SQLを表示してくれます。
このあたりは昔ボクが作ったフレームワークでも実現してました。



CakePHPは規約ベースのフレームワーク


強いてあげると難点は、規約のフレームワークの感が強いです。
プログラムはお作法に則って書くのは慣れの問題でいいと思うんです。

でもデータベースにまで命名規則が及ぶのはちょっと気になります。

設定で変更できそうですが、プライマリキーをidとしないといけないあたりが
個人的には嫌いです。

単数形と複数形を使い分けないといけないあたりも個人的には嫌い。
ボクの規約では全部単数形でした。
理由は複数形だとわからなくなる人が出てくるから。
dataを複数形でdatumとかにしても日本人には混乱を招くだけです。
CakePHPのドキュメントにある、PersonとPeopleでも一瞬考えちゃいます。

後は、createdとmodifiedというカラムをつけると、
勝手に登録日と最終更新日時を入れてくれます。
これも個人的には、create_datetime、modify_datetime
できれば、update_datetimeとしたいところです。
このあたりも変更できそうですけどね。

関連テーブルはアルファベット順にしてくださいって言うのも
ちょっと気になりますね。
個人的には意味合いの強い弱いで順番を決めたいところです。


CakePHPのベンチマークを取ってみた


紹介だけで終わるのもどうかと思ったので、簡単なテーブルを作って
46件データを入れて、Scaffoldingで生成されたページのベンチマークを取ってみました。
特にツールを使ったわけでもなく、適当にペチペチとリンクをクリックして、
レスポンスタイムを取ってみました。

作ったテーブル
CREATE TABLE genres (
id INT PRIMARY KEY,
parents_genreid INT,
genre_name VARCHAR(250),
genre_alias VARCHAR(250),
genre_level SMALLINT,
order_num SMALLINT,
created DATETIME,
modified DATETIME
);



一覧ページ(単位:ミリ秒) 平均294.8ミリ秒
312、358、359、250、296、
296、234、296、312、234、296

詳細ページ(単位:ミリ秒) 平均231ミリ秒
249、250、234、203、250、
203、172、265、265、219

参考までに、ただのHTMLページだと平均は92ミリ秒
120、110、50、100、140、
90、50、100、60、100

何もしていないPHPのページだと平均は86ミリ秒でした。
110、90、47、90、60、
100、120、50、110、90

回線はイーモバイルなので、回線の影響も大きそうですね。

流石にこれで遅いと話になりませんが、とりあえず使っていく分には問題なさそうです。
テーブル構成をもう少し複雑にした場合の数値も見てみたいところです。
こうして数値は残してあるので、またしばらくしたら計ってみて記事にしてみますね。

いろいろといいところ、悪いところを書いてみましたが、
総合評価としてはマル。
充分使えそうなやつでこれからちょっと楽しみです。


関連記事