Heroku Express

タイトルはHello Worldのノリで。

ここ数日、HerokuでNode.jsとExpressを使ってHello worldする - アインシュタインの電話番号☎ あたりの一連のエントリを参考にしつつNode.jsをさわってみています。

Padrino、Haml、Scss、Shouldaあたり少しずつわかってきたところだったのですが、別のフレームワークなり言語なりを使うと色々な発見があっていいですね。理解をふかめるために、NodeまわりとRubyまわりで何が何に対応するのかを LL周辺を理解するための対応表 - 帰ってきた4.5帖の生活 を参考にまとめておきます。

JavascriptRuby

まずは、上記エントリからの抜粋みたいな感じで

分類 Javascript Ruby
WebアプリFW Express Sinatra
言語バージョン管理 nave, nvm rvm
モジュール管理 npm gem

大ざっぱにはこんな感じですよね。

ちなみに私の場合は、以前Powを使いはじめるときに初めてnodeをインストールしたのですが、nvmがzshと相性悪くうまく動いてくれず、その後homebrewでnodeをインストールしました。今もそうしています。ただ、現状heroku上ではnode v0.4.7固定なので、ローカルでも合わせておくためにはnaveなりnvm使ったほうがよさそう*1

Herokuで動作させる時のもろもろ

分類 Node Sinatra
Stack cedar(beta) bamboo
パッケージ管理 package.json Gemfile
テンプレート hamljs haml
CSSテンプレート sass、stylus sass

Stackについて、それぞれcedarとbamboo、誤解を恐れずにいえばVMが違う。それぞれのリファレンスは以下。そういえば、bambooはRubyのバージョンが最近デフォルトで1.9.2になりましたね。

cedarがまだbeta扱いなのもあってか、現状bambooで動いているアプリをcedarにmigrateすることはできないのでNodeを使う場合はheroku-create時に明示的にcedarを指定する必要がある。

パッケージ管理については、BudlerではGemfileに書いていたのと同じようなことをpackage.jsonに書けばよい。json手書きかよ、記号多いよ、とか思ったりすることも。BundlerでのGemfile.lockにあたるものがnpmにはないようなんだけど、そもそもGemfile.lockの意味合いがよくわかってなかったりするので必要に応じて調べようかと。

テンプレートエンジンは、SinatraでもExpress上記以外でも色々と使える。hamlとhamljsが対応していたり、sassはどっちにもあるけどExpressのほうはイマイチでStylusがよさそうだとか

そのほか雑感

Express(というかNode?)はいちいち記述量が多いような感じがしているけど、これはCoffeeScriptで改善できそう。

ふだんPadrinoを使っている身としてはexpressコマンドもほとんど違和感なく扱えていい感じ。cedarスタックから必要になったProcfileを準備する手間があるくらいで、Herokuでとりあえず動かすだけならSinatraよりも簡単かも。Sinatraは各種ファイルを準備しないとないもんね。まあ、よく使う人はテンプレートを持っていたりするだろうけど。

Padrino比だと、Padrinoのほうが便利な感じがする。PluginsがあってherokuにデプロイするためのファイルやらORM関連のファイルやら準備も簡単。それからpadrinoコマンドのほうがexpressコマンドより賢い感じ。たとえば既存プロジェクトにテンプレートエンジンを追加する場合の挙動とか。このへんはExpressはまだまだ若いプロジェクトだなーといった感。

*1:基本的にhomebrewは最新バージョン入れとけみたいな方針のため。gitで古いformulaをチェックアウトして、とかの手段はあるけど