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

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

追記

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

| @映画/ドラマ/テレビ

しあわせの隠れ場所

評価 : ★★★★☆

あらすじ

家庭崩壊してる貧しい黒人の少年マイケル・オアーが、裕福な白人家庭に養子として迎え入れられ、アメフト選手として大成する話。マイケルが一時的に身を寄せていた自動車整備工場のおっさんが、自分の子どもをカトリックの名門校に入れるために、「マイケルをアメフト選手にしたら将来有望だぜ。だからうちの息子と一緒に入学させてくれよ」と高校のアメフト部のコーチに持ちかけるところから話が始まる。しかし白人だらけの高校にうまくなじめず、下宿先のおばさんにも疎まれマイケルは肩身の狭い思いをする。寒い冬の夜に半袖短パンで路頭に迷っているところに通りかかったリー・アン・テューイ(サンドラ・ブロック)が見かねて家に泊めてあげるところから話は進んでいく。実話がベースらしいです。

ベタな感動作品だけどとても良かったです。『きみに読む物語』とか『私の中のあなた』的な良さがあります。金持ちな白人が貧しい人を助けるっていう話だと偽善っぽさが出てくるんだけど、サンドラ・ブロックが肝っ玉母さんを好演してて、偽善っぽさがあまり漂ってないです。

ぐっと来るのがマイケルが遠慮するところ。サンドラ・ブロックは最初マイケルを家に泊めたときに警戒するんだけど、朝起きてみるとマイケルは礼儀正しくてきれいにふとんをたたんでひっそり屋敷を出ていこうとする。テューイ家で暮らすようになってからも、サンドラ・ブロックのことをミセス・テューイって呼んで「そういうよそよそしい呼び方はやめなさい」って注意されたり。お互いが手探りでじわじわと心の距離を詰めていくところが良かったです。

サンドラ・ブロックが金持ち奥さん達とのランチで、黒人や貧しい地区に住む人たちのことを馬鹿にする連中に向かって "Shame on you" って言うシーンはさすがにやり過ぎというか偽善なオーラが漂ってたけど、最初はマイケルのことを馬鹿にしてた高校のアメフト部のコーチも、試合で白人の審判がマイケルに不利な判定をしたときに「この人種差別野郎!」と食ってかかるところなど、周囲の白人たちの意識が変わっていく感じがさわやかでした。

裕福な白人が貧しいマイノリティーを助ける映画では、去年『路上のソリスト』を見たんだけど、あれは金持ち白人のオナニーストーリーという感じであまりさわやかさがなかった。しかしこの映画はマイケルも白人達も一緒に成長して家族になっていくという一体感があって、そこが良かったのではないかと思います。サンドラ・ブロックの行動力あふれる感じもプラスに作用。

蛇足になるけど、僕が陰ながらいいなぁと思ったのが、一家の大黒柱ショーン・テューイ。リー・アンに黙って、高校にマイケルの緊急連絡先をテューイ家にするなど頼りになるパパぶりが男前でした。やっぱ男は金だなーと見ながら思った。扉をたたく人という映画で、チュニジアからの移民のために大学教授が手をつくすのを見ても思ったけど、人生には金がないとどうにもならない局面がたしかにあって、そういうときにさらっと金を出せるのが男のかっこよさだなと思った。僕もあと15年後くらいにはそういう金を持ったかっこいいおっさんになっていたいです。

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

『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で売り切れてたけど、熊本の紀伊國屋では即ゲット余裕でした。地方住まいだとネットでの売れ行きと実店舗での売れ行きにタイムラグがあるので話題の本が楽々買えてた助かります。

| @Mac/iPhone

なんか一個前の記事でTextMateマンセーみたいな記事を書いてますけど、Coda悪くはないです。というか素晴らしいです。

特に良いと思うのが、FTPクライアント機能を内蔵してるところ。普通のFTPクライアントでちまちまファイルを上げる作業は結構面倒くさいです。特にサーバーのタイムゾーンの設定がローカルのタイムゾーンと異なってたりすると、FTPクライアント上で表示される最終更新時刻が全然あてにならなくてどのファイルをアップロードすればよいのか分からなくなります。こういうとき、Codaでファイルを編集していると非常に幸せになれます。

Codaには「サイト」という機能があって、ここにFTPの情報を登録しておくとグラフィカルな感じで一覧表示してくれて、非常にシャレオツです。

1120_Coda_1.png

例えばいまサイトからportal shit!を開いたとします。するとこんな感じになる。

1120_Coda_2.png

www.portalshit.net にFTP接続しています。サイドバーに「ローカル」と「リモート」とあるのが分かるかと思います。「ローカル」を選ぶとローカルのファイルを編集でき、「リモート」を選ぶとリモートのファイルを直接編集できます。

1120_Coda_3.png

ローカルの index.php を適当に編集してみましょう。

1120_Coda_4.png

するとこんな感じで編集中のファイルには印がつく。でもまぁこんなのはよくある機能です。Codaが便利なのはここからで、ここでローカルのファイルを保存するとファイル名の横に矢印がつきます。

1120_Coda_5.png

index.php の横に矢印がついています。この矢印をクリックするとローカルで編集したファイルをリモートにアップロードしてくれるのです。これが便利。どのファイルがローカルで更新済みでどのファイルをリモートにアップロードすべきかが一目瞭然です。

加えて、「削除」「すべてを公開」なんてのが index.php の下部にありますが、こいつもすこぶる便利なんです。例えば index.php の他に複数のファイルをローカルで更新したとする。全部アップロードしなければならないのですが、ディレクトリを複数またいでいると面倒くさかったりする。しかしCodaの「すべてを公開」という機能は、矢印付きのファイルをアップロードしてくれるのです(「削除」を押すとすべての「矢印」を削除します)。非常に賢いですね。

こんなに便利なのになぜRails書くときはTextMateを使うのか。Bundles機能が便利だとかいろいろ理由はあるんですけど、このFTPクライアント機能はRails向きじゃないんですよね。Ruby on RailsはWEBrickという開発サーバーをローカルで起動してそこを見ながら開発していくので、HTMLなどの静的ファイルをぽんぽんサーバーにアップロードしていくのとは事情が異なる。CakePHPはPHPが動くなら素のApacheでテストできるので(Passengerとかいらない)、Codaで作業しながらぽんぽんアップロードしていっても問題ないわけです。だからCodaがベストマッチだった。BakeするときくらいしかTerminal.appは使わないし。

まとめると、Codaは非常に素晴らしいテキストエディターだとは思いますが、HTMLのマークアップやJavaScript、PHPなどのプログラミングには向いているものの、ハードにごりごりプログラムを書く用途には現状あんまり向いていないと感じます。もうちょいプログラマー向けに進化したら(Terminal機能を内蔵するのではなく、Terminal.appとの連携やフレームワーク特有のコマンドのサポートなど)、とても良いのではないかと思います。

しかしHTMLやCSS書くのがメインで、ときどきPHPも触るみたいな方には打って付けのエディターだと思います。$99の価値はあると個人的には感じます。

| @Mac/iPhone

CakePHPとかRailsでサイトを作るときはModel View Controllerを頻繁に行ったり来たりします。Vimは確かに素晴らしいのですが、複数のファイルを一括で開いてあちこち編集するのはさすがに苦行に近いものがあります。CodaとかTextMateはサイドにDrawerがあってファイルをブラウズしながらタブでじゃんじゃんファイルを開いていけるのでかなり便利です。Codaの例ですが、こんな感じ。

1119_coda_1.png

CakePHPでなんか作ってるときはCoda一辺倒でした。とにかく使いやすい。タブ機能だけじゃなく、ファイルを「分割ウィンドウで開く」という機能があって、例えばModelを左に、Controllerを真ん中に、Viewを右に開いて各々を突き合わせながらコードを書くことができます。

1119_coda_3.png

この機能は重宝しました。こんな感じ。

1119_coda_2.png

RailsもCodaで書こうかと思ったんだけど、弱点がある。それはRuby on Railsのシンタックスに弱いことです。まったく対応してない訳じゃないけど、.html.erb形式のファイルの色分けがいけてない。メソッドの補完とかは結構やってくれるんだけど、それよか他にやることあるんじゃね? って感じですね。

結局、RailsはTextMateで書くことにしました。

TextMateのなんとも素晴らしいところはBundles機能。これすごいですね。いま開いてるファイルのViewやModelにBundlesメニューから一発で飛んでけたり。

あとTermina.appとの連携とかKey Bindingsとか。これでマルチバイト文字にネイティブで対応してくれてたら言うことなしなんだけど。