nazolabo

なぞさんのブログ

CakePHP勉強会に行ってきたよ

第3回CakePHP勉強会に行ってきました。最近あまりレポート書いてないけど真面目に書きます。
haltさんがすごく的確な意見を書いているので、これ以上言うことはないんじゃないかとか思ってしまうけど、ちょっと違う視点で書くと、フレームワーク的に無茶をしてる人が少ない気がした。
これがRails界隈だと多分変態的なプラグインを作ったので公開したみたいな発表とか、内部実装について調べるような発表が多くなる(偏見多め)んだろうけど、Cakeはそんなことはなくて、多分CakePHP勉強会でそれをやってもあまり興味のある人はいなくて、むしろ実用的な使い方のほうが面白いというか、そんな難しいことを考えなくても使えるっていう感じがした。
勉強会自体で少し気になったのが、アンケート書く時間ないよ!いつ書けばいいんだよ!みたいな。ちょっと詰め込みすぎた感。
懇親会はずっとrhaco=変態って言ってた気がする。

以下落書き(発表内容丸写しではないので注意)

フェイス女学園

  • スパイスボックス
  • 最初デザイン地味→派手→女性向け雑誌に載った
    • →王様のブランチ(300万PV)
  • CakePHP
    • フレームワーク初めて
    • サンプリングしたデータに手で入力して近似判定
    • CakePHPRailsっぽいけどPHPの良さが残っている
    • PHP4と5どっちでもOKだったのが決め手
    • 実戦投入する気は最初はなかった
  • システム
    • LAMP
    • 顔判定はOpenCV
    • 敢えて「診断中」というメッセージを出している
  • モバイル
    • /etc/aliasesからcakeconsoleを叩いている
    • テンプレートだけキャリア別に分割
  • CakePHPでよかった点
    • モデル操作が楽(FindAll、FindBy)
    • レイアウトテンプレート便利
    • PHPなので修正が楽
  • 反省点
    • 他の人がわからない
    • Dreamweaverでのctpの設定が面倒
    • メール詰まり
    • Modelを有効利用できなかった
    • デバッグモードの切り替えがしにくい
      • (テスト環境の問題じゃね?)
  • その他
    • OpenCVはコンソールを直接叩いてる(?)

CakePHPの失敗談

  • AppController#beforeFilterにログインチェックを書く
    • ログイン不要ページを別に除外する必要ある
    • 派生クラスでbeforFilter()を実装する場合にparent::beforeFilter()を呼ぶ必要がある
    • Authコンポーネントで解決
  • 関連するモデルにアソシエーションを動的設定する
    • 多すぎるアソシエーションは重い?
    • bindModel()を実行してもアソシエーションが変更されない不具合
    • hasManyしてる場合 ×$this->Review->bindModel() ○$this->User->Review->bindModel()
  • 関連するモデルの取得順を動的に設定する
    • データの表示で取得順とかを変更したい
    • bindModel()でアソシエーションを上書きできる(一度find系を呼ぶと戻る)
  • 自作ビヘイビアの設定値をインスタンスへ保存する
    • ビヘイビアのインスタンスはアプリケーションで1つのみ
    • $this->__settings[$model->alias][〜]で解決
  • コンポーネントのメンバ変数をstartup()で初期化する
    • startup()で初期化したら未定義値になってしまった
    • クローンが実行するために消えてしまう
    • コンポーネント側にメンバ変数を持たない
  • 契約プログラミングを導入
    • assertだらけになってしまった
    • テストを使おう
    • Setクラスを使おう(配列操作)
  • 車輪の再発明

ホッテントリメーカー

  • まわりがCakePHP使っていた
  • CakePHP勉強会に出てみた→わからん
  • チュートリアルやってみたらできた
  • ホッテントリメーカーを作ってみた
    • 実際にタイトルに悩んだ経験から
    • 30万PV
    • 実際に書かれたエントリはトラックバック
  • はてなしりとり2
  • よかったこと→楽
  • 参考にしたもの
    • あきやんさんの連載
    • IDEA*IDEAの連載
    • 「どうにかなるBLOG」のfindAllの記事
    • 英語資料はあまり見てない

CakePHPゆとり開発環境

  • CakePHPの不満
    • stableがstableじゃない
  • cake自体を社内で共有
    • betaを使える
  • 開発用プラグイン
  • CakePHPに特化した環境作ろう

AuthComponentをOpenID対応

  • 認証後はAuthComponentで
  • php-openid
  • ソース公開中

CakeでTest

  • 1.1は書き方がわからない
  • 1.2でcake本体のテスト同梱
  • SimpleTest
  • 1.2でfixture実装
  • テストしやすいところ
  • テストしにくいところ
    • controller
  • actionにはロジックは書かない
  • controllerへの依存関係は極力書かない
  • MockObject
  • 失敗するテストを添付してticketを投げる

CakePHPsymfony

  • askeetCakePHPに移植してみた
    • Cakeで複合PKは扱えない
    • Cakeはフラットなフォルダ構成、symfonyは階層構造
    • resultsetが配列なCake、オブジェクトなsymfony
    • helperはクラスメソッドなCake、グローバル関数なsymfony
    • 細かいクエリを投げるCake、JOINするPropel