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

『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が出来るっていうとやっぱなんとなくかっこいいので頑張ろうと思います。

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

結局CakePHPを触ってます。Railsはサーバー側の準備するのが無理っぽかったのであきらめました。CakePHPはPHP 4だろうがPHP 5だろうが、普通にサーバーにPHPがインストールされていれば、とりあえずファイルを落としてきて自分の開発機でBake(あるいは開発)し、ちょこちょこ設定をしてサーバーにアップロードするだけで(DBの準備とかは別に必要だけど)CMSが出来上がるのですごく良いと思いました。MySQLでもSQLiteでもPostgreSQLでも、DBに何を使おうとも記述内容は変わらないところとかすごく良いと思います。

オブジェクト指向の醍醐味みたいのはアホなので僕にはあまり分かりません。CakePHPを始める前に『たのしいRuby』を途中まで読んでたんですけど、僕はそれまでPHPとC言語をほんの少しだけ触っていて、そのとき感じた「なんかこれまで触ってきた言語と全然発想が違うなー」という驚きのようなものは感じられなかったです。ただCakePHPのMVCの考え方はRailsそのまんまみたいなのでRailsを勉強する足がかりにはなるかなと思いました。

最初はCakePHPの公式ガイドみたいのをチラ読みしてたんですけど、こういうのは本で持ってた方が使いやすいので『CakePHP1.2ガイドブック』を買いました。まだChapter 7までしか読んでないんだけど、誤植や記述の間違いが多くて困る。わりと最初の、「とりあえずBakeしてみよう」みたいなところで間違いがあるので、根気強くない人は本に書いてあるとおりにBakeできないことに絶望してCakePHP使わなくなるんじゃないかな。僕は公式フォーラムを読んだので間違いに気づきましたけど。“CakePHP1.2でモデルのアソシエーションの設定がビューに反映されない” フォーラム - CakePHP Users in Japan

CakePHP1.2ガイドブック、悪い本じゃないと思うんだけど、1.3対応版とかでは単純な誤植とか記述場所の間違いとかで読者を混乱させないようにして欲しいです。

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

静的サイトをCMSを導入して動的にする、という仕事を担当することになり、Ruby on RailsかCakePHPを使ってみようかな、と思っています。

現在の状況

僕は仕事を探し始めたときからウェブデザイナーっぽいのになりたいなー、と思っていました。でも実際仕事をしてみると、デザインというのはなかなかむずかしい。ネットが好きな素人においそれとできるものではありません。どうも僕はデザインより、コーディングの方が良いみたい。それもただHTML書くんじゃなくて、JavaScriptでサイトに動きをつけたり、PHPでちょっとしたプログラミングをする方が向いてるような気がする。もちろん20代後半でプログラミング始めたところで先は見えてるんですけど、経済学で言うところの比較優位が僕の場合はプログラミングにあるのではないか、と感じるのです。少なくともいま働いてるところでは僕はデザインやるよりプログラミングやってた方が生産性の向上に寄与できそうな感じ。

しかしながら僕が働いてるところは一日コードばっかり書いていられるようなところではないので、業務でプログラミングできる時間は一日1, 2時間くらいしかありません。それで高速に開発ができるという触れ込みのRuby on RailsとCakePHPに注目しました。

現時点での理解

Ruby on Railsはオブジェクト指向のフレームワークで、とにかく短時間で、初心者でも大規模なサイトをつくることができる、ということは分かりました。Model View Controllerとかもおぼろげながらに理解したつもり。HTMLとCSSでコンテンツと見栄えを分離させるみたいな感じのことをプログラミング言語でやろうとしているのがRailsだ、みたいなイメージをもってます。そしてそのRailsに大きな影響を受けて開発されたPHP版のオブジェクト指向フレームワークがCakePHPであるということも分かりました。

当初はRailsを身につけようと思っていたものの、PHPがある程度分かるためにCakePHPの方が素早く学べるかなー、という気もするし、CakePHPはルート権限のないサーバーでもファイルをFTPでアップロードするだけで使える、というのがなんだか良さそうです。

その一方で、PHPはすごくネットでたたかれるし、多くの人がたたくのはそれなりに理由があるはずで、PHPだけやってるとPHPのネガティブな側面がわかりにくい。だからできれば一度ほかの言語を本腰を入れて勉強してPHPを客観視してみたいとも思うのです。

これから先どういう風に飯食っていくか

コーダーとして生きていくのか、プログラマーになるのか、あるいはディレクターを目指すのかで、何をすべきか決まっていく気がします。HTMLコーディングの片手間でちょこちょこサーバーサイドのプログラミングをするんだったらPHPだけで十分な気がするし、本気でプログラマーを目指すんだったらRubyとかPerlにも手を伸ばした方がよさそう。ディレクターを目指すんだったらプログラミングはほどほどに、ディレクションを勉強すべきでしょうね。

病気とかいろいろあったとはいえ、20代半ばの人間としての方向性が固まる時期を無為に過ごしていたことが悔やまれます。RailsかCakeか、悩ましいなー。