Narwhal事始め

きっかけ

id:hagino_3000:20100207さんのエントリを見て、かなり興味を持ったのでぼちぼち。

Narwhal?

Narwhalは、CommonJSの実装の一つで、JavaScriptエンジンとして現在のところRhinoをサポートしてます。
他のJSエンジンにも対応中の様です。


Narwhalのドキュメントを訳しながら、やっていきたいと思います。
拙訳ですが、bitbucketにおいてあります。
ドキュメントには、Sphinxを利用してます。


Sphinxについては、@shibukawaさん翻訳のドキュメントを参照ください。


とりあえず、今回はクイックスタートということでNarwhalのダウンロードから、初めてのWebサーバを立てるところまでやってみます。

Narwhalのダウンロード〜インストール

zip、かtarをダウンロードするか
gitで取得します。

$ git clone git://github.com/tlrobinson/narwhal.git


任意の場所にダウンロードしたディレクトリを配置して、PATHを通して、Terminalを再起動。

$ export PATH=$PATH:~/narwhal/bin

jsコマンドを打つと、Rhinoが起動するようになります。jsコマンドの代わりにnarwhalコマンドでもOKです。

$ js
Rhino 1.7 release 3 PRERELEASE 2009 12 12
js>

$ narwhal
Rhino 1.7 release 3 PRERELEASE 2009 12 12
js>

js --helpでNarwhalのオプションを調べます。

ダウンロードしたnarwhalの中には、サンプルのアプリケーションがあるので、実行してみます。

$ js narwhal/examples/hello
Hello, World!

初めてのwebサーバ

ひとまず、"hello-web"プロジェクトを作ります。

$ tusk init hello-web

Tuskは、Narwhalと一緒にインストールされる、パッケージマネージャです。
tusk init [PROJECT NAME]で、プロジェクトのディレクトリが作成されるので
その中に移動すると、[README、bin/、lib/、narwhal.conf、 package.json]が出来ています。


ここで、seaを使って、仮想環境としてプロジェクトに入ります。

$ bin/sea

TuskでJack(JSGIの実装)をインストールすると依存関係を解消しつつ、Jackをインストールしてくれます。

$ tusk install jack

Tuskでインストールしたパッケージは、プロジェクト内のpackages/jack以下に配置され、sea内にいる間、Narwhalは、インストールしたパッケージをロードしてくれます。


続いて、jackconfig.jsの作成。Content-Lengthヘッダを自動的に付加する様にします。

exports.app = function(env) {
  var text = "Hello, Web!";
  return {
    status: 200,
    headers: { "Content-Type": "text/plain", "Content-Length": String(text.length) },
    body: [text]
  };
};


jackupでアプリケーションを実行。

$ jackup
Loading configuration module at ../hello-web/jackconfig
Jack is starting up using Simple on port 8080
Deprecated: URI.parse is deprecated, use require('uri').parse)
localhost - - [09/Feb/2010 21:11:23] "GET / HTTP/1.1" 200 11
Deprecated: URI.parse is deprecated, use require('uri').parse)
localhost - - [09/Feb/2010 21:11:23] "GET /favicon.ico HTTP/1.1" 200 11

http://localhost:8080/にアクセスすると、Hello, Web!が表示されます。


続く、、