Node's goal is to provide an easy way to build scalable network programs.

JavaScriptフレームワークやHTML5テクニックの紹介とともにNode.jsが取り上げられることが増えている。Node.jsはChromeのJavaScriptエンジンV8を活用して開発が進められているサーバサイドプラットフォーム。JavaScriptを使ってサーバサイドで動作するアプリケーションを簡単に開発できる。Node.jsには次のような特徴がある。

  • JavaScriptを使ってサーバサイドアプリケーションを開発できる。
  • スケーラビリティの高いネットワークプログラムを高いスキルを要求されずに開発することが可能。
  • 高い並列性を実現。内部の実装はepoll(7)、kqueue(2)、/dev/poll、select(2)などOSごとに提供されているポーリング機能を使い、スレッドは使っていない。結果として、スレッドベースのサーバと比較してコネクションあたりのメモリ消費が少なく、かつ高速に動作する。プロセスデッドロックも発生しない。
  • 活発に開発が進められているChrome JavaScriptエンジンV8の開発成果の恩恵を受けられる。

Node.jsはMac OS X、Linux、FreeBSD、OpenBSD、Windows/Cygwinなどで動作する。Node.jsの説明を参考にソースコードを取得して自力でビルドしてインストールするか、OSの提供しているパッケージ管理システム経由でインストールすればいい。最新開発版を利用するならFreeBSDのPorts Collection (www/node-devel)からインストールするのが簡単。安定版ならMac OS XのMacPorts経由でもいい。ビルドするならUbuntuが簡単。ビルドにはPython 2.4+と場合によってはOpenSSLが必要。

Node.jsに掲載されているサンプルがNode.jsの特徴をつかむ上でわかりやすい。たとえばテキストを返すだけのHTTPサーバは次のように作成する。

var http = require('http');
http.createServer(function (req, res) {
  res.writeHead(200, {'Content-Type': 'text/plain'});
  res.end('Hello World\n');
}).listen(8124, "127.0.0.1");
console.log('Server running at http://127.0.0.1:8124/');

Node.jsのサンプルとして公開されているHTTPサーバを起動

ブラウザから動作させたサンプルサーバへアクセス

動作しているサーバへは並列アクセスが可能。OSの効率のいい機能を使って並列接続を処理してくれる。HTTP接続はNode.jsが提供しているもっとも代表的なクラス。ほかにもソケットレベルでの処理も提供している。ソケットを使ってEchoサーバを作成するサンプルは次のとおり。掲載してあるソースコードはNode.jsに掲載されているサンプルにログを出力する処理を追加したもの。ソケットベースで動作するサーバにはtelnet(1)でアクセスすればいい。

var net = require('net');
net.createServer(function (socket) {
  socket.write("Echo server\r\n");
  socket.on("data", function (data) {
    socket.write(data);
  });
}).listen(8124, "127.0.0.1");
console.log('Server running at 127.0.0.1, 8124');

Node.jsのサンプルとして公開されているEchoサーバを起動

telnet(1)でEchoサーバへアクセスして動作を確認

サーバサイドで動作するアプリケーションの開発にはJavaを使うことが多い。Webページの表示に強く関係付けられている場合にはPHPを使うことが多く、ほかにもRuby、Python、Perlなどのプログラミング言語を使ってサーバサイドのアプリケーションは開発されている。処理速度が必要になるケースではC/C++への置き換えもおこなわれる。

Node.jsはJavaScriptを使ったプログラミングを提供してくれるため、WebページやWebアプリケーションを開発するフロントエンドプログラマがサーバサイドプログラムの開発も実施しやすくなるという利点がある。基盤技術として採用されているV8はChromeの開発とともに性能を向上させており、今後も高速化が期待できる。APIも充実しつつあり、手軽にサーバサイドアプリケーションを開発する技術としてNode.jsは興味深いプロダクトに成長しつつある。