« 2008年12月 | メイン | 2009年2月 »

2009年1月25日

CakePHPへの愚痴いろいろ

CakePHPは便利なフレームワークの一つであることは確かだが、いくつか使ってみての愚痴を書いてみたい。

(1)仕様変わりすぎ

バージョンによって仕様がコロコロ変わっている。使い始めて「あれ?」となったのは、思いつくだけでも、

・conditionの書き方変更
・findAll廃止
・web routingの変更

などなど。このため入門書や解説サイトが役に立たないことがある。

(2)ロジックはモデルに

というベストプラクティスのようなものが少し前に議論されていたが、「当たり前の話ではないか」と違和感を感じざるを得なかった。

Sooey:CakePHPを使ったMVC設計のベストプラクティス

特にPerlやPHPでプログラミングを始めた人は、CakePHPに限らずコントローラーにベッタベタにロジックを書く人が多く、Javaでプログラミングを始めた人は、ちゃんとドメインモデルを守ってモデル・エンティティにロジックを書くというスタイルに慣れていると思う。あくまで主観。

(3)モデルはエンティティではない

最初にハマった。data?何それ。

Happy Engner Life:CakePHPのモデルをエンティティとして扱う

(4)プラグインの構成要素

CakePHPのプラグインは「コントローラー+モデル+ビュー」をまとめたものが、プロジェクト間での可搬性という意味でプラグインという概念を考えると、「コンポーネント+ヘルパー」のパッケージを使う機会のほうが多いと思う。

ヘルパーとは、ビューのロジックの切り替えを隠蔽したもの(HTMLを書く必要を無くすという意味合いではない)である。その切り替えロジックはコントローラー間で共通である事が多く、コントローラー間の処理を共通する処理はコンポーネントで書くのがセオリーだ。

例えば携帯電話向けページの処理。ヘルパーでキャリア判別を行っているものも見たことがあるが、キャリア判別をコンポーネントのbeforeRenderで行い、ヘルパーはコンポーネントの判別結果(フィールド値なり)を参照して分岐を行えば、判別処理を一箇所にまとめることができスッキリとする。

このような「モバイルプラグイン」のようなコンポーネントとヘルパーの組み合わせであれば、可搬性という意味でもいいのではないかと思うのだが、周りはどうしているのだろうか。一方で、ヘルパーはコンポーネントに依存しちゃいかん、という文も見かけたことがある。全く不可解だ。

(5)設定の切り替え

本番環境とテスト環境によって設定の値を変えたい場合が多々あるが、CakePHPは環境の切り替えをサポートする機構が弱いのではないかと思った。できれば設定値一発で、使用する設定ファイルを切り替えられるのが理想だ。

既に自分で取り入れていて一番シンプルなのは、.htaccessやhttpd.confの中に、SetEnvで環境ごとの値を置いておいて、PHP側で$_SERVERから読み出して認識させる方法。

テスト環境と本番環境で思い出したが、テスト環境は「test」や「debug」という英単語で良いと思うのだが、本番環境を「real」としていた会社チームがあった。素で「debub」と書く奴もいたな。プログラミング言語は英語で書く言語だけに、スペルミスはもちろん、こういう微妙な間違いもチームの士気を下げる一因となってしまう。

iPhotoやiPodでうまくファイル名順に写真の並び替えができない

誰かハマっているかもしれないのでメモ。

iPhotoのタイトルで並べ替え(*1)や、iPodの写真の並び順は、ExprolerやFinderとは仕様が少し異なる。下記のようなファイル名のファイル群をインポートしたとする。

(*1)ファイル名で並び替え:「表示」→「写真を並べ替え」→「タイトル」

XXXX-1.jpg
XXXX-2.jpg
...
XXXX-10.jpg
XXXX-11.jpg
...
XXXX-100.jpg
XXXX-101.jpg
...
XXXX-110.jpg
XXXX-111.jpg

通常のExproler, Finder, Picasaではこの順番のままだが、iPhotoやiPod(iPhone)で見ると、

XXXX-1.jpg
XXXX-10.jpg
XXXX-100.jpg
XXXX-101.jpg
XXXX-102.jpg
...
XXXX-109.jpg
XXXX-11.jpg
XXXX-111.jpg
XXXX-112.jpg
...
XXXX-119.jpg
...
XXXX-12.jpg
XXXX-121.jpg

という順番になってしまう。恐らくデジカメが生成するファイル名が関連しているものと思われるが、これを解決するためには、

XXXX-001.jpg
XXXX-002.jpg
...
XXXX-010.jpg
XXXX-011.jpg
...
XXXX-100.jpg
XXXX-101.jpg
...
XXXX-110.jpg
XXXX-111.jpg

とケタを揃えて0で埋めるしかない...。ウザい仕様だ。

2009年1月21日

ジオコーディングに過度に期待していた件

どうやら「ジオコーディング」に期待しすぎていたようで、現実を知ってガッカリした。ジオコーディングとは住所または施設名から緯度経度を返してくれるサービスで、日本ではgoogleやYahooなどが提供しているのが有名。

Yahoo!デベロッパーネットワーク - 地図 - ローカルサーチには下記のような説明がある。

ローカルサーチAPIでは、キーワード検索、周辺検索の機能を提供します。キーワード検索は、住所・郵便番号・施設を指定して、その位置情報(緯度、経度)を出力します。周辺検索は、位置情報(緯度、経度)、範囲を指定すると、その範囲内に含まれる施設情報を出力します。

landmark - 施設(役所、学校、病院、郵便局など)を対象に検索

この「など」という文言に、妄想に妄想を膨らませていたが、「施設名」とはランドマーク的な物に限るようだ。駅や公共施設は問題ないが、現実には一般のお店はおろか期待していた「チェーン系のお店」ですら出てこない。

個人レベルで利用できるマスターデータもなさげで、住所と店舗名をクローリングして自分で情報をメンテナンスしなきゃダメなのだろうか。

チェーン店検索なら「ここいこ店舗なび」 5515.biz

2009年1月20日

効率的にMTのテンプレートコーディングを行う

ランチブログ:偏食偏在はいつもの通りMTで構築したのですが、ビュー部分のコーディングでは、こちらの便利なプラグインを利用しました。

MTのテンプレート開発で再構築を不要にするfastDevelopmentプラグイン:to-R

MTのテンプレートコーディングで何が嫌かと言えば、あのもっさりとした管理画面です。特にバージョン4になって酷くなりました。しかも特定の箇所を継続して修正したい際、変更ボタン押下後に画面が再描画されるため、テキストフィールドのカーソルを再度該当する箇所に合わせる必要があります。これでは全く「コーディング→確認」のリズムがつかめません。

管理画面を回避する方法としては、ファイルリンクを利用して外部エディタで編集する方法がありますが、ファイルが更新されたことをMTが検知する必要があるため、確認のたびに再構築作業が必要です(ダイナミックパブリッシングの場合は管理画面上での何らかの操作でOK?)。

こちらのプラグインは、ダイナミックパブリッシング利用下において、ファイルシステムのテンプレートファイルの変更を、すぐに画面に反映・確認できるようにするものです。仕組みとしてはブートストラッパー(mtview.php)の処理をフックして、表示毎に古いテンプレートのキャッシュを破棄することにより、毎回新しい内容をファイルからロードして解釈(MT→Smarty→PHP[→キャッシュ])させ、実行・表示させているのかと思います。ていうか、こんなフックができるなんて知りませんでした。素晴らしい。

とは言え、わざわざローカルで編集したファイルをSFTPでチマチマとアップロードする作業もアホくさいので、Eclipseで編集+アップロード→という流れか、ssfhsでサーバをマウントしてしまい、エディタで編集+直接保存という流れがメインになりそうです。

さてさて、特にカスタムフィードの普及以降、MTはブログツールではなくCMSであるという考えがようやく認知されはじめ、SixApartのwebでも事例として紹介されていますが、最近の個人的にはもう少しプリミティブな機能で見ており、「MT = 標準的に設計されたDBスキーマ + カスタマイズ可能な管理画面セット + インターフェイス(Atom or XML-RPC)」である、という認識を持ちながらいろいろと活用を考えています。そんな話はまた追々。

2009年1月11日

ランチブログ「偏食偏在」をリリース

ランチブログ「偏食偏在」をリリースしました。偏食偏在は、個人的に食べたランチを記録していくブログです。

ランチというのは、お仕事の合間の重要な息抜きであり、楽しみの一つだと思います(楽しみを意図的に増やすのは良いことです)。わざわざそのブログを立ち上げた発端は「人は生涯、何回外でランチを取るのだろう」という疑問からで、個人でコツコツ記録し続けることで、食べログには勝てなくとも、そこそこのコンテンツ群になるのではないかと考えたからです。

そのため「続ける」事を主眼に、

・写真は携帯カメラでの撮影で十分
・写真のレタッチはしない
・説明は適当でいい
・チェーン店は極力掲載しない

というポリシーでやっていきたいと思います。まだまだ、やりたいこと・いじりたいところは沢山あるのですが、サイトオープンを優先しました。

現在は三軒茶屋のランチ情報のみを掲載していますが、今後地域を増やしていけるようにコーディングをしています。ちなみに名前の「偏在」はそこから来ており、一報の偏食は好きなものだけ食べているという意味です。

どうぞよろしくお願いします。

ランチブログ:偏食偏在