Heroku Express
タイトルはHello Worldのノリで。
ここ数日、HerokuでNode.jsとExpressを使ってHello worldする - アインシュタインの電話番号☎ あたりの一連のエントリを参考にしつつNode.jsをさわってみています。
Padrino、Haml、Scss、Shouldaあたり少しずつわかってきたところだったのですが、別のフレームワークなり言語なりを使うと色々な発見があっていいですね。理解をふかめるために、NodeまわりとRubyまわりで何が何に対応するのかを LL周辺を理解するための対応表 - 帰ってきた4.5帖の生活 を参考にまとめておきます。
Javascript と Ruby
まずは、上記エントリからの抜粋みたいな感じで
分類 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をチェックアウトして、とかの手段はあるけど