なぜNode.jsでは、非同期処理を実現できるのか。そのカギとなっているのが、I/O処理のイベントを管理するライブラリ「libuv」である。

 libuvは、Node.jsと一緒にインストールされる。OSによるディスクへの書き込みや通信などの処理に関するイベントを監視し、そのステータスをNode.jsに通知する機能を持つ(図1)。これを利用することで、Node.jsのアプリケーションは書き込みや通信の終了を待つことなく、ほかの要求を処理することができるわけだ。

図1●I/O処理のイベントを管理・監視するライブラリ「libuv」の役割
非同期処理をするためには、「処理が終わったら通知する」仕組みが必要。その役割を担うのがNode.jsに組み込まれている「libuv」 である
図1●I/O処理のイベントを管理・監視するライブラリ「libuv」の役割。非同期処理をするためには、「処理が終わったら通知する」仕組みが必要。その役割を担うのがNode.jsに組み込まれている「libuv」 である。
[画像のクリックで拡大表示]

 イベントを監視するプログラムは独自に開発することももちろん可能だ。ただし、OSによってイベントの扱いについての監視の仕様が大きく異なるため、開発者にとっては負担が大きい。libuvは、LinuxやMac OS、FreeBSD、Solaris、さらにWindowsと、多くのOSをサポートする。「Node.jsをどのOSで動かしているかを意識せずに開発できるのが、大きな利点だ」と、Node.jsの技術検証を進めるインターネットイニシアティブ サービス本部アプリケーションサービス部の大津繁樹シニアエンジニアは評価する。

 ほかのソフトウエアを使う選択肢もある。例えば、 Perlを使って開発するなら「AnyEvent」、Pythonなら「Twisted」、Rubyなら「EventMachine」といった非同期処理を実現するソフトがある。それでもNode.jsに注目が集まっているのは、「開発のしやすさや、開発コミュニティーの活発さで突出しているため」とオークネット システムサービス事業部の黒柳為之氏は説明する。

JavaScriptが呼び水に

 Node.jsの二つめの特徴は、JavaScriptでコードを記述できる点である。Node.jsは米グーグルが開発したJavaScriptエンジン「V8」をベースにしたエンジンを実装しており、サーバー上でJavaScriptを実行できる。

 サーバーアプリケーションをJavaScriptで開発できることは、ユーザー企業にとって利点が多い。JavaScriptを知る技術者は多く、スクリプト言語であるため習得もしやすい。「フロントエンドの開発をしてきた技術者が、サーバー側の開発に着手するよい機会にもなる」と、ネット向け開発を手掛けるカヤック 技術部の村瀬大輔氏は指摘する。

 サイバーエージェント アメーバ事業本部技術推進本部の名村卓執行役員は、「JavaやCで非同期処理のコードを書くのには、かなりのスキルと時間が必要だ。Node.jsとJavaScriptを組み合わせれば、初心者でも簡単なチャットシステムを2~3時間で開発できる」と話す。