| @技術/プログラミング

ちょっとCakePHPで作ってるサイトでRSSフィードを配信したいと思ったのでやってみたんだけど、思いの外面倒くさくてびっくりした。『RailsによるアジャイルWebアプリケーション開発』を読みながらRails 2.3.5でRSSフィード作るときは結構簡単だった気がするので、正直これはないわと思った。

『Railsによる〜』で作ってるデモプロジェクトのdpeotのコードを見てみると、RSSを配信するときはControllerに以下のように記述し、

respond_to do |format|
    format.html # index.html.erb
    format.xml  { render :xml => @products }
end

config/routes.rb

map.connect ':controller/:action/:id.:format'

と書いたあと、RSS用のViewを用意してやるだけだ。ものすごくシンプルで簡単だった。

CakePHPで同じことをやるためには以下の手順が必要。

ちょっと面倒くさすぎてやる気にならなかった。どうせいま僕が作ってるサイトなんてRSSリーダー使うような人が見るサイトじゃないし、フィード配信機能の実装はそんなにプライオリティ高くないので他にやることがなくてどうしようもなく暇なときにでもやろう。

Railsは最初のとっかかりのハードルは高いけど、使い方を覚えていったらやっぱりCakePHPとかよりも全然簡単かつ高速に開発できる気がする。レールに乗ってる感強い。このMephistoの設置もすごく楽だった。ただTerminalを使い慣れた人や、サーバーにSSHでアクセスできる環境じゃないとRailsアプリケーションを使うのは難しい。CakePHPは反面、全部FTPでアップロードすれば良いのでサーバーに標準的な構成でPHPがインストールされてりゃ環境構築でつまずくことはない。どっちをとるかって話ですよね。

僕はファッションの観点からRailsを選びたい。

| @技術/プログラミング

『Railsによるアジャイル〜』とかのコードはViewの部分がスゲーシンプルで、ロジックがほとんど書いてない。これに慣れると、CakePHPに戻って自分が作ってるウェブアプリを見たときに、Viewに結構ロジックが書いてあって愕然とする。例えばフラグをたてて条件にマッチすれば日付を表示し、マッチしなければ表示しないとかしたいとするじゃないですか。Controllerでそういう設定できなくないけど長くなる。Viewの中に書いてしまったら数行で済むし。

だから僕の作ってるCakePHPアプリはMVCとか名ばかりでViewのコード超きたない。入れ子になったif文がたくさんあるし、正規表現で日付の書式変更とかまでやってる。さすがに関数とかは定義してないですけどね。

そもそもCake FoundationのCakeBookも結構Viewにロジックが書いてあったりする。というかかなりハードに書いてある。CakePHPってViewとロジックを分離させるのが難しいのかな。

加えて、Controllerも結構ひどいことになってる。本当はModelに書くべきことを結構Controllerに書いている気がしないではない。サイト検索のためのメソッドとか200行近くあるし、joinとかしまくり。

MVCでロジックとヴューを分離することでデザイナーがViewを触れるようになって分業が進むかもとか思ってたけど、到底そんな状況にないですね。

| @技術/プログラミング

CakePHP 1.3のStableがリリース された。 JavascriptヘルパーとかAjaxヘルパーが非推奨になってる 。かわりにHtmlヘルパーのjsメソッドを使うらしい。 $html->js('') みたいな感じかな。で、Ajax系の処理はjQueryがデフォルトのライブラリになったらしい。Rails 3.0もprotorype.jsに別れを告げたらしいし、自分がJavaScriptのライブラリで遊び始めた頃はjQueryが全盛だったのでいまからprototype.jsの使い方勉強するのかったるかったし、jQuery簡単だしこの進化は大歓迎です。

JavascriptヘルパーとAjaxヘルパーが非推奨になった件については、わざわざ別のヘルパーにせんでもいいよなー、という印象は確かに持ってた。Htmlをいじるメソッドは一つのヘルパークラスにまとめてしまった方がすっきりする。1.2.xのときはAjaxヘルパーが使いづらすぎて結局jQueryでAjaxすることもあったし、あまり存在意義を見いだせなかったので良かったんじゃないでしょうか。

でも既存のプロジェクトの1.3への移行はめんどくさそうなのでたぶんやんない気がする。新しくCakePHPでなんか作るときは使ってみようと思います。

| @技術/プログラミング

なんかTwitterで「最近のポータルシット変わったよね…」とかいう意見を目にするようになったので、パソコンネタだけ隔離して別にブログを始めることにした。使っているCMSはMephisto。Railsの勉強になるかと思って。早速DreamhostへMephistoをインストールしていて躓いてしまったのでちょこっとメモ。

とりあえず tech.portalshit.net というサブドメインを用意し、DreamhostのパネルでPassengerのセットアップ。その後SSHでサーバーに接続し、

$ git clone git://github.com/emk/mephisto.git
``

してgithubからプロジェクトをclone。

Mephistoのインストールにはいくつかgemが必要。Dreamhostには結構たくさんgemがインストールしてあるんだけど、いくつか足りないものがあった。とりあえず設置ディレクトリのルートで

```sh
$ rake gems:install

と打ってみたところ、nokogiriとそれに依存するbrynary-webratが入らなかった。原因を調べてみたところ、xsltのライブラリをダウンロードして、gem install するときにパスを指定してあげる必要があるらしい。xsltのライブラリ自体はPHP5をカスタムインストールしたときに入れてあるので、以下のオプションでインストールした。

$ gem install nokogiri \n    --with-xslt-include=/home/morygonzalez/php5/include/ \n    --with-xslt-lib=/home/morygonzalez/php5/lib/

無事インストール成功。その後もう一回 rake gems:install を実行してbrynary-webratも入り、管理ページにアクセスしてみると今度はPassengerのエラーが。これは単純にdatabase.ymlに development: のDB環境しか記述していなかったこと、 rake db:bootstrap のときに RAILS_ENV=production をつけていなかったことが原因だった。そういうわけでdatabase.ymlに production: の設定(sqlite3を使用)を書き、

$ rake db:bootstrap RAILS_ENV=production

ですべてのインストール作業完了。いまこうして動いております。

今後はここにCakePHPやRails、JavaScript関連のことを書いていこうと思います。できれば一日一ポスト、その日に学んだことを書いていきたいです。

| @技術/プログラミング

MephistoでGoogle Analytics使おうと思ってググったら Ruby on Rails Plugin: Google Analytics (blue egg edition) - artweb design というのが出てきたので、早速インストールしてみたんだけど動いていないっぽい。

Mephistoは「rails blog」でググって一番上に出てきたので深く考えもせずにインストールしてしまったんだけど、一年近くバージョンアップされてないし、いまはあんまり活発に開発が行われてるわけじゃないっぽいな。

追記

一晩寝て起きたら動いてた。

| @技術/プログラミング

『RailsによるアジャイルWebアプリケーション開発 第3版』を読んでいます。第10章まで終わったところです。

(Railsに大きく影響を受けている)CakePHPをやったから、Railsをまっさらな状態から学ぶよりも理解は速いだろうと思っていましたが、そうでもない感じです。なかなか苦戦してます。

一言でいうと、RailsはCakePHPとかなり違う。Cakeは Model->Controller->View の流れというか構造がすっきりしてた。例えば posts というテーブルがあれば、Post ModelがあってPostsController があり、ViewにはControllerのメソッドに対応するものがあるという感じです。

しかし『Railsによるアジャイル…』では平気で同名のテーブルをDBに持たないModelやControllerがあったりする。こういうのが混乱します。CakePHPではDB使わないときはわざわざModelに

<?php
class Hoge extends AppModel {
    var $useTable = false;
}
?>

やControllerに

<?php
class HogesController extends AppController {
    var $uses = array();
}
?>

とか書いてあげなきゃいけないのに。

ほかにも基本的にCakePHPではModelのなかでControllerから参照するメソッドを定義したりはしなかったんだけど、Railsではそういうやり方が多い。ModelはDBとのやりとりを定義するためだけの場所ではないっぽいです。逆になんで全部Controllerでメソッドを定義しないのか分からない。率直に言うと気持ち悪かったりします。全部Controllerに書いて、ModelではValidationとかだけやるようにした方がすっきりして見通しが良いと思うんだけどなぁ。

とここまで書いて気がついたんだけど、ModelでもActiveRecordを継承しないやつがあるわけか。よくコードの一行目を読むと、

class Cart

なやつと、

class Order < ActiveRecord::Base

なやつがある。なるほどそういうことだったのか。

こんな感じで前途多難ですが、Railsが出来るっていうとやっぱなんとなくかっこいいので頑張ろうと思います。

| @読書

『六〇〇万人の女性に支持される「クックパッド」というビジネス』という本をようやく読み終えたので感想を。

まず正直な感想を言うと、書いてる人がクックパッドを持ち上げすぎてて気持ち悪い。むかし湯布院についての新書を読んだときもこんな感じで、提灯記事ならぬ提灯新書なるジャンルがあるのかと錯覚するほど。

Amazonのレビューを読んでいると、ちょうどこの本が出版されたときにクックパッドはマザーズに上場したそうで、まぁいろいろ大人の事情があったんでしょう。

もちろん面白いところもあります

とはいえ全体がつまんないわけではなくて、興味深い部分もありました。社長さんが学生時代にやってた野菜の販売サイトがうまく行かなかった話とか。僕も一応ネットで物売る系の仕事をやっているので、「学生時代だと、すべてがイベントになってしまう」という部分は共感しながら読むことが出来ました。学生ノリの商売は野菜を出荷してもらってる農家に対しても悪いし、買ってくれる消費者に対しても悪い。中途半端なビジネスが一番最悪。

中でも興味深かったのが、クックパッドはもはや単なるレシピサイトではなくて、流通・小売業者にとっても重要な情報源となっているという話。この季節はどういうキーワードがもっとも検索されているかとか、そういう情報を売っているんだそう。スーパーとかとしたら、商品の発注かけるときにあらかじめ消費者の興味関心が分かれば無駄なく発注できるもんね。

ただ、この先どうなるのかな、っていう疑問も持った。

レシピの増加

クックパッドは毎日どんどんレシピが増えていってる。例えば親子丼とかで検索したら大量にレシピがヒットする。僕はいちど海南チキンライスの作り方をクックパッドで調べたことがあります。海南鶏飯みたいなマイナーな料理だったら大量ヒットみたいなことにはならないけど(さっき調べてみたら全部で28件だった)、親子丼みたいなありきたりな料理だと膨大な数のレシピがヒットする(同1234件)。

プレミアム会員になると検索結果を人気順に並び替えることも出来るけど、非プレミアム会員には使いにくいのは否定できない。初めて来た人は「なんかレシピが探しにくいサイトだなぁ」という印象を持つんじゃないかな。

ぶっちゃけ僕はクックパッドはあまり利用しないです。Googleから直で料理名検索して適当にヒットしたサイトを参考に料理作ることが多い。クックパッドで良いレシピにたどり着くにはそれなりにコストがかかる。Googleで上に出てくるレシピのページははてブなりなんなりでそれなりの評価を集めているサイトだから、クックパッドの中でぐるぐる探し回るより楽。ググった結果、クックパッド内のページが上の方に出てくるんだったらそれを参考にすればよいですしね。

こういうのは日頃パソコンを使い慣れている人間の考えで、クックパッドには主婦に最適化された何かがあるのでしょう。材料で検索できて便利とか。毎日使ってたらはまっていくのかな。

料理作る人が減ったら

で、もう一個思うのが、日本人があんまり料理しなくなったらどうなるんだろうなー、っての。僕はだいたい朝8時過ぎから夜9時前後まで働いてますが、こんな働き方してて一人暮らしだったらまず自炊とか無理です。都会にはこういう生活してる人多いと思います。単身世帯とかあんま自炊しないだろうし、日本でどんどん単身生活者が増えていったら…。核家族化して専業主婦とかもどんどん減ってみんな外食やスーパーの総菜を食べるようになったら…。実際うちは両親共働きでばあちゃんも高齢だから、夕飯はスーパーの半額総菜みたいのが多い。うちがずぼらなだけかな。

ある日いきなり日本人が自炊しなくなるとは考えられないけど、自炊する人が減る可能性があることも考慮しなきゃいけないかもなー、と感じました。

蛇足

実はこの本、発売直後に買ってたんだけど、途中まで読んだところで放置してた。上の方にも書いてますけど内容がヨイショばっかりでアレな感じだったから。最近、37シグナルズの本を読んで感化されたので、「そういえばクックパッドもRailsな会社だったな」と本棚から引っ張り出して読み終えた次第です。

この本、dankogaiがレビューした直後はAmazonで売り切れてたし、37シグナルズの本も発売されてすぐはAmazonで売り切れてたけど、熊本の紀伊國屋では即ゲット余裕でした。地方住まいだとネットでの売れ行きと実店舗での売れ行きにタイムラグがあるので話題の本が楽々買えてた助かります。