PHP関西勉強会 私とCakePHP

+4

No comments posted yet

Comments

Slide 1

私とCakePHP 2008/11/07 新原 雅司

Slide 2

■自己紹介 新原雅司(しんばら まさし) shin1x1 Shin x blog http://www.1x1.jp/blog/ CakePHPガイドブック CakeInfo Services_Rankuten Twitter検索 2

Slide 3

■自己紹介 PHP歴 PHP3国際化版(2000年)から PHP4 PHP5 CakePHP歴 CakePHP1.1.x(2006年)から 3

Slide 4

■はじめに Cakeネタで期待された方スミマセン>< 正直大したネタはありません。。。 blogを書くまでが勉強会です 4 events.php.gr.jp にトラックバックするまでが 勉強会です。

Slide 5

■Agenda CakePHPって? 私とCakePHP 構築事例 使ってみて (処理フロー) まとめ 5

Slide 6

■CakePHPって? 6

Slide 7

■CakePHPって? PHPのフレームワーク Ruby on Rails 似 PHP4/5対応 deployが簡単 コードジェネレータ 日本語情報が多い 分かりやすい 7 何だかはやってるらしい

Slide 8

■分かりやすい コード量が少なめ (symfonyの約2/3、ZFの約1/3 ) ディレクトリ構造はわりと単純 ビューディレクトリが固まっている 設定ファイルがPHP YAMLとかXML書かなくて良い DocumentRootに設置して動く オススメではないけど。。。 8

Slide 9

■CakePHPへの道(勝手に予測) PHPだけで構築 ロジックとビューが1ファイルでガリガリ メンテナンスし辛い。。。 Smarty導入 ロジックとビューは分離 でもロジックが大きくなってくると大変。 何とかしたい フレームワークがはやってるらしい フレームワークを入れてみよう! 9

Slide 10

■ CakePHPへの道(勝手に予測) フレームワーク選定 Symfony ファイルがバラバラで分かりつらい ビューがあちこちにあってデザイナさんが大変 YAMLって何? Zend Framework 情報が少ない。。。 CakePHP Rails似 p4lifeさんのscreencast見る bakeでコードジェネレートして感動 10

Slide 11

■CakePHPを使う人(予測) PHP -> Smarty -> CakePHP フレームワークを初めて使う人 分かりやすい ロジックが増えるとSmartyだと複雑になりがち => 解決策をCakePHPに見つけた いちおうビューにSmartyが使えるし フレームワークの恩恵を受け始めた人が増える そうした人が次にどこに行くか? 11

Slide 12

■CakePHPを使わない人(予測) オブジェクト指向的にキッチリ作りたい人 これまでのフレームワークを使っていた人 Struts/mojavi/Mapleとか かっちりしたフレームワークが欲しい人 Symfonyとか Zend Frameworkとか Pieceとか 12

Slide 13

■CakePHPは実用主義 実装で気になるところはある PHPの評価とも似てる? ある意味PHPらしいフレームワーク array()大好き! 13

Slide 14

■私とCakePHP 14

Slide 15

■before Cake 自作フレームワークを使用 PageController PHP3 -> PHP4 -> PHP5 と移行 ORMとか無し 適用案件は結構多い 15

Slide 16

■before Cake サンプル [public_html/index.php] <?php require_once(‘controller/foo/FooBarController.php’); $controller = new FooBarController(); $controller->execute(); ?> <html> …. 16

Slide 17

■before Cake このままで良いのか? 保守 PHP4からPHP5への移行期 新機能追加や障害対応 教育 全体を把握しているのは自分のみ ドキュメントはほぼナシ 教育コストがかかる オープンソースフレームワークを探す 17

Slide 18

■フレームワーク選び Zend Framework まだ不安定な頃 Symfony mojaviライクなのがPHPにしては重いかな でもガッツリ移行するならこれかと どちらも候補 ただ2006年当時だとPHP4が切れなかった 18

Slide 19

■フレームワーク選び CakePHP PHP4/5対応 XMLとか無い 規約ベースが新鮮 Rails似の安心感 軽い p4lifeさんのscreencast 19

Slide 20

■実際のところ CakePHPだけ使ってるわけではない 自社フレームワークも併用 半々くらい 理由 PHP5対応した 資産 稼働してる案件多数 CakePHPをやって逆に利点が見えた 適材適所で 20

Slide 21

■構築事例 21

Slide 22

■構築事例 某プロスポーツサイト 簡易CMS 稼働しているサイトに追加開発 PHP4 + CakePHP + Smarty + PostgreSQL 22

Slide 23

■構築事例 某学校系サイト SNS PHP5 + CakePHP1.1 + PostgreSQL AS/400 と連携(基幹) 23

Slide 24

■構築事例 某プロスポーツサイト チケット販売 期間限定 PHP5 + CakePHP 1.2pre-beta + PostgreSQL Flashとの連携 セッションをDBで共有 1h で 数千枚が完売 24

Slide 25

■構築事例 某イベント系サイト イベント会場企画 携帯メール連携 配信側の要件が厳しめ 遅延配信はNG 想定時間内に配信 キャリアに直接SMTPを話す PHP5 + CakePHP 1.2beta + PostgreSQL 25

Slide 26

■構築事例 某メール配信サイト 携帯メール配信 配信側の要件が厳しめ 遅延配信はNG 想定時間内に配信 キャリアに直接SMTPを話す PHP5 + CakePHP 1.2beta + PostgreSQL 26

Slide 27

■構築事例 某写真販売サイト EC + 写真登録バックエンド バックエンド側はAjax連携 PHP5 + CakePHP 1.2beta + jQuery + PostgreSQL 携帯対応 27

Slide 28

■構築事例 某Twitter検索 http://twitter.1x1.jp/search/ PHP5 + CakePHP 1.1 + PostgreSQL + Senna + Ludia CakePHPはただのフロントエンドなので それほど重要では無いけど Twitter側API変更によりゴメンナサイな状況 公式もあるので。。。 28

Slide 29

■使ってみて 29

Slide 30

■良かった点 情報がたくさんある 新しい人でも馴染みやすい 教育コストはやっぱりかかるけど 全体の見通しは良い Paginate/Model/Set/XMLはやっぱり強力 コミュニティが楽しい Garrett はメチャ良い人 30

Slide 31

■Set 連想配列を扱いやすくするクラス 多次元配列から任意のキー値を取る キーが無くてもNoticeが出ない 31 $data = array(); $data['Model']['id'] = 1; $id = Set::extract($data, ‘Model.id’); // 1 $name = Set::extract($data, ‘Model.name’); // null

Slide 32

■XML XML操作クラス 連想配列をXML化 32 $data = array(); $data['Model']['id'] = 1; $xml = new Xml($data); $xml->toString(); // XML

Slide 33

■やって良かった点 APCを使う パフォーマンスが全然変わる DBのVIEWを使う ログを取る URLルーティングはホワイトリストで Controllerはスリムに 33

Slide 34

■APCを使う フレームワークなら効果大 CakePHPに限らず 導入も簡単 peclコマンドでインストール可 PHP6では標準で含まれる? 34

Slide 35

■DBのVIEWを使う 複数なSELECT文を使う時 Modelのアソシエーションでも可 でもVIEWにしとけば単純 Cakeからは1テーブルにしか見えない チューニングもしやすい ケースバイケース もちろんアソシエーションを上手く使うのが 吉な時も多い 35

Slide 36

■ログを取る アプリケーションログ アプリケーションエラーログ PHPエラーログ SQLログ DB側 Dboを継承してログを仕込む http://www.1x1.jp/blog/2007/04/cakephp_sql_log.html 36

Slide 37

■URLルーティング デフォルトはフルオープン /pages/ ルーティングルールを厳密に定義しておく app/config/routes.php あらかじめ定義しておけばok 意図しないControllerを実行させない 37

Slide 38

■Controllerはスリムに 特にアクションメソッドはスリムに ビジネスロジックはModelに追い出す テストが楽になる フレームワークへの依存度を下げる とか言ってる人はCake向きじゃない? 38

Slide 39

■こうなって欲しい点 PHP5 Only フレームワークが例外出して欲しい Modelの役割を減らして欲しい Model#insert() / Model#update() が欲しい PHP設定は外から触れるようにして欲しい session系/error_reportingとか まあ不満があるなら何とかしようよ カスタムの余地は結構ある Ticket出す わりと取り込んでもらえた Test case と patch 付きで 39

Slide 40

■処理の流れ 40

Slide 41

■処理の流れ FrontController Dispatcher 前処理 実処理 ビューレンダリング前処理 ビューレンダリング 後処理 ビュー出力 41

Slide 42

■ビジネスロジックをどこに書く? Controller#action() には書かない     http://cakephp.org/files/OCPHP.pdf 42

Slide 43

■ビジネスロジックをどこに書く? Controllerのprivate method まあ簡単だし、手軽 他のControllerと共有しない処理なら まあアリかな やり過ぎると Bad Cake! まっしぐら      43

Slide 44

■ビジネスロジックをどこに書く? Model とりあえず落ち着く 肥大化すると次はModelが複雑に DTO的にセッションにシリアライズして 保存とかすると泣ける      44

Slide 45

■ビジネスロジックをどこに書く? POPO(Plain Old PHP Object) app/vendorsに置いて、App::import() フレームワークからは解放される テストがやりやすい 読み込む仕掛けは考えないといけない フレームワーク的にどうよ?      45

Slide 46

■まとめ 46

Slide 47

■CakePHP関西勉強会 2008/12予定 平日夜希望。。。 大阪市内で 発表者募集中! CakePHPな方も CakePHPって何だよ、な方も (Symfony|ZF|Piece|Akelos|CI)な方も 是非是非 47

Slide 48

ご静聴ありがとうございました。 48

Tags: cakephp php

URL: