Your SlideShare is downloading. ×

PHP framework Phalcon

28,432

Published on

2013/10/23 社内勉強会の資料

2013/10/23 社内勉強会の資料

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

No Downloads
Views
Total Views
28,432
On Slideshare
0
From Embeds
0
Number of Embeds
8
Actions
Shares
0
Downloads
34
Comments
0
Likes
8
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

Transcript

  • 1. PHP Framework Phalcon 2013年10月23日(水) 林 正紀 @m_norii http://norii.hatenablog.com/
  • 2. 自己紹介 • • • • • 2000- NSW (SIer) 2004- CYBIRD (ガラケー全盛期) 2008- Bit Shift 2011- WINLIGHT (モバグリ・ソシャゲ全盛期) 2013- Trifort • Live in Fujimino, Saitama • Like • Music, Live (especially Mr.Children, Ikimonogakari) • Swimming
  • 3. Phalcon:特徴 • C拡張での実装→速い/資源効率良い • 豊富な機能と疎結合なクラス群 • 使用する機能の取捨選択ができる • EventManagerとDIコンテナを利用したメインフ ロー • 3種類の構成を選択可能 • Single Module • Multi Module • Micro Framework • ライセンスは New BSD License
  • 4. 動作要件 • PHP5.3以上 • 一部機能はPHP5.4以降で使うとパフォーマンス 面で有利とのこと • PHP5.3系はすでにEOL迎えているので、新規案件で 適用するなら5.4/5.5系を利用すべき
  • 5. リリース履歴 日時 Ver 履歴 2012-07-01 0.4 Memcacheによる結果セットのキャッシュ DBメタデータの永続化 PostgreSQLをサポート 正規表現によるルーティング、多言語対応、 仮想外部キー 2012-09-08 0.5.0 Event Manager/DIコンテナの導入 2012-10-31 0.6 MongoDBサポート 2013-03-20 1.0.0 Formビルダー、Validator 2013-07-08 1.2.0 ModelCriteria 機能強化 ORMで多対多関連サポート 2013-07-25 1.2.1 Config/Json、バグフィックス 2013-08-06 1.2.2 バグフィックス、最適化 2013-08-16 1.2.3 (Change log無し)
  • 6. 導入事例 • RODEO という会社がソーシャルゲーム開発に 使っているらしい • PHPカンファレンス2013でのフレームワークディス カッション中の発表より • http://www.rodeo.jp.net/ • http://www.slideshare.net/dzeyelid/introductionphalconatphpcon
  • 7. パフォーマンス比較 1 (秒間処理リクエスト数) 2535 851 354 489 541 568 860 1059 ・いわゆる「Hello World」アプリ ケーションでの比較 ・ベンチ環境 Mac OS X Lion 10.7.4 Apache2.2.22(mod_rewrite無効) PHP5.3.15 (APC有効) CPU: 2.04GHz Intel Core i5 Memory: 4GB
  • 8. パフォーマンス比較2 (1リクエスト当たり処理時間 [ms]) 2.82 2.05 1.85 1.37 1.17 1.16 0.99 0.39
  • 9. パフォーマンス比較3 (読み込みPHPファイル数) 66 46 46 30 27 23 18 4
  • 10. パフォーマンス比較4 (1Req当たりメモリ使用量 [MB]) 1.75 1.50 1.50 1.25 1.25 1.10 1.00 0.75
  • 11. 爆速なのはわかったが・・・ • 実際に本当に爆速になるか? ・・・は、作るアプリケーションの質にも大き く依る • 投げるSQLがイケてなくて足引っ張ってると か・・・ • PHP標準関数やクラス/Phalconで提供している機能 をわざわざ再実装してるとか・・・ • なので、Phalconの性能を出し切るようなプロ グラムを心がける必要がある
  • 12. 機能一覧 ACL Events Security Annotations Filter Session CLI Flash ※ Tag Cache Forms Text Config Http Translate Crypt Kernel Validation DI Loader Version Db Logger Debug MVC Dispatcher Paginator Escaper Queue ※Flash はAdobe Flashではなく、複数リクエストをまたいでメッセージ を受け渡すもの
  • 13. 機能一覧:MVC Application User/Component Controller User/Module Dispatcher User/Plugin Micro View Model View/Engine/PHP Url View/Engine/Volt
  • 14. 機能:モデル(1) <?php $cards = Card::find();//全件取得 $card = Card::findFirst(5); // ID 5を1件取得 $cards = Card::query() ->where('element = :element:') ->bind(array('element' => 1)) ->order('rarity') ->execute(); // メソッドチェーンによる記法 //複数件帰ってくるメソッドの返値の型は「ResultSet」。Trabarsableなのでforeachで 繰り返し処理ができる foreach($cards as $card){ //do something } //この処理は、Phalconの内部ではDBのカーソルを利用して取得しているのでメモリ をあまり使わない
  • 15. 機能:モデル(2)集約関数 <?php echo Card::count ();// SELECT count(*) echo Card::sum(attack); echo Card::average(defence); echo Card::maximum(rarity); echo Card::minimum(cost); ・その他、Insert/Update/DeleteはDoctrine(SymfonyのORマッパ)とだいた い同じ ・任意のSQLを投げる機能もあるので、ORマッパとしてのモデルは使わな いという選択もできる
  • 16. 機能:Cache • 標準で選択可能なBackend • • • • • File Memcached APC Mongo Xcache • あれ、Redisは・・・(´・ω・`) • https://github.com/phalcon/incubator/blob/master/Libr ary/Phalcon/Cache/Backend/Redis.php
  • 17. 機能:テンプレートエンジン (Volt) • Twigライクな記法、Smartyとはちょっと違う • エンジンは差し替え可能。Pure PHPも選べる • Adapter書けばSmartyにも対応できる • https://github.com/phalcon/incubator/blob/master/Libr ary/Phalcon/Mvc/View/Engine/Smarty.php • でも、テンプレートのParseってコスト高い処理なので、 そこをPHP実装のSmartyでやるのはPhalcon使う意味ある の?な感
  • 18. 機能:テンプレートエンジン (Volt) サンプル コメント書式 {# app/views/products/show.volt #} {% block last_products %} 制御文書式 {% for product in products %} * Name: {{ product.name|e }} {% if product.status == "Active" %} Price: {{ product.price + product.taxes/100 }} {% endif %} {% endfor %} {% endblock %} 変数出力書式
  • 19. EventManager • 「フレームワークがC実装だと、フレームワークの 挙動に関わる部分は全く手が入れられないの?」 • EventManagerを介して、フレームワークの各処理 ステージ中に処理を割りこませることができる • • • • • • • beforeDispatchLoop beforeDispatch beforeExecuteRoute initialize afterExecuteRoute beforeNotFoundAction など http://docs.phalconphp.com/en/latest/reference/dispatching .html • 上記以外、DB関連も細かいイベントが設定されていて、 Listenできる仕掛けになっている
  • 20. Listenerクラスに通知 Controllerクラスに通知 EventManagerとEvent Bootstrap Routing BeforeDispatchLoopイベント BeforeDispatchイベント Dispatch BeforeExecuteRouteイベント Controller/Action AfterExecuteRouteイベント AfterDispatchイベント AfterDispatchLoopイベント Response
  • 21. DIコンテナ/サービスロケータ • 複数クラスで使いまわすオブジェクトを管理 • 例:MVC内のRequest/Responseクラス • 動作環境に依存して処理を変える箇所を、外部 から注入することで、疎結合性、テスト可用性 を確保 • 実行環境用とUnitTest用Requestクラス • 開発/テスト/ステージ/商用環境 • http://docs.phalconphp.com/en/latest/reference/di.htm l
  • 22. 3種類の構成 • Single-Module • FuelPHP、CodeIgniterのような 1プロジェクト1アプ リ構成 • Multi-Module • Zend、Symfonyのような1プロジェクト内に複数アプ リの構成 • Micro Framework • Silexのようなシンプルなアプリケーションを素早く 作るためのコンパクトなフレームワーク
  • 23. Single-Module ディレクトリ構成 single/ app/ controllers/ models/ views/ public/ css/ img/ js/
  • 24. Multi-Module ディレクトリ構成 multiple/ apps/ frontend/ controllers/ models/ views/ Module.php backend/ controllers/ models/ views/ Module.php public/ css/ img/ js/
  • 25. Micro Framework ディレクトリ構成 my-rest-api/ models/ Robots.php index.php .htaccess index.php <?php $app = new PhalconMvcMicro(); $app->get('/api/robots', function() { //Do something }); $app->post('/api/robots', function() { //Do something }); $app->handle();
  • 26. 課題 • 日本語の情報が少ない • 公式サイトも英語のみ • 内部で動作しているか詳細を調べるのが(PHP実 装のフレームワークと比して)難しい • Cソースは公開されているのでそれを読めばいいが • C実装なのでメモリ周りの問題も報告が見受け られる • https://github.com/phalcon/cphalcon/blob/master/CHA NGELOG • 開発自体はそれなりにアクティブなので、patch投 げれば修正してくれるかも
  • 27. 雑感(設計周り) • フルスタックアプリケーションの構成は Zend Framework2に近い • コントローラ名/アクション名の規則やViewファイ ルの拡張子とか特に • マイクロアプリケーションの構成はSilexっぽい • ORマッパはDoctrineっぽい • テンプレートエンジン(Volt)はTwigっぽい • これらをいいとこどりしてCで実装したみたい なところか
  • 28. 雑感(実装周り:1) • Webアプリに必要な機能はひととおり揃ってい る • 各種IDE用の補完用ファイルは有志が作ってる • デバッグ用機能がちょっと弱い? • Symfonyとかにあるデバッグツールバー欲しいよ ね? →「PHP Debug Bar」という汎用的なのがあるのでこ れと連携させれば。 http://phpdebugbar.com/ Phalconと連携させてる人もいた http://sankame.github.io/PHPDebugBar/2013/09/23/ph p_debug_bar_install/
  • 29. 雑感(実装周り:2) • いわゆる「開発/テスト/ステージ/商用」環境 別のアプリケーション構築法がデフォルトでは 提供されていない • おそらくDIで外から注入せよという思想だと思われ るが、他Frameworkでもだいたいある機能なので、 最初の導入時にあってもいいのでは。 • 公式ドキュメントどおりに構築していくと、 index.phpの記述がカオスになりそう • ZendのようにBootstrapクラスをちゃんと作って、 index.phpは薄く保つのがいいのではないか。
  • 30. 雑感(まとめ) • Zend/Symfonyの設計思想を受けている印象なの で、世間的に知られているパターンを適用した アプリケーション構築はしやすそう • DDD(Domain Driven Design) • PofEAA(Patern of Enterprise Application Architecture) • フレームワークの機能をフルに活かして、 KISS(Keep It Simple & Small) DRY(Don't Repeat Yourself) YAGNI(You Aren't Gonna Need It) なアプリケーションを構築すれば、 真に爆速なサービスを提供できる

×