2009年のPHPフレームワーク
-
Upload
takuya-sato -
Category
Technology
-
view
2.929 -
download
5
description
Transcript of 2009年のPHPフレームワーク
2009年の PHPフレームワーク株式会社 RYUS佐藤琢哉
※注意事項•フレームワークわかったよね!•さわださんのプレゼンで理解したという前提の内容です
•詰め込んでしまったので説明が薄かったらごめんなさい
•フレームワーク自作の話は出てきません
アジェンダ•自己紹介•フレームワーク紹介•フレームワークで注目すべき点•フレームワーク比較•比較まとめ•これからのフレームワーク
自己紹介•佐藤琢哉•nazo•株式会社 RYUS所属
▫上京して就職したいという方は是非弊社へ
自己紹介•北海道旭川市出身
▫明日が兄の結婚式なので来たのがきっかけ▫18歳で上京▫ゲーム→Web
自己紹介•rhaco-ja•himote.jp•http://d.hatena.ne.jp/nazone/•実は代表的な制作物がない•実はまともな勉強会で喋るのは初めて
自己紹介•フレームワーク利用履歴
▫Ruby On Rails▫CakePHP▫symfony▫rhaco▫Ethna
■彼氏が素の PHPでコード書いてた。別れたい…素の PHP だとコードレビューの時なんか恥ずかしいww下向いちゃうしww男にはせめてフレームワーク使って欲しい・・・mysql_query 直書きとかされたら・・・・もう最悪wwせめて普通に CakePHP や symfony ぐらいは使って欲しい。常識的に考えて欲しいだけなんです!素の PHP のコードを見せられた時の恥ずかしさとか分かる?あのね?たとえば週末 10??20 人ぐらいで勉強会とか行くでしょ?それぞれ自分の使ってるフレームワークネタとか出すわけじゃな
い?みんな普通に CakePHP や symfony や ZendFramework や Ethna
を使ってるわけでしょ?素の PHP でノコノコついてったら大恥かくでしょうがww
フレームワーク紹介の前に•PHPのフレームワーク多すぎじゃね?
EthnasymfonyCakePHP
ZendFrameworkMaple
CodeIgniterPiece Framework
rhacoAgaviSabelAkelos
MagicWeaponZoop Framework
ちいたんMoonyPRADO
Seasar.PHPP4A
PHP on TRAXMojaviHorde
HarmoniSimframe
guesswork classicPhrameSeagull
BlueShoesWACT
PhilotPetitwork
KAHOeZComponentsAmbivalence
ATKStudsTonic
W3matterEnormeYii
etc...
多すぎ•さらに同じフレームワークでもバージョンによって全然違ったりする▫CakePHPとか▫symfonyとか▫Mapleとか
とりあえず絞る•Ethna•symfony•CakePHP•ZendFramework•Maple•CodeIgniter•Piece Framework•rhaco•Sabel•Yii Framework
PHPのフレームワーク多すぎじゃね?
•なんでこんなに多いの?▫作りやすい▫動かしやすい▫自分の好みに合わせたい
作りやすい•標準機能が豊富
▫DB接続▫日本語変換(mbstring)
•自身がテンプレートエンジン(あるいはSmarty)
動かしやすい•書けばすぐ動く
▫mod_php▫他言語だとWSGIとか Rackとか
•どのレンタルサーバーでも大体動く
自分の好みに合わせたい•ユーザーが多い•好みも多様化
フレームワークで注目すべき点•Rails以前 /以後•MVC•フルスタックかどうか•ライフサイクル•その他機能
よく聞く意見「フレームワーク使いたいんだけどどれがいいの?」「 Cake か symfony じゃね?」←ぺちぱー「うちで○○使ってるけどそれなりに使えたよー」←よく訓練されたぺちぱー
./ ; ヽ l _ ,,,,,,,, _ ,;;;;i l l''|~___;; 、 _y__ l ミ ;l ゙ l;| | `'",;_,i`'"|;i | ,r''i ヽ , '~r ー j`c=/ , / ヽ ヽ ` ー "/:: ` ヽ / ヽ  ̄ ゙ 、 ::::: ゙ l, ホント ぺちぱーは地獄だぜ! フゥハハハーハァー |;/"⌒ ヽ , \ ヽ : _l _ ri
ri l l ヽ r‐─ ヽ_ |_⊂////;` ゞ --―─-r| | / | ゙ l ゙ l, l,| `゙゙゙ ''―ll _ __l,,l,|,i 二二二二│`ノ """"""""""""| 二 ;; 二二 ;; 二二二
i≡ 二三三 l | ヽ ヽ _| _ _ "l  ̄ ̄ ̄ ̄ ̄ ̄ | 二 ;; 二二 ;; 二
='''''''''''  ̄ ノ /" ヽ 'j _/ヽヽ ,  ̄ ,,,/"''''''''''''⊃r‐l' 二二二 T  ̄ ̄ ̄ [ i ゙ ''''''''''''''''"  ゙゙゙̄
`" / ヽ ー── ''''''""(;;) `゙ ,j" | | |
Rails以前•strutsもどき
▫今みたいな便利機能は少ない▫Smartyが大人気▫O/Rマッパーがあまり知られてなかった
Railsで出てきた機能•scaffoldの有無
▫「 10分でブログを作る!」のあれ▫実際は役に立たないことのほうが多い▫管理画面を作るのに使えるかも程度▫カスタマイズしやすい作りになっているのもある
Railsで出てきた機能•DRY(Don't repeat yourself)
▫同じコードを2度書かない▫やりかたは様々▫そもそも PHPだと限界が…▫基本ライブラリの充実でカバー
Railsで出てきた機能•テスト環境が用意されてる
▫TDD(test-driven development)ができる▫詳しくはこの後の kunitさんのお話で!
Railsで出てきた機能•O/Rマッパー
▫データベースと接続するあれ▫ActiveRecordパターンが多い▫Rails以前は (PHP界では )O/Rマッパー何それな空気だった(かもしれない) 無かったわけではないと思う
何だかんだで Railsはすごい•「 Rails世代フレームワーク」という名称•CakePHPは Railsとほぼ同じ構成•他のフレームワークでもどこかしら影響を受けている
んじゃ Railsのほうがいいんじゃね?
•PHPならではのメリットもある▫環境が作りやすい▫馴染みのある言語▫PHPで使いやすいようにアレンジ
•後発の強み
MVC
•きっと説明済だと思うので省略
そもそもフレームワークとは•Webサイトを作りやすくするための仕組み
▫広義では CGIもフレームワーク▫Apache(コントローラー)→スクリプト(ロジック)
MVC
•MVCパターン▫Model(ロジック)▫View(テンプレート)▫Controller(M-Vの中継)
MVC
•MVC以外のフレームワークもある▫正直説明できないので省略▫Java界隈に多いかも?
MVC
•MVCだと何がいいの?▫Model(ロジック)と View(テンプレート)の分離
▫きっとこの前の人が喋ってくれてるはず
フルスタック•全部入り•PHPは PEARがしょぼいせいかフルスタックが多い▫openpearに期待
•Perlは CPANが元気なのでフルスタックじゃないフレームワークが強い
ライフサイクル•ちゃんとメンテされてる?•コミュニティは活発?•突然極端な変更されたりしない?
▫no trunk no (略
その他•ステートレス /ステートフル
▫多分 PHPでは Pieceだけ(あと Sabelがちょこっと)
▫ステートフル=入力データが複数画面に渡って継続して保持される
▫Javaでは人気?▫http://www.slideshare.net/yoshiori/ss-
268210/
その他•DI/AOP
▫DI(依存性注入)▫AOP(アスペクト指向プログラミング)▫既にある機能を直接変更せずにあれこれする▫主に Javaで流行っている▫LLではそもそもクラスの書き換えが簡単なため( PHPはそれほど楽ではないが)、そこまで必要とされない
その他•対応DB
▫MySQLはほとんどので対応されてる▫次点は PostgreSQL/SQLite▫Oracleとか使う人もたまにいる
フレームワークで注目すべき点•これらを踏まえて、各フレームワークが具体的にどういう実装になっているか見ていきましょう
~国内知名度No.1(Google Trends調べ)~
CakePHP
•最近国内でカンファレンスまでやった▫海外から開発者が!
•盛り上がりは間違いなくNo.1
CakePHP
•「 Railsを PHPで」•Railsを PHPに移植しようと思ったけど PHP4の機能じゃとても作れないので PHPになじむようにアレンジしたフレームワーク
•いろんなところで Railsに似ている▫MVC、 ActiveRecord
•「 Cakeのやり方に合わせるとものすごく簡単に書ける」
CakePHPフォルダ構造
CakePHP – Modelclass Article extends AppModel{ var $name = 'Article'; var $useTable = 'article'; var $hasAndBelongsToMany = array( 'Category' => array( 'className' => 'Category', 'joinTable' => 'category_list', 'conditions' => "", 'order' => '', 'dependent' => true, 'foreignKey' => 'article_id', 'associationForeignKey' => 'category_id', 'unique' => false, 'limit' => null, ) ); }
※ http://project-p.jp/halt/anubis/blog_show/999
CakePHP
•コミュニティが活発なので誰かが教えてくれる•1.2がまだリリースされてないけど、今から覚えるなら 1.2
•書き方を縛られるのは嫌な人はちょっと?
~洗練されたフルスタックフレームワーク~
symfony
•CakePHPと並ぶ知名度•元はMojaviからの派生プロジェクト•実務利用で作ったフレームワークをオープンソース化
•日本でも Cake、 Ethnaに並ぶ利用率
symfony
•PHP5専用•Mojaviライクな filterシステム•Propelとの強力な連携•無駄に多いプラグイン•何でも YAML•フォルダ構造が深い•キャッシュをうまく使わないと遅め
symfonyフォルダ構成
symfony – YAMLでテーブル定義propel: table1:
table2: code: varchar(255) _foreign_keys: fk_1: foreign_table: table1 references: - foreign: id local: code on_delete: cascade on_update: set null
※ http://blog.symfony.jp/2006/12/18/schema-yml/
symfony
•1.2がリリースされたので 1.2を覚えておくといいかも?
•フォルダ構造が複雑なため、シェルで全部書く人にはちょっと辛いかも
•規模の大きい開発をする人は検討したほうがいい
~国産といえばこれ~
Ethna
•GREEの藤本さんが中心になって開発(最近はあまり関わってない?)
•GREEは Ethnaで動いているという実績•フルスタックではない•国内にコミッタ多数
Ethna
•Strutsっぽい•やや Rails前世代•強力な ActionForm•DB周りは貧弱•Smartyを使うこと前提
Ethnaフォルダ構成
Ethna – フォーム定義class Flare_Form_IndexTest extends Ethna_ActionForm {
var $form = array( 'mailaddress' => array( 'name' => 'メールアドレス ', 'required' => true, 'max' => 255, 'filter' => FILTER_HW, 'custom' => 'checkMailaddress', 'form_type' => FORM_TYPE_TEXT, 'type' => VAR_TYPE_STRING, ),...
※http://labs.gree.jp/Top/Document/20060707.html
Ethna
•O/Rマッパーは無いようなものなので(あるけど)、自分である程度カスタマイズできる人向け
•国内実績が多いので業務では使いやすいかもしれない
•国内利用者が多いので参考資料は見つけやすい
~あの Zendが作った!~
Zend Framework•あの Zendが作った!
▫という安心感?•標準機能が豊富すぎる
▫豊富すぎて一部分だけ切り出して使う方法がメジャーに
▫Symfonyは ZFのプラグインをそのまま使える機構が用意されている
•1.0リリースまでに時間がかかったため出遅れた感が強い▫最近は事例も増えてきた(公式で見れます)
Zend Framework
•そのままだと何もない•MVC部分は結構すっきりしてる•大量のクラス群
▫独自の世界を構築▫Twitter操作ライブラリとか OOoドキュメント操作ライブラリまである
▫Full Packageだと tgzで 21MB!•細かいコーディング規約
Zend Framework - Controller<?phprequire_once 'Zend/Controller/Action.php';require_once 'Zend/Date.php'; //Zend_Dateコンポーネントの呼び出し
class WingsController extends Zend_Controller_Action
{ public function codezineAction() { $date=new Zend_Date; // (1) $this->view->assign('dt', $date->get(Zend_Date::TIMES)); // (2)
}}
※ http://codezine.jp/article/detail/2162?p=1
Zend Framework
•symfony同様、 PHP5で大規模開発したい人にはお勧め
•ライブラリだけ使うことも検討
~高速フレームワーク~
CodeIgniter
•超高速▫フレームワークのベンチマークを取ると絶対1位になるフレームワーク
▫Cakeの倍くらいの速度?•構造自体は Cakeに似た感じ
CodeIgniterフォルダ構造
CodeIgniter
•それなりに Rails系MVC•テンプレートエンジンは素の PHP•それなりの機能のO/Rマッパー•複雑な機能をできるだけ持たないことで高速化•低機能というわけでもない
CodeIgniter - Controller<?php
class Welcome extends Controller {
function Welcome(){
parent::Controller();}
function index(){
$this->load->view('welcome_message');}
}
※CodeIgniter1.7.0付属のwelcome.phpより
CodeIgniter
•そこそこの機能さえあれば開発できる人ならお勧め
•速度を気にする人は検討してみるといいかも
~国産の有力候補~
Maple
•kunitさん(この後登場!)作成のフレームワーク
•NetCommons2.0はMaple3ベースで作られている
•現在Maple4が制作中
Maple
•詳しくは kunitさんに聞こう!(この後話が聞けると思います)▫丸投げとも言う
~ステートフルフレームワーク~
Piece Framework
•PHP唯一?のステートフルを前面に打ち出したフレームワーク
•国産•Eclipse用 IDEも用意
▫ステート作成とかが簡単に
Piece_IDE
Piece Framework
•各コンポーネントが分離されている▫Piece_Unity▫Piece_ORM▫Piece_Right▫Piece_Flow▫etc…
•ステートフルなので根本的に違う▫フローを YAMLで書いて中身を実装
Piece Framework – フロー定義firstState: DisplayNew
lastState: name: DisplayNewFinish view: http://example.org/list.php
viewState:
- name: DisplayNew view: New transition: - event: DisplayNewConfirmFromDisplayNew nextState: DisplayNewConfirm
- name: DisplayNewConfirm view: NewConfirm transition: - event: DisplayNewFinishFromDisplayNewConfirm nextState: DisplayNewFinish - event: DisplayNewFromDisplayNewConfirm nextState: DisplayNew
※ http://gihyo.jp/dev/serial/01/piece/0005
Piece Framework
•新しいもの好きならお勧め•アンケート系のような、入力が多数の画面に渡るようなものでは強いかも
~ hentai++~
rhaco
•国産•フレームワークと言われると?•Web画面からいろいろ設定ができる•1系はもう頻繁な更新はない( no trunk no
rhacoではない)
rhacoのWebセットアップ画面
rhaco
•コントローラーとかはあるけど使わなくてもいい(エントリーポイントとか用意されてない)
•継承ができるテンプレートエンジン•複雑なクエリも投げれるO/Rマッパー•強力なHTML/XMLパーサ•DocTest
rhaco - DocTestfunction is($varible,$base=true){/*** * $bool = true; * eq(true,Variable::is($bool,true)); * eq(false,Variable::is($bool,false)); * * $bool = false; * eq(false,Variable::is($bool,true)); * eq(false,Variable::is($bool,false)); * */return ($base && Variable::bool($varible));
}
rhaco
•個人でレンタルサーバとかでさっくり作るなら強い
•HTMLや XMLをパースしてあれこれやるならお勧め(マッシュアップとか)
•Lingrでいつでも質問できる!
http://www.lingr.com/room/rhaco-ja
~国産の次世代フレームワーク~
Sabel
•国産•ステートフルっぽい書き方もできる•アノテーション•基本機能が充実
Sabel – アノテーション<?php
/** * @flow continuation userForm */class Index_Controllers_Register extends Sabel_Controller_Page{ ... /** * @httpMethod post * @flow next doRegister correct */ public function confirm() { $this->form->applyPostValues($this->userForm); if (!$this->userForm->validate()) { $this->view->setName("prepare"); } }}
※ http://www.sabel.jp/tutorial/blog/p1_1
Sabelフォルダ構造
Sabel
•DI、 AOP•ステートフル•複数のテンプレートエンジンを使える( Sabel独自、 Smarty, Simplate, Savant3)
•ユニットテストや国際化、マイグレーションも•しかし使われているところを見ない
Sabel
•いろんな機能を使ってみたい人向け•アノテーションとかを積極的に使わないともったいない
•1.2系はまだドキュメントが充実していないので 1.1系推奨
•ちょっと凝りすぎ?
~期待の新人~
Yii Framework
•読み方は「イー」•Pradoの人が作ってるっぽい?•Rails系だが、かなり symfony色が強い•後発なのでいろいろ強いかもしれない
Yii Framework
•いろんなフレームワークを参考にしてる(主にRailsと symfony)
•Railsっぽい ActiveRecordをちゃんと実装•symfonyっぽい filter、キャッシュ、プラグイン機能
•Pradoのテンプレートエンジンも使える
Yii Frameworkフォルダ構造
Yii Framework
•まだ 1.0がリリースされた直後なので、先取りしたい人向け
•伸びるかどうかは不明だが伸びそうな気配はある
•ちょっとバグっぽい挙動が(特に cli周り)
どれ使えばいいの?•PHPのバージョン•開発規模•過去の資産•特殊機能•変態度
PHPのバージョン•4系のサポートは終了しています!•でも業務上使わないといけないこともある•5の機能わかんねーよ!って人も•CakePHP/Ethna
開発規模•大きくなると出てくる問題
▫各環境で設定を切り替える▫デプロイ▫テスト▫スケーリング
•Symfonyは YAMLでの設定切り替えが強い /デプロイ機構もある
•テストは結構どれにでも付いてる•DocTest(Maple/rhaco)
過去の資産•PEARとの連携
▫Ethna•最近のフレームワークは PEARを使わない方向が多い
特殊機能•どっかの APIと連動とかー•ライブラリの多さに定評のある Zend
Framework•HTMLパーサーが高機能ならどうにかなるかも
変態度•もちろん rhaco•PHPでDIとかステートフルとかも十分変態だと思う
現実的に今使うなら?•とっつきやすさ: CakePHP•大規模: Symfony•正直あんまりマイナーなフレームワークを使っても仕方ない
•という無難な回答•自力でフレームワークの使い方を開拓できるような人は何使うかくらい判断できるはず
PHP以外という選択肢は?•一人で使うなら PHPが一番じゃない?(レンタルサーバ的な意味で)▫最近は VPSとか安くなってきてるからどうにかなるかも?
•複数人で使うなら他の人のスキルに合わせる必要がある▫「俺 Ruby好きだから Railsね!」は KY▫「俺 Scala好きだから liftね!」とか(略▫「俺 Gauche好きだから Kahuaね!」(略
新しいフレームワークを使うなら•自分でコミュニティを開拓する気力が必要•業務で使う場合に実績がないものをどうやって説得するか?▫事前に個人で実績を作ってしまうとか
PHP4サポート終了•PHP4対応のフレームワークも PHP5に移行する動き▫rhaco2▫Maple4
•PEAR2も PHP5専用になる予定
PHP5.3
•いつ出るの?•フレームワーク作成に便利な機能が沢山
▫closure、 namespace、 Dynamic Static Call...
•5.3専用フレームワーク?
DIとか AOPとかってどうよ?•そこまでやりたいなら Javaに行けば?•どうしてもやりたい人のための選択肢は既に存在する
•そこまで求められるケースが少ない(言語的に)
ステートフルってどうよ?•概念的には凄く便利•入出力が多いアプリケーション(アンケート系?)とかには便利かも?
•設定する手間
設定ファイルの書き方•XML/YAML/PHP•XMLは嫌われる方向にあるが、書き方によっては便利
•PHP直接は書きやすいが、 PHP自体の表現力が厳しい
•YAMLは書きやすいが意外と仕様が複雑
携帯対応•海外では無縁なので本体が対応されることはない▫国産の活躍しどころ?
•プラグインで対応が多い•根本から変化する技術ではないが、独特のものが多い
MVC以外の価値•運用
▫Deploy▫バージョン管理(migration)▫テスト
•負荷対策▫キャッシュ機構▫複数 DB対応
ajax対応•別にいらなくね?•ものによる•PHP側としては基本的には jsonと xmlが簡単に入出力できれば十分
•sfModalBoxPlugin▫symfonyのMVCと上手く連動
•Cometとかファイルアップロード進捗とかはどっちにしろそのままじゃ無理
フレームワークで悩んでいいのは小規模までだよねー•大規模になると
▫O/Rマッパーが根底から別の要求になる▫RDBMSいらない
•いろんなサーバーにいろんなアプリケーションが乗っかって1つの大きなアプリケーションになる▫現在のフレームワークは1サーバ1アプリケーションで完結することが前提
▫そういう開発のほうが圧倒的に多いが…
逆に超小規模なのは?•rhacoが便利•Cakeですら大規模に思えるケース•使い捨てアンケートフォームとか•いっそのこと素の PHP
▫PDO使えばそれなりに組める•Perl界で軽量フレームワークブーム
▫PHPは元々それができる
まとめ•その機能が必要なのかを検討することが必要•自分でコミュニテイを盛り上げるくらいの気持ちが必要
おわり•ご静聴ありがとうございました