公開日: 2011年08月18日(Thu)
久しぶりの技術屋っぽいエントリでわくわくしております。
最近流行っているらしい node.js を試してみた。
例のごとく、使い捨てのVMware×Ubuntu環境を使って実験する。
ただし、node.js はウェブサーバーなので、Apache上で動作させるものではない。
Apacheと同居させることもできるようだが、今回は初めてなのでシンプルに行きたい。Apacheはインストールせず、ポート80で node.js を稼動させることにする。
まずは、こちらの記事の資料1. node.jsとnpmのインストールを参考に node.js をインストールしてみる。
Linux用とWindows用の手順を用意してくれているが、今回はサーバーがUbuntuなので、Linux用の手順に従う。
$ sudo apt-get install build-essential libssl-dev curl
$ mkdir tmp
$ cd tmp
$ wget http://nodejs.org/dist/node-v0.4.10.tar.gz
$ tar -xvzf node-v0.4.10.tar.gz
$ cd node-v0.4.10
$ ./configure
$ make
$ sudo make install
元の記事ではv0.2.3を入れているが、現在最新の安定版が0.4.10のようなので、そこだけ書き換えている。
特になんの問題もなく、すんなり通った。
一応、バージョン情報を表示してインストールされたことを確認してみる。
$ node -v
v0.4.10
問題なさそう。
参考ページの手順では、npm
や nave
のセットアップについて説明があるが、今回はスキップ。
公式のドキュメント内 Synopsis(概要) のページを参考に、HelloWorld!アプリケーションを作ってみる。
どうも、node.js では、Apacheのように DocumentRoot のような概念はないらしい。
適当なフォルダを作って、適当な名前のJavaScriptファイルを作成する。ここではドキュメントに従い、example.js
とした。
$ cd
$ mkdir tekitou
$ cd tekitou
$ touch example.js
example.js
を編集。
$ vi example.js
サンプルのソースをそのままペーストしてみた。
var http = require('http');
http.createServer(function (request, response) {
response.writeHead(200, {'Content-Type': 'text/plain'});
response.end('Hello World\n');
}).listen(8124);
console.log('Server running at http://127.0.0.1:8124/');
そして、次のコマンドを実行。
$ node example.js
すると、「Server running at http://127.0.0.1:8124/」と表示され、そのままスタンバイに入る。この状態で、ブラウザから http://127.0.0.1:8124/ にアクセスして、「Hello World」と表示されたら成功。
ターミナルで Ctrl+C して node
コマンドを抜けると、ブラウザからもアクセスできなくなる。
最初に、'http' という何かを require()
している。require()
だから、PHP的に解釈すると、外部のソースを読み込んでいるんだろうか。
ドキュメントによると、require モジュールを指します。
とある。'http' という名前のモジュールをロードしている、ということのようだ。
var http = require('http');
オブジェクト http
がインスタンス化されたっぽい。
次に、 http.createServer( callback )
が実行されている。
http.createServer(function (request, response) {
response.writeHead(200, {'Content-Type': 'text/plain'});
response.end('Hello World\n');
}).listen(8124);
このコールバック関数は、request
と response
の2つの引数を受け取っている。クライアントからのリクエストがあるごとに実行されそうな感じだ。
おそらく、request
にはクライアントからのリクエストヘッダーに書かれた内容が格納されているのだろう。response
には応答に関する機能が詰め込まれてそうな雰囲気だ。ドキュメントによると、request は http.ServerRequest のインスタンス、 response は http.ServerResponse のインスタンスです
とある。
http.createServer().listen( Number )
は、スタンバイするポート番号を指示するメソッドのようだ。ここに 80 と書くと80番で立ち上がる。(ドキュメントはたぶんコレ)
sudo
をつけて $ sudo node example.js
にしたら立ち上がった。たぶん、node.js 側の問題ではないと思う。
最後に console.log()
メソッドが実行されている。
console.log('Server running at http://127.0.0.1:8124/');
ここに渡された文字列はターミナルに出力されるようだ。デバッグやログを残すなどに使うのだろう。
ドキュメントによると、改行を伴って標準出力へプリントします。 この関数は printf() のように複数の引数を受け付けます
とある。
まだなんの役にも立たない状態ではあるが、node.js サーバを立ち上げることには成功したようだ。
この段階では、リクエストに応じて単純にHTMLソースを返すだけだが、node.js の醍醐味らしい WebSocket や XHR2 を使ったサンプルを動かすところまではやってみたいところ。でもその前に、ドキュメントとにらめっこしながら、ネイティブな機能についてある程度慣れておきたい。
引き続き、サーバーサイドJavaScriptと戯れてみようと思う。
# んー、やっぱソース書くのはたのしいな~。
公開日: 2011年08月18日(Thu)