アインシュタインの電話番号
2011.06.20
Node.js(Express)アプリの雛形を自動生成する

昨日の記事では、Node.jsアプリでHello worldする際に、それに必要なファイル(web.js, package.json, Procfile, .gitignore)を1個ずつ新規作成してたけど、expressコマンドを使えばその雛形を自動生成できることに後から気づいた。これを使うと、web.js(=app.js)とpackage.jsonの2つは自動生成できる。Sinatra単体には無い機能だね。

あと、Sinatraアプリ開発時に使われる自動リロード機能(ShotgunやSinatraReloaderなど)に相当するnode-devをちょっと使ってみたので、それについてもメモ。

expressをグローバルインストール

expressコマンドを使うには、Expressパッケージをグローバルインストールする。

$ npm install -g express
/Users/ruedap/.node/v0.4.5/bin/express -> /Users/ruedap/.node/v0.4.5/lib/node_modules/express/bin/express
express@2.3.11 /Users/ruedap/.node/v0.4.5/lib/node_modules/express 

これでexpressコマンドが使えるようになる。

$ express -v
2.3.11

Node.js(Express)アプリの雛形を生成

expressコマンドを使って、今回は「hoge」アプリを作ってみる。

$ express hoge
   create : hoge
   create : hoge/package.json
   create : hoge/app.js
   create : hoge/pids
   create : hoge/public/javascripts
   create : hoge/public/stylesheets
   create : hoge/public/stylesheets/style.css
   create : hoge/logs
   create : hoge/views
   create : hoge/views/layout.jade
   create : hoge/views/index.jade
   create : hoge/public/images

これでhogeフォルダと、その中にNode.js(Express)アプリに必要なファイルが自動生成される。 hogeフォルダに移動して、アプリを起動するのに必要なパッケージをインストールする。ここではExpressJadeが必要。

$ cd hoge
$ npm install express jade
jade@0.12.2 ./node_modules/jade 
express@2.3.11 ./node_modules/express 
├── mime@1.2.2
├── connect@1.4.6
└── qs@0.1.0

Expressパッケージをさきほどのグローバルと今のローカルの2箇所にインストールしてるのがちょっと謎なんだけど、こうしないとアプリを動かせられなかった。最初にグローバルインストールしたExpressパッケージを使うようにもできるのかな? 要調査。

コメント欄にてnak2kさんに$ npm link expressとすれば、グローバルインストールされたパッケージへのリンクが貼られてそっちを使うようにできるよと教えてもらいました。これで2回インストールせずに済む模様。ありがとうございます。

これでもうNode.jsアプリ(雛形)を起動できるので、nodeコマンドを使って起動する。

$ node app.js

http://localhost:3000/ にアクセスして「Welcome to Express」と表示されていれば成功。Ctrl+Cでアプリを終了する。

自動リロードツールを使う

例えば、今作ったNode.js製Hogeアプリの「Welcome to Express」と表示されているところを「Welcome to Hoge」に変更したとする。Hogeアプリだからね。通常、その変更部分をアプリで確認したい場合、

  1. nodeコマンドでアプリを起動していたら、一旦終了する
  2. 再度nodeコマンドを使ってアプリを起動する

と、変更を加えるたびにアプリを再起動する必要がある。これはめんどい。これを自動で行ってくれるリロードツールがnode-devで、SinatraでいうとShotgunやSinatraReloaderに相当する。たぶん。これもExpressパッケージの時と同じように、グローバルインストールしてnode-devコマンドを使えるようにする。

$ npm install -g node-dev
/Users/ruedap/.node/v0.4.5/bin/node-dev -> /Users/ruedap/.node/v0.4.5/lib/node_modules/node-dev/node-dev
node-dev@0.1.6 /Users/ruedap/.node/v0.4.5/lib/node_modules/node-dev 

これでnode-devコマンドが使えるようになるので、node-devコマンドを使ってアプリを起動する。

$ node-dev app.js

先ほどと同じように、http://localhost:3000/ にアクセスすると「Welcome to Express」と表示されるはず。ここまでは同じ。で、さっそくapp.jsのウェルカム部分に修正を加えてみる。

app.get('/', function(req, res){
  res.render('index', {
    title: 'Hoge' // ここを変えた
  });
});

このように修正を加えて保存、http://localhost:3000/ にもう一度アクセス(既に開いていればブラウザを更新)すると「Welcome to Hoge」に変更される。便利。


CoffeeScriptはじめの一歩 - 223 Software node.jsのプログラムを自動で再起動してくれるnode-devコマンド - 大人になったら肺呼吸