JavaScriptでWebアプリを開発できる「Node.js」活用入門

 昨今注目を集めているWebアプリケーションプラットフォームの1つに、「Node.js」 がある。Node.jsはJavaScriptでWebアプリケーションのサーバーサイドプログラムを実装できる技術で、高いスケーラビリティが特徴だ。本記事ではNode.jsの基本的な知識やフレームワーク「express」を用いたWebアプリケーション作成方法を紹介する。また、Webブラウザ上で動作するIDE「Cloud9 IDE」を用いてNode.jsアプリケーションをWindows Azureで実行させる方法についても解説する。

JavaScript、そして非同期・シングルスレッドで注目を浴びるNode.js

 Node.jsはJavaScriptでWebアプリケーションのサーバーサイドプログラムを実装できる技術で、開発プロジェクトのスタートは2009年と、比較的その歴史は浅い。しかし、ここ数年でプロジェクトは急成長し、急激に注目を浴びるようになっている(図1)。

図1 Node.jsはすでに多くの企業で採用されている
図1 Node.jsはすでに多くの企業で採用されている

 Node.jsがなぜ注目を浴びているのかというと、サーバーサイドプログラムをJavaScriptで実装できるという点もさることながら、最近のトレンドである「イベントループ」による非同期・シングルスレッド処理を実現している、という点が大きい。

 ApacheやIISなどのWebサーバーは、複数のプロセス/スレッドを作成してリクエストを処理している。しかし、このアーキテクチャでは多くのリクエストを処理するためには多くのプロセス/スレッドが必要となる。たとえば1リクエストを1つのスレッドで処理する場合、1000リクエストを同時処理するには1000スレッドが必要となり、1スレッドが2MBのメモリを使用すると仮定するとトータルで2GBのメモリが必要となる。また、1000スレッドにもなるとスレッド生成処理の負荷も無視できない。

 このような制限から、一般的なサーバーで処理できるリクエスト数は1台あたり多くても数万程度に制限される。一方、Node.jsはシングルスレッドでリクエストを処理するため、理論上このような制限は受けない。Node.jsはスレッド数の増大による限界を超えることができるアーキテクチャとして注目を浴びているのである。

 Node.jsは当初はLinux/UNIXプラットフォームに向けて開発が行われ、Windows版はUNIX互換APIを提供するCygwinを使用していた。しかし2011年11月にリリースされたNode.js 0.6.0ではWindows環境を積極的にサポートするよう変更が加えられ、Cygwinに依存しない構造になっただけでなく、性能も向上している。この背景にはMicrosoftによるプロジェクトへの支援があり、MicrosoftはNode.jsについて、.NETやJava、PHPに並ぶWindows Azureの開発言語の1つとしてアピールを行っている(Windows AzureのNode.jsデベロッパーセンター)。

  本記事ではこのNode.jsを利用するための基本的な知識や、Node.jsを使った簡単なWebアプリケーションの作成などについて解説する。また、Node.jsを用いたサンプルアプリケーションとして、Bing Mapsを使った経路距離測定Webアプリケーション「newb map」を紹介する(図2)。

図2 今回紹介するサンプルアプリケーション「newb map」
図2 今回紹介するサンプルアプリケーション「newb map」

 さらに、最近になって積極的なNode.jsサポートを行っているWindows Azureへのデプロイについても解説する。Windows AzureはWindowsベースのクラウドプラットフォームだが、Windows Azureに容易にNode.jsをデプロイできるツールキットがMicrosoftから提供されているほか、Webベースの統合開発環境(IDE)である「Cloud9 IDE」を利用することで、Windows環境なしにWindows Azureへのデプロイが可能である。今回はこのCloud9 IDEを使ったNode.jsアプリケーションのデプロイについて紹介する。

 なお、Windows Azureは90日間無料で利用できる「Windows Azure 3か月無料評価版」が用意されている(無料評価版申込みページ)。Windows Azureへのデプロイを試して見たい人は、こちらを利用すると良いだろう。

Node.jsのアーキテクチャ

 Webサーバー側で実行させるプログラムをJavaScriptで実装する、という考え方はNode.js以前にもあり、これらは「サーバーサイドJavaScript」などと呼ばれていた。IISなど実際にこれに対応したWebサーバーもいくつか存在する。一方、Node.jsはこれらとはややアプローチが異なり、WebサーバーからNode.jsを呼び出して実行するのではなく、Node.js自体に含まれるWebサーバーを利用するという形になっているWebアプリケーションだけでなく、コンソールアプリケーションやHTTP以外のサービスを提供するサーバーなどの構築も可能だ。また、RubyにおけるirbやPythonの対話環境などに相当する対話環境も備えており、対話的にJavaScriptコードを実行することもできる(図3)。

図3 Node.jsの対話環境
図3 Node.jsの対話環境

 Node.jsではJavaScript標準の型や数学関数、正規表現処理、日付・時刻処理を行うクラスが利用できるほか、I/Oやプロセス処理、HTTP/HTTPS処理、イベントハンドリング処理などを行うためのクラスも提供されている。利用できるクラス一覧はNode.jsのマニュアルに列挙されているが、たとえばHTTPサーバーを実装するにはhttp.Serverクラスを利用することになる。HTTP以外のソケットを扱うnet.Serverクラスも用意されており、これを利用することでHTTP以外を扱うサーバーを実装することも可能だ。ファイルシステムにアクセスするfsモジュールや、Readlineを利用するためのreadlineモジュールなども用意されており、クライアントアプリケーションの作成もできる。

 さらにNode.jsでは標準モジュールだけでなく、第三者が作成したモジュールも多数用意されている。Node.jsの配布パッケージにはパッケージマネージャ「npm」が同梱されており、これを使用してリポジトリからNode.js用パッケージのダウンロードやインストールが可能である。npmのリポジトリにはすでに8600以上のパッケージが登録されている(図4)。

図4 Node.jsの配布パッケージにはパッケージマネージャ「npm」が同梱されている
図4 Node.jsの配布パッケージにはパッケージマネージャ「npm」が同梱されている

Node.jsのインストール

 Node.jsはNode.jsのWebサイトで公開されている。記事執筆時である2012年4月現在はバージョン0.7系と0.6系が公開されており、0.6系が安定版、0.7系が開発版、という位置付けだ。開発版はまだ対応していないモジュールなどがあるため、特に理由がないのであれば安定版をお勧めする。

 Node.jsのWebサイトでは、Windows版およびMac OS X版のインストーラとソースコードが配布されている。これにはNode.js本体のほか、パッケージマネージャであるnpmも同梱されており、WindowsおよびMac OS X環境ではこのインストーラを使ってインストールするだけで、基本的なNode.jsの実行環境が完成する。また、Linuxの場合はソースコードからインストールするか、もしくは各ディストリビューションのパッケージマネージャ経由でインストールする。

 なお、下記の実行例などではWindows環境でNode.jsを使用しているが、Windowsに依存する機能などは使用していないので、これ以外のプラットフォームでも同様の操作でNode.jsや周辺モジュールなどを利用できるはずだ。