miauのブログ

はてなダイアリー「miauの避難所」をはてなブログに移行しました

Node.js と CoffeeScript を触ってみた

Lightweight Language Planets で Node.js の話があるので、あらかじめちょっと触っておこうかなと思い立って。昨日〜今日と触っているうちにちょろい補助用バッチファイルができたりしたので、やったことをだらだらと書いておきます。


まずは Node.js のインストール。

Windows のバイナリが提供されているので、C:\node みたいなところにダウンロードした node.exe を置いてパスを通すだけ。

次に

の連載でも見ながらサーバを実装してみる。うん。ちゃんと動いた。

でもいちいちコールバックで function() {〜} とか書きたくないから CoffeeScript を導入してみようかな。

CoffeeScript をはじめるにあたって便利な情報がいろいろ載ってるのでこれを参考にしてみる。

個人的には Ruby で coffee-script-source gem を入れるのが楽だけど、ちょっと呼び出し方が煩雑な感じ。npm を Windows で使う方法ないの?と調べてみると、そういう要望はあがっていて。

7 月時点で「やりたいんだけど数ヶ月かかりそう」とのこと。

(2011-11-01 追記)
npm 側で Windows 対応された?みたいです。

指示に従って git でモジュール取得&コマンド実行すれば npm が使えるようになります。
後述するのと同じようにグローバルでインストールするなら npm install coffee-script --global とかすればいいみたいです。
(2011-11-01 追記ここまで)

でもここのコメントで npm の代替となる Python スクリプトが紹介されていて。

最新版しか入れられないとかいくつか制限あるけど、とりあえずこれを使ってみようかと。

ryppi という名前について(余談)

ryppi という名前が覚えにくいけど、Perl で作られた ryp という同種のアプリにを元にしたからのようで。なんで ryppy じゃなくて ryppi なんだろ?とか疑問は尽きませんが、ryp のほうも名前の由来を見ると、

Named after Ryan Dahl, because he complained enough to make this happen,
and in my attempt to shut him up, I accidentally built something neat
and decided that I kinda liked it.

「Ryan Dahl にちなんで名づけられた。彼がしつこいから黙らせるために作った。」??「p」は package なのか perl なのか・・・とか色々気にしたら負けっぽいです。

ryppi.py の基本的な使い方は、

python ryppi.py install coffee-script

みたいな感じらしいけど、このスクリプトはカレントディレクトリの node_modules にモジュールをインストールするらしいので、どこから実行しても ryppi.py 直下にインストールされるよう、バッチファイルを作ってみました。

取得した ryppi.py と ryppi.bat を node.exe と同じディレクトリに放り込んでおけば、

ryppi install coffee-script

で C:\node\node_modules にモジュールがインストールされます。やってることは pushd && python ryppi.py && popd だけです。

さて。無事 coffee-script はインストールされたわけですが。コマンドとしてインストールされていないので、

node C:\node\node_modules\coffee-script\bin\coffee server.coffee

みたいにして実行してやる必要があります。これは面倒なので、こちら用の .bat も作りました。

C:\node にでも突っ込んでください。こちらは (.bat のパス)\node_modules\coffee-script\bin\coffee を実行するだけです。本当はこの .bat 生成まで ryppi でできると親切なんですけど、npm の Windows 対応はこの辺までちゃんとやってくれるみたいだし、とりあえずそれまでの辛抱ということで放置しています。

これで CoffeeScript は気軽に使えるようになって。function(req, res) {〜} みたいなところは (req, res) -> 〜 と書けるようになってちょっとすっきり。

常用するなら coffee --watch なんかも使いたくなりそうだけど、こちらは残念ながら動作せず。Node.js の問題っぽいので、いずれ解決するでしょう。