Node.jsTech Basics/Keyword

JavaやPHPなどと肩を並べるサーバアプリケーションの構築プラットフォームとなった「Node.js」を簡潔に解説。

» 2016年01月08日 05時00分 公開
[島田広道デジタルアドバンテージ]
Tech Basics/Keyword
Windows Server Insider


「Tech Basics/Keyword」のインデックス

連載目次

 「Node.js」(ノードジェイエス)とは、サーバ側で実行するネットワークアプリケーションの構築プラットフォームである。Google Chromeに搭載されたJavaScriptエンジン「V8」を採用し、JavaScriptでプログラムを記述できる。より少ないリソースで大量のリクエストを処理できるスケーラブルで軽量なアプリケーションを作りやすい。

サーバ側のネットワークアプリをJavaScriptで記述できる「Node.js」 サーバ側のネットワークアプリをJavaScriptで記述できる「Node.js」

Node.jsの特徴とメリット

 Node.jsは、JavaやPHPといった従来のネットワークアプリのプラットフォームとは異なる特徴を備えている。それがメリットにつながっている。

●単一のスレッドで大量のリクエストに応える

 一つ目は、単一のスレッドで大量のリクエストに応えられることだ。従来のネットワークアプリのプラットフォームでは、リクエスト数(接続数)が増えると、それを処理するプログラムのスレッドを新たに生成していくことでスケーラビリティを確保しようとする。

従来のプラットフォームではスレッド数を増やしてスケーラビリティを確保している 従来のプラットフォームではスレッド数を増やしてスケーラビリティを確保している

 だがスレッドは、少しずつとはいえメモリを消費するし、またスレッドの管理などのオーバーヘッドも増加する。結果として接続数が増えるにつれてリニアにサーバのリソース消費量が増えることになりがちだ。

 一方Node.jsでは、接続数が増えてもスレッドを新たに生成することなく、単一スレッドで全て処理する。その分、リソースの消費量の増加率を抑えられるため、より少ないリソースで大量のリクエストを処理できる

Node.jsは単一のスレッドで大量のリクエストを処理する Node.jsは単一のスレッドで大量のリクエストを処理する

●「ノンブロッキングI/O」と「イベント駆動」で処理効率を向上

 二つ目は、「ノンブロッキングI/O」と「イベント駆動」を採用していることだ。従来のプラットフォームで一般的な「ブロッキングI/O」では、I/O側の処理が終わるまで、呼び出し側のスレッドは一時停止する(待たされる)。

ブロッキングI/Oの例 ブロッキングI/Oの例

 一方、Node.jsでは「ノンブロッキングI/O」を採用していて、I/O処理の最中でも呼び出し元のスレッドは処理を再開できる。I/Oに待たされることなく、効率よく処理が続行できるということだ

Node.jsでのノンブロッキングI/Oの例 Node.jsでのノンブロッキングI/Oの例

 もう一つ重要なのが、イベント駆動(イベントドリブン)と呼ばれるプログラミング方式を採用していることだ。

 「イベント」とは、例えばクライアントあるいはデータベースとの接続確立やその後のデータ受信といったことが挙げられる。こうしたイベントごとに、あらかじめ処理内容を定義・登録しておく(これは「コールバック関数」などと呼ばれる)。イベントが発生すると、自動的にコールバック関数が呼び出されて処理が実行される。

Node.jsに適していない用途

 Node.jsは、このように従来のネットワークアプリのプラットフォームに比べてメリットがある。しかしCPUの能力を大量に消費する処理の場合、イベントを適切にさばけなくなり、効率が落ちやすい。また大きなファイルのコピーなど、時間のかかるI/Oでもイベントの処理がオーバーヘッドになって速度が下がるようだ。

 単独では比較的軽量の処理が同時に多発する、といった状況でこそNode.jsは本領を発揮するといえる。

多様な環境で利用できる

 Node.jsはWindows/Mac OS X/Linuxなど、主要なOS上で動作する。簡単にインストールできるように、それぞれの専用インストーラが用意されている。また、頻繁に更新されるNode.jsのバージョンを管理するツールや、効率よく開発するためのビルドツール、各種フレームワークなども充実している。

 さらに、AWSMicrosoft AzureGoogle Cloud Platformなど、多くのクラウドサービスでもNode.jsはサポートされている。


 開発者の確保という視点では、Node.jsには、サーバ側のプログラミングが未経験でもクライアント側のJavaScriptプログラミングを知っていれば馴染みやすい、というアドバンテージもある。既に多くの実装例があり、利用する環境も整ってきた現在、ネットワークアプリのプラットフォームの有力な選択肢として、Node.jsは知っておくべき存在といえるだろう。

「Tech Basics/Keyword」のインデックス

Tech Basics/Keyword

Copyright© Digital Advantage Corp. All Rights Reserved.

RSSについて

アイティメディアIDについて

メールマガジン登録

@ITのメールマガジンは、 もちろん、すべて無料です。ぜひメールマガジンをご購読ください。