Node.js
| 作者 | ライアン・ダール |
|---|---|
| 開発元 | Node.js Developers |
| 初版 | 2009年 |
| 最新版 |
4.6.2 - 2016年11月8日 [1]
|
| プログラミング言語 | C++, JavaScript |
| 対応OS | macOS, Linux, Solaris, FreeBSD, OpenBSD, Windows, webOS |
| 種別 | イベント駆動型 |
| ライセンス | MIT License |
| 公式サイト | nodejs.org |
Node.js はイベント化された入出力を扱うUnix系プラットフォーム上のサーバーサイドJavaScript環境である(V8 JavaScriptエンジンで動作する)。Webサーバなどのスケーラブルなネットワークプログラムの記述を意図している[3]。ライアン・ダールによって2009年に作成され、ダールを雇用しているJoyentの支援により成長している[4] [5]。
Node.jsはPythonのTwisted、PerlのPerl Object Environment、C言語のlibevent、RubyのEventMachineと同様の目的を持つ。 ほとんどのJavaScriptとは異なり、ウェブブラウザの中で実行されるのではなく、むしろサーバサイドJavaScriptの一種である。 Node.jsはいくつかのCommonJS仕様を実装している[6]。 Node.jsは対話的なテスト用にREPL (Read-eval-print loop) 環境を含んでいる。
MEANの構成要素でもある。
例[編集]
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) 問題[編集]
2010年代後半において、Node.jsは、1コアCPUを搭載したサーバマシン1台で一秒間に一万同時アクセスに対応出来る数少ないWebアプリケーションプラットフォームである。Node.jsの後継の座を狙うVert.x、Go言語(参考情報:http://postd.cc/handling-1-million-requests-per-minute-with-go/)、もNode.jsを遥かに超える速度を叩き出している。枯れた技術として、この問題を解決しているWebアプリケーションプラットフォームとしては、Java Servletの他に、 研究段階では、nginx+Phalcon+PHP+Cassandraの組み合わせが確認されている。Node.jsでこの問題を解決した技術の中核は、シングルスレッドにおける非同期処理を容易に実装可能にしたイベント駆動型プログラミング環境である。 この時に使用を想定するNoSQLのデーターベースはApache Cassandraであり、他のデータベースと比較した際の応答速度における優位性を実証するベンチマーク結果がWeb上で確認できる。 従って、Node.jsにおいては、20万同時アクセスに耐えるWebサイトを構築する場合、サーバマシンが20台必要な計算になる。
モジュール[編集]
Node.jsは、バイナリにコンパイルされた多くの「コア・モジュール」とともに提供される。それはネットワークの非同期ラッパーであるnetモジュールの他、パスやファイルシステム、バッファ、タイマー、より一般的なストリームなどの基本的なモジュールを含む。サードパーティー製のモジュールを使用することも可能である。それはプリコンパイルされた ".node" アドオン、または、プレーンなJavaScriptファイルのどちらの形式でもよい。JavaScriptモジュールはCommonJSモジュール仕様[7]に従って実装され、モジュールが実装する関数や変数へのアクセスにはexports変数が使われる[8]。
サードパーティーのモジュールはnode.jsを拡張または抽象レベルを提供することで、ウェブアプリケーションで使われる様々なミドルウェア実装することができる。たとえばポピュラーなフレームワークとしてconnectおよびExpress.jsがある。モジュールは単なるファイルとしてインストールすることもできるが、通常はNode Package Manager (npm) を使ってインストールされる。それは依存性の扱いも含めてモジュールの構築、インストール、更新を助けてくれる。さらに、モジュールはNodeのデフォルトであるモジュール用ディレクトリにインストールしなくても、相対的なパス名を要求することで見つけられる。Node.js wikiに利用可能なサードパーティー製のモジュール一覧がある。
Node.jsを用いたWebアプリケーションでは、Express.jsやEmber.js、Matadorのようなフレームワークを用いて開発を行うことが多い。
コミュニティ[編集]
主に2つのメーリングリスト nodejs と nodejs-dev 、そして freenode上の IRC チャンネル #node.js を中心とするとても活発な開発者コミュニティが存在する。コミュニティはNode.jsにフォーカスした開発者会議であるNodeConfに集結する[9]。
Windows版[編集]
0.5.1より、Windowsネイティブ版バイナリをリリースをした[10]。Windowsネイティブ版リリースに関してはマイクロソフトの支援が行われた。Windows向けの非同期I/O環境(Input/output completion port、以下IOCP)に対応するため、libuv[11]を作成することにより抽象化を進めた。結果としてlibev、libeioが使えるUnix系プラットフォームとIOCPを利用するWindowsプラットフォーム向けのリリースが可能になった。
脚注・出典[編集]
- ^ “Node.js v4 ChangeLog”. 2016年11月8日閲覧。
- ^ “Node.js v6 ChangeLog”. 2016年10月19日閲覧。
- ^ http://www.readwriteweb.com/hack/2011/01/wait-whats-nodejs-good-for-aga.php
- ^ http://mashable.com/2011/03/10/node-js/
- ^ Alex Handy (2011年6月24日). “Node.js pushes JavaScript to the server-side”. SDTimes. 2011年6月24日閲覧。
- ^ http://wiki.commonjs.org/wiki/Implementations/node.js
- ^ “CommonJS Implementations”. 2011年5月15日閲覧。
- ^ Ryswyck, Jan. “Taking Baby Steps with Node.js – CommonJS and Creating Custom Modules”. 2011年5月15日閲覧。
- ^ http://www.readwriteweb.com/hack/2011/04/nodeconf-schedule-announced.php
- ^ http://blog.nodejs.org/2011/07/14/node-v0-5-1/
- ^ https://github.com/joyent/libuv
関連項目[編集]
外部リンク[編集]
|

