node.js勉強中です。先人の知恵さまのサイトを見る日々が続きます。色んなサンプルサイトで使われいているexpress。雛形を作成してくれる便利なフレームワークです。このexpressを使って雛形をインストールするわけですが、先人の知恵さまサイトではejsが使われてて、自分の環境では何をやっても絶対にjadeがインストールされてしまっていました。今回はなんでそれが起きたのかと、expressでejsがインストールされない方へ向けての対処法を書きます。

※2012/08/18追記

express version 3.xから、ejsの指定の方法が変わったようです。tamaさんにご教授頂きました。ありがとうございます!

express version 3.xでejsを指定する方法

version 2.xまでは、express -t ejsと指定する方法でしたが、version 3.x以降は、express -eでejsが指定されるみたいです。

//バージョンの確認。
$ express version
3.0.0rc3
 
//ejsを指定する。
$ express -e sample
 
   create : sample
   create : sample/package.json
   create : sample/app.js
   create : sample/public
   create : sample/public/javascripts
   create : sample/public/images
   create : sample/public/stylesheets
   create : sample/public/stylesheets/style.css
   create : sample/routes
   create : sample/routes/index.js
   create : sample/views
   create : sample/views/index.ejs
 
   install dependencies:
     $ cd sample && npm install
 
   run the app:
     $ node app

ちゃんとejsがインストールされました!^▽^

http://expressjs.com/guide.html
ここに載ってました。^-^;

ここから下は古いバージョンに戻してejsをインストールする方法なので見なくても大丈夫です。

expressでejsをインストールしてみる。

「sample」という名前のフォルダーを作って、その中に雛形を作るコマンドです。-tはテンプレートを選択するオプション。ejsを選択しています。

$ express sample -t ejs 
 
   create : sample
   create : sample/package.json
   create : sample/app.js
   create : sample/public
   create : sample/public/javascripts
   create : sample/public/images
   create : sample/public/stylesheets
   create : sample/public/stylesheets/style.css
   create : sample/routes
   create : sample/routes/index.js
   create : sample/views
   create : sample/views/layout.jade
   create : sample/views/index.jade
 
   install dependencies:
     $ cd sample && npm install
 
   run the app:
     $ node app

あれ?jadeが入っちゃった。おかしいなぁー。node.jsはバージョンが違うだけで大きく仕様が変わってしまう認識。こういう時はexpressのバージョンを疑いました。

expressのバージョンを確認。

$ express -v
error: unknown option `-v'

あれ?なんで使えないの??よし、versionとちゃんとしてみよう。

$ express version
3.0.0beta7

bata7と表示されてしまいました。β版。うーん、怪しい。。。

expressのバージョンを2.xに下げてインストールし直す。

2012年7月29日現時点で、expressをインストールすると、expressのバージョンが3.0.0rc1でインストールされることを確認しました。なので、expressのバージョンを2に下げてみます。install expressの末尾に@をつけてバージョーンを指定します。2.5.8や2.5.11でいいと思います。

//ver.3.0.0rc1がインストールされてしまう。
$ npm install -g express 
 
//バージョン指定
$ npm install -g express@2.5.8
 
//2だけでもOK。この場合、2.5.11がインストールされました。
$ npm install -g express@2

さて、インストールしなおしてみます。

$ npm install express@2.5.8 -g                                                  
 
npm http GET https://registry.npmjs.org/express
npm http 304 https://registry.npmjs.org/express
npm ERR! error rolling back express@3.0.0rc1 Error: EPERM, chmod '/opt/local/bin/express'
 
npm ERR! Error: EPERM, chmod '/opt/local/bin/express'
npm ERR! 
npm ERR! Please try running this command again as root/Administrator.
npm ERR! 
npm ERR! System Darwin 10.8.0
npm ERR! command "node" "/opt/local/bin/npm" "install" "express" "-g"
npm ERR! cwd /Users/cotapon
npm ERR! node -v v0.6.18
npm ERR! npm -v 1.1.24
npm ERR! path /opt/local/bin/express
npm ERR! code EPERM
npm ERR! message EPERM, chmod '/opt/local/bin/express'
npm ERR! errno {}
npm ERR! 
npm ERR! Additional logging details can be found in:
npm ERR!     /Users/cotapon/npm-debug.log
npm not ok
npm not ok

「npm ERR! Error: EPERM, chmod ‘/opt/local/bin/express’」ってことは権限がないってことですね。 sudoを使ってインストールします。パスワードを聞かれるので、入力しているとき文字は表示されませんが、入力したらEnterを押します。

$ sudo npm install -g express@2                                     
Password:
npm http GET https://registry.npmjs.org/express
npm http 304 https://registry.npmjs.org/express
npm http GET https://registry.npmjs.org/connect
npm http GET https://registry.npmjs.org/mime/1.2.4
npm http GET https://registry.npmjs.org/qs
npm http GET https://registry.npmjs.org/mkdirp/0.3.0
npm http 304 https://registry.npmjs.org/connect
npm http 304 https://registry.npmjs.org/mime/1.2.4
npm http 304 https://registry.npmjs.org/qs
npm http 304 https://registry.npmjs.org/mkdirp/0.3.0
npm http GET https://registry.npmjs.org/formidable
npm http 304 https://registry.npmjs.org/formidable
/opt/local/bin/express -> /opt/local/lib/node_modules/express/bin/express
express@2.5.11 /opt/local/lib/node_modules/express
├── qs@0.4.2
├── mime@1.2.4
├── mkdirp@0.3.0
└── connect@1.9.2 (formidable@1.0.11)

無事にインストールできたみたいですね。

$ express -v
2.5.11

さっきは「-v」はエラーでしたが、今度はちゃんとバージョンが確認できました。

今度こそ、expressでejsの雛形を作る!

$ express sample -t ejs  
 
   create : sample
   create : sample/package.json
   create : sample/app.js
   create : sample/public
   create : sample/public/javascripts
   create : sample/public/images
   create : sample/public/stylesheets
   create : sample/public/stylesheets/style.css
   create : sample/routes
   create : sample/routes/index.js
   create : sample/views
   create : sample/views/layout.ejs
   create : sample/views/index.ejs
 
   dont forget to install dependencies:
   $ cd sample && npm install

ちゃんとejsが認識されてますね。最初はejsのところがjadeだったと思います。さて、最後の仕上げに取り掛かります。「sapmle」というフォルダーに移動してインストールすれば雛形の完成です。

$ cd sample
$ npm install  
 
npm http GET https://registry.npmjs.org/express/2.5.11
npm http GET https://registry.npmjs.org/ejs
npm http 304 https://registry.npmjs.org/ejs
npm http 200 https://registry.npmjs.org/express/2.5.11
npm http GET https://registry.npmjs.org/express/-/express-2.5.11.tgz
npm http 200 https://registry.npmjs.org/express/-/express-2.5.11.tgz
npm http GET https://registry.npmjs.org/mkdirp/0.3.0
npm http GET https://registry.npmjs.org/mime/1.2.4
npm http GET https://registry.npmjs.org/qs
npm http GET https://registry.npmjs.org/connect
npm http 304 https://registry.npmjs.org/mime/1.2.4
npm http 304 https://registry.npmjs.org/mkdirp/0.3.0
npm http 304 https://registry.npmjs.org/connect
npm http 304 https://registry.npmjs.org/qs
npm http GET https://registry.npmjs.org/formidable
npm http 304 https://registry.npmjs.org/formidable
ejs@0.8.0 ./node_modules/ejs
 
express@2.5.11 ./node_modules/express
├── qs@0.4.2
├── mime@1.2.4
├── mkdirp@0.3.0
└── connect@1.9.2 (formidable@1.0.11)

できたviewsディレクトリの中を除くと、「index.ejs」と「layout.ejs」ができていると思います。

最後に僕はこう思います。

今回はexpressでejsがインストールできるようにする方法でした。 でも、jadeが使えるようになれば、こんなことしなくてもいいはず。 しかし、ejsやjadeだけではなくHamlなんかもありますし、 これから勉強するにもどれを使って勉強すればいいのかわかりません。 JavaScriptでも、jQuery、prototype.js、CoffeeScriptなど、いろんな方法があり、 今ではほとんどjQueryが主流になっていると思います。 ejsを身に着けてもjadeが主流になったらどうしよう・・・。 と悩んでしまうかもしれません。 でも、1つ言えるのは、迷ってて手を動かさないよりかはマシと僕は思うので、 意味もないかもしれませんが、expressでejsをインストールする方法をまとめました。 ejsでnode.jsのサンプルを書いてくれてる先人の知恵の皆様に感謝。 僕のような迷える子羊さまが、このページを見て少しでもお役に立てることを願っています。