狠狠撸

狠狠撸Share a Scribd company logo
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 のフレームワーク多すぎじゃね?
Ethna symfony CakePHP ZendFramework Maple CodeIgniter Piece Framework rhaco Agavi Sabel Akelos MagicWeapon Zoop Framework ちいたん Moony PRADO Seasar.PHP P4A PHP on TRAX Mojavi Horde Harmoni Simframe guesswork classic Phrame Seagull BlueShoes WACT Philot Petitwork KAHO eZComponents Ambivalence ATK Studs Tonic W3matter Enorme Yii 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 – Model class 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 <?php require_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 - DocTest function 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(&quot;prepare&quot;); } } } ※  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 は元々それができる
まとめ その機能が必要なのかを検討することが必要 自分でコミュニテイを盛り上げるくらいの気持ちが必要
おわり ご静聴ありがとうございました

More Related Content

2009年の笔贬笔フレームワーク

Editor's Notes

  1. スタート
  2. 次:自己绍介
  3. ここまで 1 分 Bbs2chreader(Firefox 拡張 ) の作者とは別人
  4. 次:フレームワーク绍介
  5. ここまで 4 分 前振り:最近はてなでこんなネタが
  6. 最近はてな匿名ダイアリーで流行ったネタ フレームワークを使えばモテる!
  7. 次:フレームワーク一覧
  8. こんなに绍介できません
  9. 今回主に話す対象 次:なんでこんなに多いの ZF/Maple/CI/Piece は概要くらいはチェックしたがさわってない
  10. 3種類 次:作りやすい
  11. 次:动かしやすい
  12. よほどのことがない限り CGI で動かすことはまずないと思う 次:自分の好みに合わせたい
  13. 次:フレームワークで注目すべき点
  14. ここまで 7 分
  15. 次:よく闻く意见
  16. 省略可 次: Rails 以前
  17. 質: Rails って聞いたことない人いる? Struts : Java の FW XML でなんでも定義するのが特徴 やたらめんどい 次: Rails で出てきた機能( scaffold )
  18. Symfony の adminGenerator とか 最初からメンテナンス用途でしか考えられていないものもある( rhaco とか) 次: DRY
  19. 次:テスト环境
  20. 次: O/R マッパー
  21. 次: Rails すごい
  22. 次:んじゃ Rails でいいんじゃ
  23. 次: MVC (時間がなければ省略)
  24. 32 ページまで省略可
  25. 次:フルスタック
  26. よくある例え:ロギング
  27. 次:各フレームワークの特徴
  28. ここまで 12 分 最初は Cake Cake-&gt;symfony-&gt;Ethna-&gt;ZF-&gt;CodeIgniter-&gt;Maple-&gt;Piece-&gt;rhaco-&gt;Sabel-&gt;Yii
  29. とは公式では言われてないと思うが Fastladder ( Rails で書かれた)の移植とか (OpenFLP )
  30. Tarball を解凍するといきなりアプリケーション雛形が入ってるのでそのまますぐコードが書けるのが特徴
  31. クラスのプロパティにいろいろ设定
  32. 次: symfony
  33. ここまで 14 分
  34. Apps の下に複数のアプリケーション Modules の下に複数のモジュール( Controller )
  35. これを書いて symfony コマンドを叩くと SQL や model が自動生成される
  36. 次: Ethna
  37. ここまで 16 分
  38. Action に実ロジックを書いて view に普通の MVC の C に当たる内容を書くのが一般的?
  39. 1アクションに対し1アクションフォームが用意されている
  40. 次: ZF
  41. ここまで 18 分
  42. エントリーポイントを自分で書く必要がある 字下げは空白 4 文字 1 行の長さを 80 文字までにする 行末は、ラインフィード (LF) のみ
  43. ジェネレータが無いっぽい?のでフォルダ構成とかは省略 フロントコントローラーの書き方次第でカスタマイズの余地がある
  44. 次: CodeIgniter
  45. ここまで 20 分
  46. 次: Maple (省略可)
  47. ここまで 22 分
  48. 次: Piece
  49. ここまで 23 分
  50. Piece_Unity :フレームワーク本体 Piece_ORM : O/R マッパ Piece_Right :バリデータ Piece_Flow :ページフローの抽象化
  51. ここまで 25 分
  52. *** で始まるコメントがテスト
  53. 困ったら riaf 先生が教えてくれるよ!
  54. ここまで 27 分
  55. アノテーション=あるデータに対するメタデータを追加すること プログラミングで言えば、関数名の先頭のコメントに特殊な記法を用いることによって属性を追加したりできる PHP5 なら RefrectionClass#getDocComment で簡単に関数のコメントを取得できるので、それで対応できる
  56. ちょっと symfony っぽい
  57. ここまで 29 分
  58. どっちかと言うと Cake っぽい
  59. 次:比较まとめ
  60. ここまで 31 ~ 32 分
  61. Rhaco は冗談ですが 他の開発者が使えるかどうかという問題
  62. 次:これからのフレームワーク
  63. ここまで 37 分
  64. 自分もそのフレームワークに関わるんだ!くらいの気持ちで使ってほしい
  65. ここまで 43 分