元記事はこちら。
by lorenzo
最初のベータリリースから約1ヶ月経ち、コミュニティの皆さんがこの新バージョンを大歓迎してくれていることを嬉しく思います。積極的なフィードバックやヘルプはコアチームの3.0によるデベロッパ体験を改善するための精力的な作業の大きな動機付けになっています。今回が3.0の最後のベータリリースになる予定です。これはAPIが安定し、現行の機能の完成度の向上、パフォーマンスの最適化、ドキュメント整備、Githubに寄せられている障害を早期解決する段階にきていることを意味します。この1ヶ月、ロードマップ中の未実装の機能を実装し、CakePHPの人気のあるプラグインをアップグレードする作業に大変忙しい時期でした。
以下は3.0.0ベータ2における新機能や変更点の概要です:
DebugKit
CakePHP 3.0のアプリケーションのデバッグはよりよいものになります。新しいDebugKitはインストールが簡単で、速度が向上し、外見も豪華になりました。
DebugKitはあなたが書いたコードの種々の統計情報、たとえば呼び出し時間やメモリ、実行されたクエリ、ログメッセージやビュー変数などを取得してくれるアプリケーションツールバーです。DebugKitをインストールするには、
composer require cakephp/debug_kit "3.0.*-dev"
を使用し、bootstrap.phpに
Plugin::load('DebugKit', ['bootstrap' => true]);
を追加します。
app skeletonを使用して新しいアプリケーションをインストールしたのであれば、DebugKitは自動的にインストールされます。
データベースのマイグレーション
マイグレーションはCakePHPの公式プラグインとなりました。PhinxというすばらしいライブラリをCakePHPシェルにラップしたもので、設定文字列を繰り返すのを避けCake体験を向上させてくれます。このプラグインが生成するデータベースのマイグレーションは以下のようなものです:
<?php use Phinx\Migration\AbstractMigration; class CreateUsersTable extends AbstractMigration { /** * Change. */ public function change() { // create the table $table = $this->table('users'); $table->addColumn('id', 'integer') ->addColumn('username', 'string') ->addColumn('password', 'string') ->addColumn('created', 'datetime') ->create(); }
マイグレーションは逆に実行することもできます。同じコードでデータベーススキーマに加えた変更を作成/ロールバックできるということです。
マイグレーションプラグインをインストールするには、以下を実行します:
composer require cakephp/migrations "dev-master"
さらにbootstrap.phpに以下の行を追加します:
Plugin::load('Migrations');
新しい Logger インターフェース
CakePHP はロガーに PSR-3 勧告を採用しました。すべてのログエンジンは Prs\Log\LoggerInterfaceinterface に実装されています。たとえば、Monolog ライブラリのような人気のあるものにログシステム全体を他の実装に置き換えることが可能であることを意味します。
テストの統合とデータの整合性
コントローラのテストはいつでも問題が多いものです。ControllerTestCaseがある程度解決できるとしても、このクラス自体が問題の原因であり利用者の混乱を招いていると考えられます。たくさんのモックがなくてもアプリケーション内のすべてのHTTPリクエストをテストできるように、新しいIntegrationTestCaseクラスを実装することにしました。これによりコードの品質を改善し、アプリケーションやルーティングが期待通り動いていることを確認することの助けになるでしょう。
さらにフィクスチャシステムを改良し、開発者がデータベース内の外部キー制約を定義しまた連携できるようにしました。フィクスチャシステムはすべてのデータ呼び出しや制約の有効化をテストコード実行前に正しく行うようになりました。
新しい Bake テンプレート
安定版のリリース日が近づくにつれ、bakeしたアプリケーションのデフォルトの見た目を新しいものにしようと考えました。新しい外観はフレッシュで、モダンで、連携が容易です。
訳者注:こんな感じのようです。
パッケージの分離
新しいORMをフレームワーク外で使用したい・古いCakePHPアプリケーションでも使用したいというニーズがあります。これができるように当初から目標を持っていました。フレームワークを独立したコンポーネントに切り分けて再利用したりcomposerを使ってインストールしたりできるようこの作業に着手しています。今のところORMはリポジトリから抽出できませんが、ほかの重要なものについては完了しています。プロダクトとして、メインのコードベースから幾つものコンポーネントに抽出・分離します。
- Collections: 配列やTraversableオブジェクトを操作する有効でエレガントな手段を提供します。
- Validation:素晴らしい柔軟なバリデーションライブラリをどんなプロジェクトにも使用できます!
- Utility: Hash、Inflector、String、Xmlクラスを提供します
- Event: シグナルスロット(またはオブザーバーパターン)の実装
- Core: CakePHPコア。Configurationやプラグイン管理クラスが含まれる
重要な点として、これらのリポジトリは読み出しのみで、メインのCakePHPリポジトリと同時に開発中であり、分割にともなって同期されます。チケットやプルリクエストがあれば、直接メインの github リポジトリで行ってください。
ORM 関連の改善
- Query::autoFields() の追加。主テーブルのフィールドにかかわらず自動的に選択される
- finderOptions キーを使用して、Paginatorのカスタムファインダオプションを指定し、ファインダオプションを渡すことができるようになった
- Schema\Table::defaultValue() を使用して、データベースからデフォルトカラム値を取得できるようになった
- newEntity() と patchEntity() のオプションキーとして accessibleFields を追加した。大量アサイン時のより細かい制御が可能になる
- TranslateBehavior が現在のアプリケーションのロケールから自動で翻訳(データ)を探すようになった。
- Table::findOrCreate() の追加
- contain() を使用して、アソシエーションのjoinタイプを上書きできるようになった
プラグイン内のシェル
プラグイン内のシェルがプラグイン名のプリフィックスなしで呼び出せるようになりました。たとえば do_stuff シェルが Toolsplugin にあるとすると、以下のように実行できます:
bin/cake do_stuff
その他の改善
- アップロードファイルのバリデーションルールの追加
- String::uuid() の生成が3倍早くなった
- 重大なエラー時の例外レポートが改善された
- Inflector がパフォーマンス改善のために最適化された
- Hashクラスをいろいろ最適化
- Collection::buffered() 巻き戻せるイテレータを巻き戻し不可に変更するメソッドを追加
コミュニティプラグイン
バージョン3.0用のプラグインは人気があります。以下はわたしたちが興味深いと思った点です:
- TwigView Twig をデフォルトテンプレートエンジンにするもの
- Imagine 画像操作プラグイン
- Geo ジオデータと協働するユーティリティライブラリやビヘイビアが含まれている
- Blame データベースの行を変更したユーザIDを記録する
- CakePdf 異なるエンジンを使ってPDFファイルを生成する
- Authenticate 権限と認証のアダプタ
- TinyAuth 軽量認証システム
- TwitterBootstrap Bootstrapインターフェイスを生成するプラグイン
- Whoops デフォルトの例外表示をいい感じのデバッグインターフェースにする
- Assetic CSSとJavascriptの最小化・プリプロセス。
このフレームワークにアイデアやコード、ドキュメント、フィードバックを与えてくれる皆さんに改めて感謝します。
リリースのダウンロード
パッケージリリースは以下よりダウンロードできます:
https://github.com/cakephp/cakephp/releases/download/3.0.0-beta2/cakephp-3-0-0-beta2.zip
「CakePHP 3.0.0 ベータ2がリリースされました」への3件のフィードバック