Node.js

V8 JavaScriptエンジン上に構築されたJavaScript実行環境 From Wikipedia, the free encyclopedia

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

初版 2009年 (17年前) (2009)
最新版
25.6.1[1] ウィキデータを編集 / 2026年2月10日 (24日前)
概要 作者, 開発元 ...
閉じる

概要

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

Node.jsはPythonTwistedPerlPerl Object Environment英語版C言語libevent英語版RubyEventMachine英語版と同様の目的を持つ。 ほとんどのJavaScriptとは異なり、ウェブブラウザの中で実行されるのではなく、むしろサーバサイドJavaScriptの一種である。 Node.jsはいくつかのCommonJS仕様を実装している[6]。 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モジュール仕様[7]に従って実装され、モジュールが実装する関数や変数へのアクセスにはexports変数が使われる[8]

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

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

表明

Node.jsはコアモジュール assertにより表明(assertion)に対応している。表明違反時にはassert.AssertionErrorインスタンスがスローされる[9]

const assert = require('assert').strict;

assert.deepEqual(1, 2);
// Thrown:
// AssertionError [ERR_ASSERTION]: Expected values to be strictly deep-equal:
// 
// 1 !== 2

ECMAScript modules

Node.jsは ECMAScript modules (ES module) に対応しており[10]、以下のいずれかを満たすものをES moduleとしてロードする[11]

  • 拡張子が .mjs であるファイル
  • 拡張子が .js かつ最近傍の親 package.json"type":"module" が指定されたファイル
  • --input-type=module フラグと共に引数として渡されたモジュール文字列

リリース

Node.jsは長期サポート (LTS) リリースモデルを採用している。

各メジャーバージョンはPendingCurrent → (Active LTSMaintenance LTS →) End of Life のリリース状態を経る。Currentリリースは6ヶ月間続き、奇数バージョンはその後Maintenance LTSのみを経てサポートが終了し、偶数バージョンはActive LTSを経てMaintenance LTSへ移行する。プロダクションアプリケーションは Active LTS あるいは Maintenance LTS のいずれかのみを利用しなければならない[12]

さらに見る Release, Status ...
Release Status Code name Release date Active LTS start Maintenance start Maintenance end
サポート終了:v0.10.x サポート終了:End-of-Life 2013-03-11 - 2015-10-01 2016-10-31
サポート終了:v0.12.x サポート終了:End-of-Life 2015-02-06 - 2016-04-01 2016-12-31
サポート終了:4.x サポート終了:End-of-Life Argon 2015-09-08 2015-10-01 2017-04-01 2018-04-30
サポート終了:5.x サポート終了:End-of-Life 2015-10-29 N/A 2016-06-30
サポート終了:6.x サポート終了:End-of-Life Boron 2016-04-26 2016-10-18 2018-04-30 2019-04-30
サポート終了:7.x サポート終了:End-of-Life 2016-10-25 N/A 2017-06-30
サポート終了:8.x サポート終了:End-of-Life Carbon 2017-05-30 2017-10-31 2019-01-01[13] 2019-12-31
サポート終了:9.x サポート終了:End-of-Life 2017-10-01 N/A 2018-06-30
サポート終了:10.x サポート終了:End-of-Life Dubnium 2018-04-24 2018-10-30 2020-05-19 2021-04-01
サポート終了:11.x サポート終了:End-of-Life 2018-10-23 N/A 2019-05-01 2019-06-01
サポート終了:12.x サポート終了:End-of-Life Erbium 2019-04-23 2019-10-21 2020-11-30 2022-04-30
サポート終了:13.x サポート終了:End-of-Life 2019-10-22 N/A 2020-04-01 2020-06-01
サポート終了:14.x サポート終了:End-of-Life Fermium 2020-04-21 2020-10-27 2021-10-19 2023-04-30
サポート終了:15.x サポート終了:End-of-Life 2020-10-20 N/A 2021-04-01 2021-06-01
サポート終了:16.x サポート終了:End-of-Life Gallium 2021-04-20 2021-10-26 2022-10-18 2023-09-11[14]
サポート終了:17.x サポート終了:End-of-Life 2021-10-19 N/A 2022-04-01 2022-06-01
サポート終了:18.x サポート終了:End-of-Life Hydrogen 2022-04-19 2022-10-25 2023-10-18 2025-04-30
サポート終了:19.x サポート終了:End-of-Life 2022-10-18 N/A 2023-04-01 2023-06-01
サポート中:20.x サポート中:Maintenance Iron 2023-04-18 2023-10-24 2024-10-22 2026-04-30
サポート終了:21.x サポート終了:End-of-Life 2023-10-17 N/A 2024-04-01 2024-06-01
サポート中:22.x サポート中:Active LTS Jod 2024-04-24 2024-10-29 2025-10-21 2027-04-30
サポート終了:23.x サポート終了:End-of-Life 2024-10-16 N/A 2025-04-01 2025-06-01
現行バージョン:24.x 現行バージョン:Current 2025-05-06 2025-10-28 2026-10-20 2028-04-30
凡例
サポート終了
サポート中
現行バージョン
最新プレビュー版
将来のリリース
閉じる

   

コミュニティ

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

Windows版

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

クライアント1万台問題

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

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

Docker Image

Node.js公式からDockerイメージが配布されている[19]。イメージは以下の3種類に大別され、全てのイメージでnode/npm/yarnがプリインストールされている[20]

  • node:<version>: デファクトスタンダード[21]。Docker公式のbuildpack-depsを基に構築[22]
  • node:alpine: Alpine Linuxベース[23]。イメージサイズを最小化したい際に推奨される[24]
  • node:slim: Node.js動作に必要最低限のパッケージのみを含む[25]。サイズに制限がない限りデファクトイメージの利用を強く推奨[26]

デフォルト以外の設定(例: npmアップグレード)を利用する手引き「Docker and Node.js Best Practices」や GetStarted が公式から提供されている。

脚注・出典

関連項目

外部リンク

Related Articles

Wikiwand AI