Narwhal事始め
きっかけ
id:hagino_3000:20100207さんのエントリを見て、かなり興味を持ったのでぼちぼち。
Narwhal?
Narwhalは、CommonJSの実装の一つで、JavaScriptエンジンとして現在のところRhinoをサポートしてます。
他のJSエンジンにも対応中の様です。
Narwhalのドキュメントを訳しながら、やっていきたいと思います。
拙訳ですが、bitbucketにおいてあります。
ドキュメントには、Sphinxを利用してます。
Sphinxについては、@shibukawaさん翻訳のドキュメントを参照ください。
とりあえず、今回はクイックスタートということでNarwhalのダウンロードから、初めてのWebサーバを立てるところまでやってみます。
Narwhalのダウンロード〜インストール
$ 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!が表示されます。
続く、、