FuelPHP - フレームワーク4本勝負 @PHPカンファレンス関西2014

50
フフフフフフフ フフフ #FuelPHP @mkkn_info

description

関西FuelPHP 2014 6/28 補足: 指摘を頂いて#15 バリデーション連携のところ修正しました。ありがとうございます!!

Transcript of FuelPHP - フレームワーク4本勝負 @PHPカンファレンス関西2014

Page 1: FuelPHP - フレームワーク4本勝負 @PHPカンファレンス関西2014

フレームワーク4本勝負

#FuelPHP@mkkn_info

Page 2: FuelPHP - フレームワーク4本勝負 @PHPカンファレンス関西2014

about me

みかかね

TW @mkkn_info

PHPer @ Osaka

マネキンと二人暮らし

Page 3: FuelPHP - フレームワーク4本勝負 @PHPカンファレンス関西2014
Page 4: FuelPHP - フレームワーク4本勝負 @PHPカンファレンス関西2014

about me

みかかね

TW @mkkn_info

PHPer @ Osaka

マネキンと二人暮らし

Page 5: FuelPHP - フレームワーク4本勝負 @PHPカンファレンス関西2014

Fuel = “ 燃料”

Page 6: FuelPHP - フレームワーク4本勝負 @PHPカンファレンス関西2014

CodeIgniter

FuelPHP

Page 7: FuelPHP - フレームワーク4本勝負 @PHPカンファレンス関西2014

FuelPHP

CodeIgniter の流れを組みながら、上手いこといい感じにしたフレームワーク。

PHP 5.3 以上対応 : July 31st, 2011 release名前空間を用いたオートロードシステムクロージャのサポート静的遅延束縛のサポートによる静的クラスの多用脱レガシー。新しい PHP の書き方

最新バージョンは 1.7 。必要な機能はひと通り整ってきたかなぁ?という印象

Page 8: FuelPHP - フレームワーク4本勝負 @PHPカンファレンス関西2014

Fuel = “PHP Framework”

Page 9: FuelPHP - フレームワーク4本勝負 @PHPカンファレンス関西2014

FuelPHPhttp://fuelphp.com/

Page 10: FuelPHP - フレームワーク4本勝負 @PHPカンファレンス関西2014

Controller

基本的な controller/action/param の URL 構成

action メソド内で return した文字列を出力

基本的な二階層レイアウトシステムをサポートするController_Template

配列をセットするだけで、柔軟に xm や json などの応答を生成してくれる Controller_Rest

Page 11: FuelPHP - フレームワーク4本勝負 @PHPカンファレンス関西2014

Routing

Route ファイルでルートを記述できる。

Controller に縛られない自由なルーティング

<?php //@config/routes.phpreturn [ “hello => function() { return “hello world”; },

“blog/(:any)” => ”blog/entry/$1”,

“:user/:package/profile“ => “api/profile”,];

Controller ルーティングへのエイリアス。正規表現、後方参照も使える

ルート URL から名前付きパラメータを生成できる。

Page 12: FuelPHP - フレームワーク4本勝負 @PHPカンファレンス関西2014

View

基本のパーサはテンプレートを読み込んで変数を割り当てるだけのシンプルなもの

変数割り当て時の自動エスケープデフォルトの PHP パーサでも十分使えるレベルに

オプションで様々なタイプのパーサに対応twig やら smarty やら

URL 生成クラス、 Asset 管理クラス、 HTML クラス、Fieldset クラスなどサポートも充実

Page 13: FuelPHP - フレームワーク4本勝負 @PHPカンファレンス関西2014

Database

クエリビルダを扱う DB クラス

単一テーブルベースの CRUD 処理を扱う Model_Crud

リレーションを扱える ORM パッケージ

DB やテーブルの生成などを扱う DBUtil クラス

マイグレーションも一応ある

Page 14: FuelPHP - フレームワーク4本勝負 @PHPカンファレンス関西2014

Database

名前付きパラメータが使えたり、結果の型が指定できたり。<?php

$sql = <<<SQL SELECT * FROM users WHERE name = :nameSQL;

$query = DB::query($sql)->bind("name",$name);$query = $query->as_object('Model_Users');$res = $query->execute();

名前付きパラメータもう大量の ? の個数数えたりしなくていい。

変数を参照で割り当てられる。

結果の型は、連想配列、オブジェクトから選択できる。

Page 15: FuelPHP - フレームワーク4本勝負 @PHPカンファレンス関西2014

Database

お手軽なエンティティ作成には Model_Crud

class Users extends \Model_Crud{ static protected $_table_name = "users";}

$user = Users::find_by_pk();

$user = Users::find_one_by_name(“mikakane”);$user->email = “[email protected]”;if(!$user->save()){ $validation = $user->validation(); $msg = $validation->show_errors();

規約どおりならテーブル名のみの設定で OK

PK 検索や列検索、には専用のメソドが用意される。WHERE … IN やLIMIT,ORDER BY といった複雑な検索も対応

save で UPDATE/INSERT される。

バリデーション連携も

Page 16: FuelPHP - フレームワーク4本勝負 @PHPカンファレンス関西2014

CLI

Scaffolding 機能

CLI 実行用の Taskファイルを設置するだけで CLI 実行ファイルが作成可能CLI 実行処理をサポートする CLI クラスモデルクラスを HTTP と CLI で共用可能。ちょっとしたモデルのテストにも便利

PHPUnit のテストランナー

Page 17: FuelPHP - フレームワーク4本勝負 @PHPカンファレンス関西2014

今回話したいこと

Page 18: FuelPHP - フレームワーク4本勝負 @PHPカンファレンス関西2014

Why FuelPHP ?

Page 19: FuelPHP - フレームワーク4本勝負 @PHPカンファレンス関西2014

FuelPHPhttp://fuelphp.com/

Page 20: FuelPHP - フレームワーク4本勝負 @PHPカンファレンス関西2014

Simple

Flexsible

Community Driven

Page 21: FuelPHP - フレームワーク4本勝負 @PHPカンファレンス関西2014

Fuel = “flexible”

Page 22: FuelPHP - フレームワーク4本勝負 @PHPカンファレンス関西2014

規約より設定アンチ「設定より規約」 フレームワークが規約やお作法を強制しない。

フレームワークに縛られない自由な開発スタイルロジックや、インフラ側がフレームワークに合わせる必要はない。

必要に応じて必要な分だけの機能を使えばいい必要に応じて必要な分だけ学べばいい学習コスト低め。

独自のオートロードシステムで、ほとんどのコア機能は書き換え可能

Page 23: FuelPHP - フレームワーク4本勝負 @PHPカンファレンス関西2014

独自 Autoloader

Composer オートローダ

Composer のオートローダ

FuelPHP オートローダファイルパス = 完全修飾クラス名の基本的な構造

クラスマップ + コア名前空間特殊なエイリアス領域

フレームワーク独自の Autoloader を採用

Page 24: FuelPHP - フレームワーク4本勝負 @PHPカンファレンス関西2014

独自 Autoloader

クラスエイリアスによる間接的なクラス参照何を View クラスとして扱うかをオートローダが制御する。コアの機能だけでなく、独自定義クラスでも OK

View クラス \Fuel\Core\View クラス

コアのクラスは全て\Fuel\Core 名前空間に

定義されている。

Page 25: FuelPHP - フレームワーク4本勝負 @PHPカンファレンス関西2014

独自 Autoloader

クラスエイリアスによる間接的なクラス参照何を View クラスとして扱うかをオートローダが制御する。コアの機能だけでなく、独自定義クラスでも OK

View クラス \Fuel\Core\View クラス

View クラスの参照を切り替えれる。

\View クラス

エイリアス

Page 26: FuelPHP - フレームワーク4本勝負 @PHPカンファレンス関西2014

独自 Autoloader

クラスエイリアスによる間接的なクラス参照何を View クラスとして扱うかをオートローダが制御する。コアの機能だけでなく、独自定義クラスでも OK

View クラス \Fuel\Core\View クラス

切り替え後でもコアのView クラスは完全修

飾名で参照可能。

\View クラス

継承エイリアス

Page 27: FuelPHP - フレームワーク4本勝負 @PHPカンファレンス関西2014

独自 Autoloader

View クラスをカスタマイズする例

# app/classes/view.phpclass View extends \Fuel\Core\View { protected function process_file($file_override=false) { $data = parent::process_file($file_override); return mb_convert_encoding($data,”UTF8”); }}

# app/bootstrap.phpAutoloader::add_classes([ "View" => APPPATH."classes/view.php",]);

コアのクラスは \Fuel\Core 名前空間に定義されている。

必要な部分だけを拡張して記述できる。

クラスマップに登録したら使用準備完了

Page 28: FuelPHP - フレームワーク4本勝負 @PHPカンファレンス関西2014

独自 Autoloader

自作クラスも同様に \Projectname\Hoge のような形式で定義しながら、 Hoge クラスとして参照可能。

もちろん後から Hoge クラスを作成して拡張可能

気に入らないコア / プラグインの機能はガンガン書き換えられる。

heroku向けに Log クラスを書き換え独自パーサ機能の実装のために View クラスを書き換え独自 Validation 機能の実装のために Validation クラスを書き換えテストの時だけ Model の機能を変更

Page 29: FuelPHP - フレームワーク4本勝負 @PHPカンファレンス関西2014

Fuel = “simple”

Page 30: FuelPHP - フレームワーク4本勝負 @PHPカンファレンス関西2014

Readable

PHP5.3 以上。互換性のための面倒なコードが存在しない。

機能入れ替え系の機能はオートローダ任せ。複雑な DI コンテナのコールは存在しない。

継続的開発の中でも Simple さを持続する仕組みアプリケーションのモジュール分割

Page 31: FuelPHP - フレームワーク4本勝負 @PHPカンファレンス関西2014

分離 / 再利用の仕組み

継続開発におけるコードの依存関係管理は重大な問題

MVC のまとまりを一つのディレクトリ以下にまとめて、分離したり共有したりできる。

Module

分割の仕組み。アプリケーションを機能毎に分割。

特定の URL アクセス時に自動的に読み込まれる

Package

共有の仕組み。アプリケーション全体に再利用可能なコードを適用

明示的な参照命令を記述して読み込み

Page 32: FuelPHP - フレームワーク4本勝負 @PHPカンファレンス関西2014

分離 / 再利用の仕組み

URL をベースに自動的に読み込まれる Module

URL と紐づく依存構成で、アプリケーションの分離層を支える。

MODULE

MODULE

MODULE

APPLICATION

PACKAGES

CORE

上から下への参照は比較的自由

下から上への参照は制約あり

Page 33: FuelPHP - フレームワーク4本勝負 @PHPカンファレンス関西2014

分離 / 再利用の仕組み

PHP ファイル、設定ファイル、言語ファイル、CLI タスクファイルをそれぞれのレイヤーで機能毎にまとめて配置可能。

MODULE

MODULE

MODULE

APPLICATION

PACKAGES

CORE

MVC+α

MVC+α

MVC+α

Page 34: FuelPHP - フレームワーク4本勝負 @PHPカンファレンス関西2014

分離 / 再利用の仕組み

リクエストに応じたモジュールの自動読み込み

Blog

APPLICATION

PACKAGES

CORE

http://example.com/blog

Page 35: FuelPHP - フレームワーク4本勝負 @PHPカンファレンス関西2014

分離 / 再利用の仕組み

リクエストに応じたモジュールの自動読み込み

User

APPLICATION

PACKAGES

CORE

http://example.com/user

Page 36: FuelPHP - フレームワーク4本勝負 @PHPカンファレンス関西2014

分離 / 再利用の仕組み

リクエストに応じたモジュールの自動読み込み

Info

APPLICATION

PACKAGES

CORE

http://example.com/info

Page 37: FuelPHP - フレームワーク4本勝負 @PHPカンファレンス関西2014

分離 /再利用の仕組み

柔軟なオートローダクラス参照のスコープがリクエスト URL に応じて「動的に」切り替わる。

カスケードファイルシステムファイル参照が複数箇所から階層的に行われる。テンプレート、設定ファイル

HMVC アーキテクチャMVC のそれぞれを独立した要素として再利用可能。

Page 38: FuelPHP - フレームワーク4本勝負 @PHPカンファレンス関西2014

分離 / 再利用の仕組み

複数アプリケーション間で共有可能なパッケージ

アプリケーション起動にフックする bootstrap ファイルを含むことが可能で Core の機能まで上書き可能。

MODULE

MODULE

MODULE

APPLICATION

PACKAGES

CORE

MODULE

MODULE

MODULE

APPLICATION

独自 FW 層

Page 39: FuelPHP - フレームワーク4本勝負 @PHPカンファレンス関西2014

クラスは Classes ディレクトリに、テンプレートは Views ディレクトリに。

classes ディレクトリやviews ディレクトリに機能毎のディレクトリが出来上がっていく。

Page 40: FuelPHP - フレームワーク4本勝負 @PHPカンファレンス関西2014

Module ディレクトリに機能毎のディレクトリを切って、その中にクラスファイルやテンプレートをまとめる。

一つの機能の実装 /改修を進めるのに、必要なファイルが全て一つの場所にまとまっている !!

Page 41: FuelPHP - フレームワーク4本勝負 @PHPカンファレンス関西2014

Fuel = “Community Driven”

Page 42: FuelPHP - フレームワーク4本勝負 @PHPカンファレンス関西2014

コミュニティ駆動

コミュニティ駆動のオープンソースフレームワーク (MITライセンス ) 。

日本人のユーザコミュニティ

https://groups.google.com/forum/#!forum/fuelphp_jp

ドキュメントの翻訳活動も活発ドキュメントは github で公開されており、定期的に翻訳ウィークが開催されています。

Page 43: FuelPHP - フレームワーク4本勝負 @PHPカンファレンス関西2014

日本語ドキュメントhttp://fuelphp.jp

Page 44: FuelPHP - フレームワーク4本勝負 @PHPカンファレンス関西2014

FuelPHP まとめ Wikihttp://wiki.fuelphp1st.com/wiki/

Page 45: FuelPHP - フレームワーク4本勝負 @PHPカンファレンス関西2014

FuelPHP日本語ニュースhttps://www.facebook.com/jp.fuel

Page 46: FuelPHP - フレームワーク4本勝負 @PHPカンファレンス関西2014

Meet-up in 2013 2013/12/07 [東京 ] FuelPHP & CodeIgniter ユーザの集い #22013/10/26 FuelPHP 勉強会 東海 vol.52013/10/12 [東京 ] FuelPHP & CodeIgniter ユーザの集い #12013/09/14 fuelphp コーディングしながらの勉強会2013/07/30 FuelPHP 勉強会 大阪 vol.4 2013/07/20 [ 名古屋 ] FuelPHP入門ハンズオン vol.22013/06/30 FuelPHP 勉強会 東京 vol.42013/06/22 OSC2013 Nagoya 「 FuelPHP BoF 」2013/05/11 FuelPHP 勉強会 東海 vol.4 2013/04/13 [ 名古屋 ] FuelPHP入門ハンズオン vol.12013/03/23 FuelPHP 勉強会 東京 vol.32013/02/17 FuelPHP 勉強会 大須 vol.32013/01/19 Nagoya.php 新年会 2013

FuelPHP Wiki より FuelPHP メインっぽいイベントを抜粋

Page 47: FuelPHP - フレームワーク4本勝負 @PHPカンファレンス関西2014

電子書籍の紹介

はじめてのフレームワークとしてのFuelPHP第 2版 (2)

環境構築編 / 入門編 / 実践編達人出版会より

プレゼントキャンペーン実施中詳しくは http://fuelphp1st.com/present/2nd

Page 48: FuelPHP - フレームワーク4本勝負 @PHPカンファレンス関西2014

Fuel = “Growing”

Page 49: FuelPHP - フレームワーク4本勝負 @PHPカンファレンス関西2014

Fuel2.0

2.0 プロジェクトが 1.x系の更新と平行して進行中

PHP5.4 +

Composer ベース

コア機能の分割

諸コンポーネントの刷新

Page 50: FuelPHP - フレームワーク4本勝負 @PHPカンファレンス関西2014

ご清聴 ありがとうございました。