node.jsに入門してみる。~インストールからHelloWorldまで編~

久しぶりの技術屋っぽいエントリでわくわくしております。

最近流行っているらしい node.js を試してみた。

お試し環境構築

例のごとく、使い捨てのVMware×Ubuntu環境を使って実験する。

ただし、node.js はウェブサーバーなので、Apache上で動作させるものではない。
Apacheと同居させることもできるようだが、今回は初めてなのでシンプルに行きたい。Apacheはインストールせず、ポート80で node.js を稼動させることにする。

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

問題なさそう。

参考ページの手順では、npmnave のセットアップについて説明があるが、今回はスキップ。

node.js で HelloWorld!! してみる

公式のドキュメント内 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コマンドを抜けると、ブラウザからもアクセスできなくなる。

example.js を読んでみる

最初に、'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);

このコールバック関数は、requestresponse の2つの引数を受け取っている。クライアントからのリクエストがあるごとに実行されそうな感じだ。
おそらく、request にはクライアントからのリクエストヘッダーに書かれた内容が格納されているのだろう。response には応答に関する機能が詰め込まれてそうな雰囲気だ。ドキュメントによると、request は http.ServerRequest のインスタンス、 response は http.ServerResponse のインスタンスです とある。

http.createServer().listen( Number ) は、スタンバイするポート番号を指示するメソッドのようだ。ここに 80 と書くと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と戯れてみようと思う。

# んー、やっぱソース書くのはたのしいな~。


プロフィール

コヤナギ トモヤ

まったりウェブ系コーダーしてます。PHP製静的CMS Pickles 2 を開発しています。

RSSフィード

  • このサイトは、 コヤナギ トモヤ の個人サイトです。
  • 個人的な主張や、活動の記録などを掲載しています。 所属する企業、団体、その他の意見や立場を代表するものではありません。
  • 掲載された内容は古くなっている可能性があります。 特に古い記事では、現在の筆者の考えと異なる主張をしていることがありますが、記録としてそのまま残しております。 予めご了承ください。
ページの先頭へ戻る