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

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

description

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

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

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

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

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

たなかひさてる @tanakahisateru

Pinoco developerPHPTAL contributorFirebug translation contributorYii framework userPhpStorm user

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

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

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

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

2.0 beta

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

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

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

Yii 1.1

• PHP 5.1.2 以上専用

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

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

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

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

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

Yii 2.0 beta

• PHP 5.4 以上

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

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

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

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

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

一言でいえば

RAD (Rapid Application Development) の最右翼

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

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

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

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

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

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

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

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

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

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

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

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

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

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

DBからコード生成

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

既存ファイルがあればdiff

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

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

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

Easy?

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

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

• PHP on Rails 感

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

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

Hard?

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

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

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

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

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

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

Pragmatic !

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

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

• はじめから SwiftMailer を採用

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

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

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

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

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

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

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

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

YiiJan.org Error 503 orz

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

2.0 での ActiveRecord

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

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

• IDEフレンドリー

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

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

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

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

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); } }

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

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

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

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

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

Application

config/*.php

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

config/*.php

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

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

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

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

引き継がれている長所

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

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

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

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

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

<?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 が勝手に挿入される

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

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

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

ありがとうございました