Your SlideShare is downloading. ×
0
2009年のPHPフレームワーク
2009年のPHPフレームワーク
2009年のPHPフレームワーク
2009年のPHPフレームワーク
2009年のPHPフレームワーク
2009年のPHPフレームワーク
2009年のPHPフレームワーク
2009年のPHPフレームワーク
2009年のPHPフレームワーク
2009年のPHPフレームワーク
2009年のPHPフレームワーク
2009年のPHPフレームワーク
2009年のPHPフレームワーク
2009年のPHPフレームワーク
2009年のPHPフレームワーク
2009年のPHPフレームワーク
2009年のPHPフレームワーク
2009年のPHPフレームワーク
2009年のPHPフレームワーク
2009年のPHPフレームワーク
2009年のPHPフレームワーク
2009年のPHPフレームワーク
2009年のPHPフレームワーク
2009年のPHPフレームワーク
2009年のPHPフレームワーク
2009年のPHPフレームワーク
2009年のPHPフレームワーク
2009年のPHPフレームワーク
2009年のPHPフレームワーク
2009年のPHPフレームワーク
2009年のPHPフレームワーク
2009年のPHPフレームワーク
2009年のPHPフレームワーク
2009年のPHPフレームワーク
2009年のPHPフレームワーク
2009年のPHPフレームワーク
2009年のPHPフレームワーク
2009年のPHPフレームワーク
2009年のPHPフレームワーク
2009年のPHPフレームワーク
2009年のPHPフレームワーク
2009年のPHPフレームワーク
2009年のPHPフレームワーク
2009年のPHPフレームワーク
2009年のPHPフレームワーク
2009年のPHPフレームワーク
2009年のPHPフレームワーク
2009年のPHPフレームワーク
2009年のPHPフレームワーク
2009年のPHPフレームワーク
2009年のPHPフレームワーク
2009年のPHPフレームワーク
2009年のPHPフレームワーク
2009年のPHPフレームワーク
2009年のPHPフレームワーク
2009年のPHPフレームワーク
2009年のPHPフレームワーク
2009年のPHPフレームワーク
2009年のPHPフレームワーク
2009年のPHPフレームワーク
2009年のPHPフレームワーク
2009年のPHPフレームワーク
2009年のPHPフレームワーク
2009年のPHPフレームワーク
2009年のPHPフレームワーク
2009年のPHPフレームワーク
2009年のPHPフレームワーク
2009年のPHPフレームワーク
2009年のPHPフレームワーク
2009年のPHPフレームワーク
2009年のPHPフレームワーク
2009年のPHPフレームワーク
2009年のPHPフレームワーク
2009年のPHPフレームワーク
2009年のPHPフレームワーク
2009年のPHPフレームワーク
2009年のPHPフレームワーク
2009年のPHPフレームワーク
2009年のPHPフレームワーク
2009年のPHPフレームワーク
2009年のPHPフレームワーク
2009年のPHPフレームワーク
2009年のPHPフレームワーク
2009年のPHPフレームワーク
2009年のPHPフレームワーク
2009年のPHPフレームワーク
2009年のPHPフレームワーク
2009年のPHPフレームワーク
2009年のPHPフレームワーク
2009年のPHPフレームワーク
2009年のPHPフレームワーク
2009年のPHPフレームワーク
2009年のPHPフレームワーク
2009年のPHPフレームワーク
2009年のPHPフレームワーク
2009年のPHPフレームワーク
2009年のPHPフレームワーク
2009年のPHPフレームワーク
2009年のPHPフレームワーク
2009年のPHPフレームワーク
2009年のPHPフレームワーク
2009年のPHPフレームワーク
2009年のPHPフレームワーク
2009年のPHPフレームワーク
2009年のPHPフレームワーク
2009年のPHPフレームワーク
2009年のPHPフレームワーク
2009年のPHPフレームワーク
2009年のPHPフレームワーク
2009年のPHPフレームワーク
2009年のPHPフレームワーク
2009年のPHPフレームワーク
2009年のPHPフレームワーク
2009年のPHPフレームワーク
2009年のPHPフレームワーク
2009年のPHPフレームワーク
2009年のPHPフレームワーク
2009年のPHPフレームワーク
Upcoming SlideShare
Loading in...5
×

Thanks for flagging this SlideShare!

Oops! An error has occurred.

×
Saving this for later? Get the SlideShare app to save on your phone or tablet. Read anywhere, anytime – even offline.
Text the download link to your phone
Standard text messaging rates apply

2009年のPHPフレームワーク

2,960

Published on

LOCAL PHP部 札幌勉強会02(ちょっと豪華なフレームワーク特集) …

LOCAL PHP部 札幌勉強会02(ちょっと豪華なフレームワーク特集)
2009年のPHPフレームワーク

http://labs.nazone.info/

Published in: Technology
0 Comments
0 Likes
Statistics
Notes
  • Be the first to comment

  • Be the first to like this

No Downloads
Views
Total Views
2,960
On Slideshare
0
From Embeds
0
Number of Embeds
0
Actions
Shares
0
Downloads
1
Comments
0
Likes
0
Embeds 0
No embeds

Report content
Flagged as inappropriate Flag as inappropriate
Flag as inappropriate

Select your reason for flagging this presentation as inappropriate.

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

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

    ×