node.js環境構築

websocketを使ったリアルタイムなアプリケーションを作りたくなったので、node.jsを始めようと思った。とりあえず、いろいろ必要なものをインストールしたので、それをメモに残しておく。

nodebrew

$ curl https://raw.github.com/hokaccha/nodebrew/master/nodebrew | perl - setup
$ vi .zprofile
export PATH=$HOME/.nodebrew/current/bin:$PATH
$ source .zprofile
  • node.jsはバージョンがどんどん更新されるようなので、Homebrewではなくパッケージマネージャーでインストールする。
  • 他にもnvmやnaveというものがあるらしいが、zshとの相性がよくないという話なので、nodebrewを選択した。

node.js & npm

$ nodebrew install stable
$ nodebrew use stable
$ node -v
v0.8.16
$ npm -v
1.1.69
  • nodebrewを使ってnode.jsとnpmをインストールする。

bower

$ npm install bower -g
  • bowerはTwitter謹製のクライアントサイドのライブラリに特化したパッケージマネージャー。
  • jQuery, underscore.js, bootstrapなどのリソースをpackage.jsonと同じようにプロジェクト毎にインストールできるのが便利。
  • Railsだとjquery-railsなどgemのなかにそれらのリソースが含まれることもあるけど、node.jsはそういうのなさそうなので、重宝しそう。

例として、いま見てた本のサンプルプロジェクトで扱うリソースをbowerで管理してみる。

// component.json

{
  "name": "fileupload",
  "version": "0.0.1",
  "main": "./public/stylesheets/style.css",
  "dependencies": {
    "jquery": "*",
    "jquery-ui": "*",
    "jquery-file-upload": "*",
    "jquery-masonry": "*",
    "fancybox": "*"
  }
}

これでbower installとすればインストール完了。

NoSQL

$ brew install couchdb
$ mkdir -p ~/Library/LaunchAgents
$ cp /usr/local/Cellar/couchdb/1.2.0/Library/LaunchDaemons/org.apache.couchdb.plist ~/Library/LaunchAgents/
$ launchctl load -w ~/Library/LaunchAgents/org.apache.couchdb.plist
  • MongoDB, Redis, CouchDBなどのNoSQLはbrewでインストールするだけ。
  • インストール後に表示されるメッセージに従って、自動起動ファイルをロードしておくことも忘れずに。

追記(2012/12/22)

node.jsでbowerを使うには

$ tree -I node_modules
.
├── app.js
├── package.json
├── public
│ ├── component.json // <- ここに配置
│ ├── components // <- ここにインストールされる
│   ├── images
│   ├── javascripts
│   └── stylesheets
│   └── style.css
├── routes
│   └── index.js
└── views
    ├── layout.jade
    └── index.jade
$ cd public
$ bower install

bower installでインストールされるライブラリは同じディレクトリ内のcomponentsというディレクトリに入る。なので、public内にcomponent.jsonを配置してbower installすればよさげ。

node-dev

$ npm install node-dev -g
$ node-dev app.js

node app.jsで起動すると、ファイルを変更するたびに再起動する必要がありめんどくさい。node-devを使うとその必要がなくなるので、とても便利。インストール必須だと思う。