こんにちは。エンジニアのくだわらです。

皆さん、PHPフレームワーク使っていますか?
PHPにはLaravel, Symfony, CodeIgniter, Zend Framework2など有名フレームワークがありますが、今回は日本を始め世界で人気のあるCakePHPの3.0.0開発プレビュー版がリリースされたということで、実際にインストールして検証してみました。

CakePHP3の主な変更点

PHP5.4が必須に

大きな変更点としては、まずCakePHP3.0.0ではPHP5.3以下を切り捨て5.4以上の環境でなければ使用できなくなっています。ライブラリのソースを見てみると配列の短縮構文やトレイト、名前空間などが使用されており、2系から比べるとかなりモダンなPHPのソースコードとなっています。

Composerが標準対応

Composerが標準対応しました。これによりパッケージ管理も容易になっています。Composerに関してはこちらの記事をどうぞ。

Modelクラスが2つのクラスに分割

ModelクラスがTableクラスとEntityクラスに分割されORM(Object-Relational Mapping)の概念が取り入れられました。以前はModelでクエリが実行され取得した巨大な配列をViewに渡して使用する、といった構造でしたがCakePHP3ではQueryオブジェクトをViewに渡し、View側からデータを取得しない限りクエリが実行されなくなりました。クエリの最適化が行い易くなり無駄なリソースを消費するという事態を減らすことができます。

その他の変更点

他にもConfigファイル(core.php database.php)の変更、scaffoldの廃止など様々な変更が実施(または予定)されています。

簡易チュートリアル

CookBookに載っているブログチュートリアルを参考に簡易アプリケーションを作成してみましょう。
英語版(http://book.cakephp.org/3.0/en/tutorials-and-examples/blog/blog.html)
日本語版(http://book.cakephp.org/3.0/ja/tutorials-and-examples/blog/blog.html)
ともにCakePHP3.0のチュートリアルページは存在しますが、今のところ(2014年3月)内容は完成していないようなので参考程度に作成していきます。

必要なもの

  • PHP5.4.3以上
  • mbstring extension
  • mcrypt extension

CakePHP3インストール

まずは実際にインストールしてみましょう。
変更点にも上げたComposerで簡単インストールです。

以上でインストールは完了です。お手軽ですね。

DBの作成

次にチュートリアルに倣いDBを作成します。ブログのタイトル、記事、作成日時、編集日時を保存するテーブルです。

Configファイルの設定

2系では『app/Config/core.php』, 『app/Config/database.php』の設定を行っていましたが、こちらも変更があり『App/Config/app.php』にまとまりました。こちらのdatabase設定部分を適宜開発環境に合わせて変更しましょう。ちなみにComposerでインストールするとSaltも自動設定されるようです。2系の時に変更しないと表示されていた真っ赤な警告は今回出ませんでした。

Welcomeページの表示

cakephp3 welcome page
上記のような画面が表示されたでしょうか。『3.0.0-dev1』と表示される以外に見栄えは2系から特に変わっていないようですね。

Modelの作成

変更点でも書きましたがModelクラスがTableクラスとEntityクラスに分かれました。Tableクラスにはテーブル名との紐付けや他テーブルとのアソシエーションを記述し、Entityクラスにはバリデーションなどを記述するようです。CakePHP2系のModelが役割にしたがって分割されたイメージですね。今回は表示までの簡易チュートリアルなのでTableクラスのみ作成します。

Controllerの作成

ここで以前と大きく変わった点はTableRegistry::get();この部分でしょう。先ほど作成したPostsTableクラスのオブジェクトを取得します。次に$posts_table->find(‘all’);この部分。findメソッドでQueryオブジェクトを取得しています。CakePHP2以前を触ったことがある方なら配列が返ってくると思いがちですが、ここでQueryオブジェクトの出番です。
debugしてみると。。。
スクリーンショット 2014-03-12 20.30.11
このような形でオブジェクトが返ってくるのがわかります。
蛇足ですが以前のような配列で返すことも可能なようで、

とすると見慣れた配列形式で戻ってきます。DoctrineでいうDoctrine_Core::HYDRATE_ARRAYと似たような使い方ですかね。ただこれではせっかくのCakePHP3の良さが引き出せませんので参考程度に。。。

Viewの作成

さくっとViewも作っていきましょう。ここでも大きな変更があり、ctpファイルはTemplateディレクトリの中に作成します。

Viewを見てみると、配列を渡して処理していたCakePHP2の頃と、Queryオブジェクトを渡して処理を行う違いが実感できるかと思います。今までのような配列地獄とはおさらば。渡したオブジェクトを回し、各プロパティにアクセスすることができます。createdだけ少し違いますね。$post->createdにはDateTimeオブジェクトが入っているのでこのような形になります。

なんて時代は終わったのです。
さて、ブラウザで確認してみましょう。
cakephp3 index
このように表示されれば簡易チュートリアルは完成です。
各記事詳細ページや記事投稿ページを追加で作ってみるのも良いですね。

CakePHP3を触ってみて

いかがだったでしょうか。まだまだ未実装の部分も多く、完璧なアプリケーションを作ることはできませんが、CakePHP3の変貌ぶりを実感出来たでしょうか。私は、CakePHP2から大きく構造が変わったことにより、効率的な開発や管理のしやすさが飛躍的に上がるであろうという印象と共に、CakePHP3の今後の開発に更に興味を持ちました。
CakePHP3のロードマップ(https://github.com/cakephp/cakephp/wiki/3.0-Roadmap)に今後の展開が記されています。今回はdev-1を使用し作成しましたが、少し前にdev-2がリリースされFormHelperなどが使えるようになりました。次期バージョンdev-3ではBakeとその他コンソール関連が解禁されるようです。今回は数あるフレームワークの1つとして新しく生まれ変わるCakePHP3を体験してみましたが、様々なフレームワークに触れることによりターゲットとするアプリケーションや設計など様々なものを学ぶことができます。CakePHP3のリリースを心待ちにしつつ、色々なフレームワークを触ってみてはいかがでしょうか。