Node.js

出典: フリー百科事典『ウィキペディア(Wikipedia)』
ナビゲーションに移動 検索に移動
Node.js
Node.js
作者 ライアン・ダール
開発元 Node.js Developers
初版 2009年(10年前) (2009
最新版
LTS

8.14.1 - 2018年12月18日(2か月前) (2018-12-18[1]
10.14.2 - 2018年12月11日(2か月前) (2018-12-11[2]

Current
11.5.0 - 2018年12月18日(2か月前) (2018-12-18 [3][±]
リポジトリ github.com/nodejs/node
プログラミング言語 C++, JavaScript
対応OS macOS, Linux, Solaris, FreeBSD, OpenBSD, Windows, webOS
プラットフォーム x86, x64, ARM, Power, z/Architecture
種別 イベント駆動型
ライセンス MIT License
公式サイト nodejs.org
テンプレートを表示

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

概要[編集]

V8 JavaScriptエンジンで動作するが、ChakraCoreバージョンやMozillaによるSpiderMonkey移植のプロジェクトも存在する。

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

Node.jsを用いた構成としてはMEAN等が提唱されている。

[編集]

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

const http = require('http');

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

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

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

const net = require('net');

const 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(3000, 'localhost');

モジュール[編集]

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

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

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

コミュニティ[編集]

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

Windows版[編集]

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

クライアント1万台問題[編集]

非同期処理のNode.jsではクライアント1万台問題英語版は起きない[13]

Node.jsでこの問題を解決した技術の中核は、シングルスレッドにおける非同期処理を容易に実装可能にしたイベント駆動型プログラミング環境である。

脚注・出典[編集]

  1. ^ Node.js 8 ChangeLog”. 2018年12月24日閲覧。
  2. ^ Node.js 10 ChangeLog”. 2018年12月24日閲覧。
  3. ^ Node.js 11 ChangeLog”. 2018年12月24日閲覧。
  4. ^ http://www.readwriteweb.com/hack/2011/01/wait-whats-nodejs-good-for-aga.php
  5. ^ http://mashable.com/2011/03/10/node-js/
  6. ^ Alex Handy (2011年6月24日). “Node.js pushes JavaScript to the server-side”. SDTimes. 2011年6月24日閲覧。
  7. ^ http://wiki.commonjs.org/wiki/Implementations/node.js
  8. ^ CommonJS Implementations”. 2011年5月15日閲覧。
  9. ^ Ryswyck, Jan. “Taking Baby Steps with Node.js – CommonJS and Creating Custom Modules”. 2011年5月15日閲覧。
  10. ^ http://www.readwriteweb.com/hack/2011/04/nodeconf-schedule-announced.php
  11. ^ http://blog.nodejs.org/2011/07/14/node-v0-5-1/
  12. ^ https://github.com/joyent/libuv
  13. ^ 福田崇男 (2012年7月31日). “スタバ方式で「C10K問題」を解消”. 日経コンピュータ. 日経BP社. 2017年2月20日閲覧。

関連項目[編集]

外部リンク[編集]