|
|
私とCakePHP 2008/11/07 新原 雅司
■自己紹介 新原雅司(しんばら まさし) shin1x1 Shin x blog http://www.1x1.jp/blog/ CakePHPガイドブック CakeInfo Services_Rankuten Twitter検索 2
■自己紹介 PHP歴 PHP3国際化版(2000年)から PHP4 PHP5 CakePHP歴 CakePHP1.1.x(2006年)から 3
■はじめに Cakeネタで期待された方スミマセン>< 正直大したネタはありません。。。 blogを書くまでが勉強会です 4 events.php.gr.jp にトラックバックするまでが 勉強会です。
■Agenda CakePHPって? 私とCakePHP 構築事例 使ってみて (処理フロー) まとめ 5
■CakePHPって? 6
■CakePHPって? PHPのフレームワーク Ruby on Rails 似 PHP4/5対応 deployが簡単 コードジェネレータ 日本語情報が多い 分かりやすい 7 何だかはやってるらしい
■分かりやすい コード量が少なめ (symfonyの約2/3、ZFの約1/3 ) ディレクトリ構造はわりと単純 ビューディレクトリが固まっている 設定ファイルがPHP YAMLとかXML書かなくて良い DocumentRootに設置して動く オススメではないけど。。。 8
■CakePHPへの道(勝手に予測) PHPだけで構築 ロジックとビューが1ファイルでガリガリ メンテナンスし辛い。。。 Smarty導入 ロジックとビューは分離 でもロジックが大きくなってくると大変。 何とかしたい フレームワークがはやってるらしい フレームワークを入れてみよう! 9
■ CakePHPへの道(勝手に予測) フレームワーク選定 Symfony ファイルがバラバラで分かりつらい ビューがあちこちにあってデザイナさんが大変 YAMLって何? Zend Framework 情報が少ない。。。 CakePHP Rails似 p4lifeさんのscreencast見る bakeでコードジェネレートして感動 10
■CakePHPを使う人(予測) PHP -> Smarty -> CakePHP フレームワークを初めて使う人 分かりやすい ロジックが増えるとSmartyだと複雑になりがち => 解決策をCakePHPに見つけた いちおうビューにSmartyが使えるし フレームワークの恩恵を受け始めた人が増える そうした人が次にどこに行くか? 11
■CakePHPを使わない人(予測) オブジェクト指向的にキッチリ作りたい人 これまでのフレームワークを使っていた人 Struts/mojavi/Mapleとか かっちりしたフレームワークが欲しい人 Symfonyとか Zend Frameworkとか Pieceとか 12
■CakePHPは実用主義 実装で気になるところはある PHPの評価とも似てる? ある意味PHPらしいフレームワーク array()大好き! 13
■私とCakePHP 14
■before Cake 自作フレームワークを使用 PageController PHP3 -> PHP4 -> PHP5 と移行 ORMとか無し 適用案件は結構多い 15
■before Cake サンプル [public_html/index.php] <?php require_once(‘controller/foo/FooBarController.php’); $controller = new FooBarController(); $controller->execute(); ?> <html> …. 16
■before Cake このままで良いのか? 保守 PHP4からPHP5への移行期 新機能追加や障害対応 教育 全体を把握しているのは自分のみ ドキュメントはほぼナシ 教育コストがかかる オープンソースフレームワークを探す 17
■フレームワーク選び Zend Framework まだ不安定な頃 Symfony mojaviライクなのがPHPにしては重いかな でもガッツリ移行するならこれかと どちらも候補 ただ2006年当時だとPHP4が切れなかった 18
■フレームワーク選び CakePHP PHP4/5対応 XMLとか無い 規約ベースが新鮮 Rails似の安心感 軽い p4lifeさんのscreencast 19
■実際のところ CakePHPだけ使ってるわけではない 自社フレームワークも併用 半々くらい 理由 PHP5対応した 資産 稼働してる案件多数 CakePHPをやって逆に利点が見えた 適材適所で 20
■構築事例 21
■構築事例 某プロスポーツサイト 簡易CMS 稼働しているサイトに追加開発 PHP4 + CakePHP + Smarty + PostgreSQL 22
■構築事例 某学校系サイト SNS PHP5 + CakePHP1.1 + PostgreSQL AS/400 と連携(基幹) 23
■構築事例 某プロスポーツサイト チケット販売 期間限定 PHP5 + CakePHP 1.2pre-beta + PostgreSQL Flashとの連携 セッションをDBで共有 1h で 数千枚が完売 24
■構築事例 某イベント系サイト イベント会場企画 携帯メール連携 配信側の要件が厳しめ 遅延配信はNG 想定時間内に配信 キャリアに直接SMTPを話す PHP5 + CakePHP 1.2beta + PostgreSQL 25
■構築事例 某メール配信サイト 携帯メール配信 配信側の要件が厳しめ 遅延配信はNG 想定時間内に配信 キャリアに直接SMTPを話す PHP5 + CakePHP 1.2beta + PostgreSQL 26
■構築事例 某写真販売サイト EC + 写真登録バックエンド バックエンド側はAjax連携 PHP5 + CakePHP 1.2beta + jQuery + PostgreSQL 携帯対応 27
■構築事例 某Twitter検索 http://twitter.1x1.jp/search/ PHP5 + CakePHP 1.1 + PostgreSQL + Senna + Ludia CakePHPはただのフロントエンドなので それほど重要では無いけど Twitter側API変更によりゴメンナサイな状況 公式もあるので。。。 28
■使ってみて 29
■良かった点 情報がたくさんある 新しい人でも馴染みやすい 教育コストはやっぱりかかるけど 全体の見通しは良い Paginate/Model/Set/XMLはやっぱり強力 コミュニティが楽しい Garrett はメチャ良い人 30
■Set 連想配列を扱いやすくするクラス 多次元配列から任意のキー値を取る キーが無くてもNoticeが出ない 31 $data = array(); $data['Model']['id'] = 1; $id = Set::extract($data, ‘Model.id’); // 1 $name = Set::extract($data, ‘Model.name’); // null
■XML XML操作クラス 連想配列をXML化 32 $data = array(); $data['Model']['id'] = 1; $xml = new Xml($data); $xml->toString(); // XML
■やって良かった点 APCを使う パフォーマンスが全然変わる DBのVIEWを使う ログを取る URLルーティングはホワイトリストで Controllerはスリムに 33
■APCを使う フレームワークなら効果大 CakePHPに限らず 導入も簡単 peclコマンドでインストール可 PHP6では標準で含まれる? 34
■DBのVIEWを使う 複数なSELECT文を使う時 Modelのアソシエーションでも可 でもVIEWにしとけば単純 Cakeからは1テーブルにしか見えない チューニングもしやすい ケースバイケース もちろんアソシエーションを上手く使うのが 吉な時も多い 35
■ログを取る アプリケーションログ アプリケーションエラーログ PHPエラーログ SQLログ DB側 Dboを継承してログを仕込む http://www.1x1.jp/blog/2007/04/cakephp_sql_log.html 36
■URLルーティング デフォルトはフルオープン /pages/ ルーティングルールを厳密に定義しておく app/config/routes.php あらかじめ定義しておけばok 意図しないControllerを実行させない 37
■Controllerはスリムに 特にアクションメソッドはスリムに ビジネスロジックはModelに追い出す テストが楽になる フレームワークへの依存度を下げる とか言ってる人はCake向きじゃない? 38
■こうなって欲しい点 PHP5 Only フレームワークが例外出して欲しい Modelの役割を減らして欲しい Model#insert() / Model#update() が欲しい PHP設定は外から触れるようにして欲しい session系/error_reportingとか まあ不満があるなら何とかしようよ カスタムの余地は結構ある Ticket出す わりと取り込んでもらえた Test case と patch 付きで 39
■処理の流れ 40
■処理の流れ FrontController Dispatcher 前処理 実処理 ビューレンダリング前処理 ビューレンダリング 後処理 ビュー出力 41
■ビジネスロジックをどこに書く? Controller#action() には書かない http://cakephp.org/files/OCPHP.pdf 42
■ビジネスロジックをどこに書く? Controllerのprivate method まあ簡単だし、手軽 他のControllerと共有しない処理なら まあアリかな やり過ぎると Bad Cake! まっしぐら 43
■ビジネスロジックをどこに書く? Model とりあえず落ち着く 肥大化すると次はModelが複雑に DTO的にセッションにシリアライズして 保存とかすると泣ける 44
■ビジネスロジックをどこに書く? POPO(Plain Old PHP Object) app/vendorsに置いて、App::import() フレームワークからは解放される テストがやりやすい 読み込む仕掛けは考えないといけない フレームワーク的にどうよ? 45
■まとめ 46
■CakePHP関西勉強会 2008/12予定 平日夜希望。。。 大阪市内で 発表者募集中! CakePHPな方も CakePHPって何だよ、な方も (Symfony|ZF|Piece|Akelos|CI)な方も 是非是非 47
ご静聴ありがとうございました。 48
| URL: |
No comments posted yet
Comments