Node.js:Tech Basics/Keyword
JavaやPHPなどと肩を並べるサーバアプリケーションの構築プラットフォームとなった「Node.js」を簡潔に解説。
「Node.js」(ノードジェイエス)とは、サーバ側で実行するネットワークアプリケーションの構築プラットフォームである。Google Chromeに搭載されたJavaScriptエンジン「V8」を採用し、JavaScriptでプログラムを記述できる。より少ないリソースで大量のリクエストを処理できるスケーラブルで軽量なアプリケーションを作りやすい。
Node.jsの特徴とメリット
Node.jsは、JavaやPHPといった従来のネットワークアプリのプラットフォームとは異なる特徴を備えている。それがメリットにつながっている。
●単一のスレッドで大量のリクエストに応える
一つ目は、単一のスレッドで大量のリクエストに応えられることだ。従来のネットワークアプリのプラットフォームでは、リクエスト数(接続数)が増えると、それを処理するプログラムのスレッドを新たに生成していくことでスケーラビリティを確保しようとする。
だがスレッドは、少しずつとはいえメモリを消費するし、またスレッドの管理などのオーバーヘッドも増加する。結果として接続数が増えるにつれてリニアにサーバのリソース消費量が増えることになりがちだ。
一方Node.jsでは、接続数が増えてもスレッドを新たに生成することなく、単一スレッドで全て処理する。その分、リソースの消費量の増加率を抑えられるため、より少ないリソースで大量のリクエストを処理できる。
●「ノンブロッキングI/O」と「イベント駆動」で処理効率を向上
二つ目は、「ノンブロッキングI/O」と「イベント駆動」を採用していることだ。従来のプラットフォームで一般的な「ブロッキングI/O」では、I/O側の処理が終わるまで、呼び出し側のスレッドは一時停止する(待たされる)。
一方、Node.jsでは「ノンブロッキングI/O」を採用していて、I/O処理の最中でも呼び出し元のスレッドは処理を再開できる。I/Oに待たされることなく、効率よく処理が続行できるということだ。
もう一つ重要なのが、イベント駆動(イベントドリブン)と呼ばれるプログラミング方式を採用していることだ。
「イベント」とは、例えばクライアントあるいはデータベースとの接続確立やその後のデータ受信といったことが挙げられる。こうしたイベントごとに、あらかじめ処理内容を定義・登録しておく(これは「コールバック関数」などと呼ばれる)。イベントが発生すると、自動的にコールバック関数が呼び出されて処理が実行される。
Node.jsに適していない用途
Node.jsは、このように従来のネットワークアプリのプラットフォームに比べてメリットがある。しかしCPUの能力を大量に消費する処理の場合、イベントを適切にさばけなくなり、効率が落ちやすい。また大きなファイルのコピーなど、時間のかかるI/Oでもイベントの処理がオーバーヘッドになって速度が下がるようだ。
単独では比較的軽量の処理が同時に多発する、といった状況でこそNode.jsは本領を発揮するといえる。
多様な環境で利用できる
Node.jsはWindows/Mac OS X/Linuxなど、主要なOS上で動作する。簡単にインストールできるように、それぞれの専用インストーラが用意されている。また、頻繁に更新されるNode.jsのバージョンを管理するツールや、効率よく開発するためのビルドツール、各種フレームワークなども充実している。
さらに、AWSやMicrosoft Azure、Google Cloud Platformなど、多くのクラウドサービスでもNode.jsはサポートされている。
開発者の確保という視点では、Node.jsには、サーバ側のプログラミングが未経験でもクライアント側のJavaScriptプログラミングを知っていれば馴染みやすい、というアドバンテージもある。既に多くの実装例があり、利用する環境も整ってきた現在、ネットワークアプリのプラットフォームの有力な選択肢として、Node.jsは知っておくべき存在といえるだろう。
■関連リンク
- 「Node.jsでサーバサイドJavaScript開発入門」連載インデックス(@IT HTML5+UXフォーラム)
- Node.jsオフィシャルサイト[英語](Node.js Foundation)
- Node.js 日本ユーザグループ
Copyright© Digital Advantage Corp. All Rights Reserved.