Node.js

出典: フリー百科事典『ウィキペディア(Wikipedia)』
移動先: 案内検索
Node.js
Node.js
作者 ライアン・ダール
開発元 Node.js Developers
初版 2009年(7年前) (2009
最新版 6.3.1 - 2016年7月21日(37日前) (2016-07-21 [1][±]
プログラミング言語 C++, JavaScript
対応OS Mac OS X, Linux, Solaris, FreeBSD, OpenBSD, Windows, webOS
種別 イベント駆動型
ライセンス MIT License
公式サイト nodejs.org
テンプレートを表示

Node.jsイベント化された入出力を扱うUnix系プラットフォーム上のサーバーサイドJavaScript環境である(V8 JavaScriptエンジンで動作する)。Webサーバなどのスケーラブルなネットワークプログラムの記述を意図している[2]。ライアン・ダールによって2009年に作成され、ダールを雇用しているJoyentの支援により成長している[3] [4]

Node.jsはPythonTwistedPerlPerl Object Environment英語版C言語libevent英語版RubyEventMachineと同様の目的を持つ。 ほとんどのJavaScriptとは異なり、Webブラウザの中で実行されるのではなく、むしろサーバサイドJavaScriptの一種である。 Node.jsはいくつかのCommonJS仕様を実装している[5]。 Node.jsは対話的なテスト用にREPL (Read-eval-print loop) 環境を含んでいる。

[編集]

Node.jsによるHTTPサーバ版のHello world:

var http = require('http');

http.createServer(function (request, response) {
    response.writeHead(200, {'Content-Type': 'text/plain'});
    response.end('Hello World\n');
}).listen(8000);

console.log('Server running at http://127.0.0.1:8000/');

ポート番号 7000番で接続を待ち受けて、送信されたデータをエコーする単純なTCPサーバ:

var net = require('net');

var server = net.createServer(function (stream) {
    stream.write('hello\r\n');

    stream.on('data', function (data) {
        stream.write(data);
    });

    stream.on('end', function () {
        stream.end('goodbye\r\n');
    });
});

server.listen(7000, 'localhost');

一万同時アクセス (C10K) 問題[編集]

Node.jsは、一台のPC (1CPU) で、一秒間に一万同時アクセスに対応出来る数少ないプログラム言語である。 他に対応出来るプログラム言語としては、Java Servletの他に、 研究段階では、nginx+Phalcon英語版+PHPCassandraの組み合わせならば、実現可能な可能性がある。 もし、20万同時アクセスに耐える設計だと、PCが20台必要な計算になる。 Node.jsでこれを実現している技術は、イベントループで、シングルスレッドベースの非同期処理である。 この時に使用を想定するNoSQLのデーターベースは、Apache Cassandraであり、速いので唯一要求速度に答えられるベンチマーク結果がネット上に多く見受けられる。

モジュール[編集]

Node.jsは、バイナリにコンパイルされた多くの「コア・モジュール」とともに提供される。それはネットワークの非同期ラッパーであるnetモジュールの他、パスやファイルシステム、バッファ、タイマー、より一般的なストリームなどの基本的なモジュールを含む。サードパーティ製のモジュールを使用することも可能である。それはプリコンパイルされた".node"アドオン、または、プレーンなJavaScriptファイルのどちらの形式でもよい。JavaScriptモジュールはCommonJSモジュール仕様[6]に従って実装され、モジュールが実装する関数や変数へのアクセスにはexports変数が使われる[7]

サードパーティのモジュールはnode.jsを拡張または抽象レベルを提供することで、Webアプリケーションで使われる様々なミドルウェア実装することができる。たとえばポピュラーなフレームワークとしてconnectおよびExpress.jsがある。モジュールは単なるファイルとしてインストールすることもできるが、通常はNode Package Manager英語版 (npm) を使ってインストールされる。それは依存性の扱いも含めてモジュールの構築、インストール、更新を助けてくれる。さらに、モジュールはNodeのデフォルトであるモジュール用ディレクトリにインストールしなくても、相対的なパス名を要求することで見つけられる。Node.js wikiに利用可能なサードパーティ製のモジュール一覧がある。

Node.jsを用いたWebアプリケーションでは、Express.jsEmber.js英語版Matador英語版のようなフレームワークを用いて開発を行うことが多い。

コミュニティ[編集]

主に2つのメーリングリスト nodejsnodejs-dev 、そして freenode上の IRC チャンネル #node.js を中心とするとても活発な開発者コミュニティが存在する。コミュニティはNode.jsにフォーカスした開発者会議であるNodeConfに集結する[8]

Windows版[編集]

0.5.1より、Windowsネイティブ版バイナリをリリースをした[9]。Windowsネイティブ版リリースに関してはMicrosoftの支援が行われた。Windows向けの非同期I/O環境 (Input/output completion port英語版, 以下IOCP)に対応するため、libuv[10]を作成することにより抽象化を進めた。結果、libev, libeioが使えるUNIX系プラットフォームとIOCPを利用するWindowsプラットフォーム向けのリリースが可能になった。

脚注・出典[編集]

関連項目[編集]

外部リンク[編集]