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

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

May 31, 2015

Download

Technology

Hisateru Tanaka

PHPカンファレンス関西2014のLT発表、Yii Framework 2.0 遅れてきた5番目のフレームワーク です
Welcome message from author
This document is posted to help you gain knowledge. Please leave a comment to let me know what you think about it! Share it to your friends and learn new things together.
Transcript
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番目のフレームワーク

ありがとうございました