PHPカンファレンス関西2014 Yii Framework 2.0 遅れてきた5番目のフレームワーク

Post on 31-May-2015

2.761 views 0 download

description

PHPカンファレンス関西2014のLT発表、Yii Framework 2.0 遅れてきた5番目のフレームワーク です

Transcript of PHPカンファレンス関西2014 Yii Framework 2.0 遅れてきた5番目のフレームワーク

Yii Framework 2.0遅れてきた5番目のフレームワーク

たなかひさてる @tanakahisateru

Pinoco developerPHPTAL contributorFirebug translation contributorYii framework userPhpStorm user

フルスタックエンジニア(笑)

弊社開発中このサービスで使っているのが…

2.0 beta

ご存知ですか?海外ではSymfonyやCakePHPに並ぶポピュラーなフレームワーク!2.0 beta をそろそろ使い始めてもいいと公式に発表されている

Yii 1.1

• PHP 5.1.2 以上専用

• RHEL-5.10 と CentOS-5 のデフォルト = PHP 5.1.6

• 名前空間がなく、クラス名にCApplicationといったプレフィックスがあった

• CakePHP同様、Arrayを多用する面倒があった

• 遅延静的束縛がなかったため、ActiveRecordのインスタンスに find/save 系メソッドが存在した

Yii 2.0 beta

• PHP 5.4 以上

• ショートArrayシンタックスでスッキリ

• 名前空間の採用でクラス名がシンプルに

• 静的メソッドがオーバーライドできるようになって、 ActiveRecord::find()->… が可能に

• 1.1のイライラが全て解消されました

一言でいえば

RAD (Rapid Application Development) の最右翼

RADの最右翼ってどういうこと?

• ブラウザ内で動くコード生成ツール

• 十分なデバッグツールが初期インストール済み

• きわめてIDE (とくにPhpStorm) フレンドリー

• フレームワークに jQuery を統合済み

• デフォルトのウィジェットが Twitter Bootstrap 3 ベース

プロジェクト構成Rails系, PSR-4ベースPHPでいえばCakePHPに近い!ただしこれは名前空間で自由に構成可能 ↓規模の大きい開発にも十分

PHP5.4 ビルトインサーバーで試せる

いきなりここからスタート

DBからコード生成

既存ファイルがあればdiff

ソート・フィルター可能生成だけでここまでできる

Easy?

• FuelPHP / Latavel よりずっと枠組みが強い

• スクラッチで書き起こす作業は少なく、新しいことをやる場合もやり方が決まっている

• PHP on Rails 感

• ※テーブル名に複数形とか単数形とか日本人向きじゃないルールはありません

Hard?

• PHPオブジェクト指向に対して非常に誠実な設計

• コンフィグが階層的な DI コンテナ定義のよう

• コンポーネントの抽象化が適切

• フレームワークのどの部分でも独自実装に置換可能

• ただし、Symfony ほどの多クラス主義ではない

Pragmatic !

• デザインパターンや規約よりも、動くシンプルなコードを優先。余計なものは入れない主義

• MongoDB の ActiveRecord や OAuth プロバイダ対応などの拡張が、フレームワークコアと並行して開発されている

• はじめから SwiftMailer を採用

• 全部入りですぐに実用ツールが作れる

国内の ユーザーコミュニティ• Qiita にて 1.1 ベースでアドベントカレンダー2012完走

• 本家への貢献者は案外関西に多め

• 某大手サービスや関西の新進気鋭ベンチャーで1.1が採用されているらしい

• 関西PHPユーザー会で普及のきざし

• そして日本ユーザー会サイトYiiJan.org

YiiJan.org Error 503 orz

2.0 での ActiveRecord

• Eloquent ORM に似た ActiveRecord に変更された

• 結果セットはプレーンな ActiveRecord[ ] 型

• IDEフレンドリー

• いちどに結果を得る以外に…

• ページング等は別途DataProviderクラスを使用

• バッチ処理でメモリ消費が高い場合には ->each()

public function actionDailyBackup() { $today = new \DateTime(); $today->setTime(0, 0); ! /** @var Post[] $models */ $models = Post::find()->where("updated_at > :today", [ ':today' => $today->getTimestamp() ])->orderBy('id')->all(); ! foreach($models as $model) { \Yii::info("Storing " . $model->title); $this->sendToStorage($model); } }

引き継がれている長所• コンポーネント、イベント、ビヘイビア等の一貫性

• コンフィグ Array はオブジェクトのプロパティに対応

• ビューのウィジェット設定もオブジェクトのプロパティにぴったり対応

Application

config/*.php

config/*.php

ほとんどの場合、実装クラスの doc コメントがあればマニュアル不要 !

PhpStorm の F1 キー / Option + Space が便利

引き継がれている長所

• CSS / JS アセット管理をフレームワーク統合

• HTMLのGUIウィジェットを使うだけで、必要な CSS/JS が公開/リンクされる

class ActiveFormAsset extends AssetBundle { public $sourcePath = '@yii/assets'; public $js = [ 'yii.activeForm.js', ]; public $depends = [ 'yii\web\YiiAsset', ]; }

<?php $form = ActiveForm::begin(); ?> <?= $form->field($model, 'title')->textInput(['maxlength' => 255]) ?> <!-- 以下略 -->

<script src="/assets/2e597f3c/jquery.js"></script> <script src="/assets/26cbb072/yii.js"></script> !<script src="/assets/26cbb072/yii.validation.js"></script> <script src=“/assets/26cbb072/yii.activeForm.js"></script> !<script src=“/assets/a8c5b3b0/js/bootstrap.js"></script> !<script type="text/javascript">jQuery(document).ready(function () { jQuery('#w0').yiiActiveForm(...); }); </script> !</body> </html>

ビューで何かウィジェットを使うだけで

依存関係を追って、HTML に 必要な JS/CSS が勝手に挿入される

フロントエンドまで含んでフレームワーク まさにフルスタック

ありがとうございました