(Translated by https://www.hiragana.jp/)
Node.js - Wikipedia コンテンツにスキップ

Node.js

出典しゅってん: フリー百科ひゃっか事典じてん『ウィキペディア(Wikipedia)』
Node.js
Node.js
作者さくしゃ ライアン・ダール
開発元かいはつもと Node.js Developers
初版しょはん 2009ねん (15ねんまえ) (2009)
最新さいしんばん
Maintenance14.21.3 / 2023ねん2がつ16にち (16かげつまえ) (2023-02-16) [1]
Maintenance16.19.1 / 2023ねん2がつ16にち (16かげつまえ) (2023-02-16) [2]
LTS18.15.0 / 2023ねん3がつ7にち (15かげつまえ) (2023-03-07) [3]
Current19.7.0 / 2023ねん2がつ21にち (16かげつまえ) (2023-02-21) [4]
リポジトリ ウィキデータを編集
プログラミング
言語げんご
C++, JavaScript
対応たいおうOS macOS, Linux, Solaris, FreeBSD, OpenBSD, Windows, webOS
プラットフォーム x86, x64, ARM, Power, z/Architecture
種別しゅべつ イベント駆動くどうがた
ライセンス MIT License
公式こうしきサイト nodejs.org
テンプレートを表示ひょうじ

Node.js(ノード・ジェイエス) はV8 JavaScriptエンジンうえ構築こうちくされたJavaScript実行じっこう環境かんきょうの1つである[5]イベントされた入出力にゅうしゅつりょくあつかサーバサイドJavaScript環境かんきょうであり、Webサーバなどのスケーラブルネットワークプログラム記述きじゅつ意図いとしている[6]ライアン・ダールによって2009ねん作成さくせいされ、ダールを雇用こようしているJoyent支援しえんにより成長せいちょうしている[7] [8]

概要がいよう[編集へんしゅう]

V8 JavaScriptエンジン動作どうさするが、ChakraCoreバージョンやMozillaによるSpiderMonkey移植いしょくのプロジェクトも存在そんざいする。

Node.jsはPythonTwistedPerlPerl Object Environment英語えいごばんC言語げんごlibevent英語えいごばんRubyEventMachine英語えいごばん同様どうよう目的もくてきつ。 ほとんどのJavaScriptとはことなり、ウェブブラウザなか実行じっこうされるのではなく、むしろサーバサイドJavaScriptの一種いっしゅである。 Node.jsはいくつかのCommonJS仕様しよう実装じっそうしている[9]。 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モジュール仕様しよう[10]したがって実装じっそうされ、モジュールが実装じっそうする関数かんすう変数へんすうへのアクセスにはexports変数へんすう使つかわれる[11]

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

Node.jsをもちいたWebアプリケーションでは、Express.jsEmber.js英語えいごばんMatador英語えいごばんのようなフレームワークをもちいて開発かいはつおこなうことがおおい。

表明ひょうめい[編集へんしゅう]

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

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) に対応たいおうしており[13]以下いかのいずれかをたすものをES moduleとしてロードする[14]

  • 拡張子かくちょうし.mjs であるファイル
  • 拡張子かくちょうし.js かつさい近傍きんぼうおや package.json"type":"module"指定していされたファイル
  • --input-type=module フラグととも引数ひきすうとしてわたされたモジュール文字もじれつ

リリース[編集へんしゅう]

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

かくメジャーバージョンはPendingCurrent → (Active LTSMaintenance LTS →) End of Life のリリース状態じょうたいる。Currentリリースは6ヶ月かげつあいだつづき、奇数きすうバージョンはそのMaintenance LTSのみをてサポートが終了しゅうりょうし、偶数ぐうすうバージョンはActive LTSMaintenance LTS移行いこうする。プロダクションアプリケーションは Active LTS あるいは Maintenance LTS のいずれかのみを利用りようしなければならない[15]

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[16] 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[17]
サポート終了しゅうりょう17.x サポート終了しゅうりょうEnd-of-Life 2021-10-19 N/A 2022-04-01 2022-06-01
サポートちゅう18.x サポートちゅうMaintenance 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 サポートちゅうActive LTS Iron 2023-04-18 2023-10-24 2024-10-22 2026-04-30
現行げんこうバージョン:21.x 現行げんこうバージョン:Current 2023-10-17 N/A 2024-04-01 2024-06-01
将来しょうらいのリリース:22.x 将来しょうらいのリリース:Pending 2024-04-23 2024-10-29 2025-10-21 2027-04-30
将来しょうらいのリリース:23.x 将来しょうらいのリリース:Pending 2024-10-15 N/A 2025-04-01 2025-06-01
将来しょうらいのリリース:24.x 将来しょうらいのリリース:Pending 2025-04-22 2025-10-28 2026-10-20 2028-04-30
凡例はんれい
サポート終了しゅうりょう
サポートちゅう
現行げんこうバージョン
最新さいしんプレビューばん
将来しょうらいのリリース

   

コミュニティ[編集へんしゅう]

おもに2つのメーリングリスト nodejsnodejs-dev 、そして freenodeうえIRC チャンネル #node.js を中心ちゅうしんとするとても活発かっぱつ開発かいはつしゃコミュニティが存在そんざいする。コミュニティはNode.jsにフォーカスした開発かいはつしゃ会議かいぎであるNodeConfに集結しゅうけつする[18]

Windowsばん[編集へんしゅう]

0.5.1より、Windowsネイティブばんバイナリをリリースをした[19]。Windowsネイティブばんリリースにかんしてはマイクロソフト支援しえんおこなわれた。Windowsけの非同期ひどうきI/O環境かんきょうInput/output completion port英語えいごばん以下いかIOCP)に対応たいおうするため、libuv[20]作成さくせいすることにより抽象ちゅうしょうすすめた。結果けっかとしてlibev、libeioが使つかえるUnixけいプラットフォームとIOCPを利用りようするWindowsプラットフォームけのリリースが可能かのうになった。

クライアント1まんだい問題もんだい[編集へんしゅう]

非同期ひどうき処理しょりのNode.jsではクライアント1まんだい問題もんだいきない[21]

Node.jsでこの問題もんだい解決かいけつした技術ぎじゅつ中核ちゅうかくは、シングルスレッドにおける非同期ひどうき処理しょり容易ようい実装じっそう可能かのうにしたイベント駆動くどうがたプログラミング環境かんきょうである。

Docker Image[編集へんしゅう]

Node.js公式こうしきからDockerイメージ配布はいふされている[22]。イメージは以下いかの3種類しゅるい大別たいべつされ、すべてのイメージでnode/npm/yarnがプリインストールされている[23]

  • node:<version>: デファクトスタンダード[24]。Docker公式こうしきbuildpack-depsもと構築こうちく[25]
  • node:alpine: Alpine Linuxベース[26]。イメージサイズを最小さいしょうしたいさい推奨すいしょうされる[27]
  • node:slim: Node.js動作どうさ必要ひつよう最低限さいていげんのパッケージのみをふく[28]。サイズに制限せいげんがないかぎりデファクトイメージの利用りようつよ推奨すいしょう[29]

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

脚注きゃくちゅう出典しゅってん[編集へんしゅう]

  1. ^ Node.js v14 ChangeLog”. 2023ねん3がつ12にち閲覧えつらん
  2. ^ Node.js v16 ChangeLog”. 2023ねん3がつ12にち閲覧えつらん
  3. ^ Node.js v18 ChangeLog”. 2023ねん3がつ12にち閲覧えつらん
  4. ^ Node.js v19 ChangeLog”. 2023ねん3がつ12にち閲覧えつらん
  5. ^ Node.js® is a JavaScript runtime built on Chrome's V8 JavaScript engine. Node.js
  6. ^ http://www.readwriteweb.com/hack/2011/01/wait-whats-nodejs-good-for-aga.php
  7. ^ http://mashable.com/2011/03/10/node-js/
  8. ^ Alex Handy (2011ねん6がつ24にち). “Node.js pushes JavaScript to the server-side”. SDTimes. 2011ねん6がつ24にち閲覧えつらん
  9. ^ http://wiki.commonjs.org/wiki/Implementations/node.js
  10. ^ CommonJS Implementations”. 2011ねん5がつ15にち閲覧えつらん
  11. ^ Ryswyck, Jan. “Taking Baby Steps with Node.js – CommonJS and Creating Custom Modules”. 2011ねん5がつ15にち閲覧えつらん
  12. ^ All errors thrown by the assert module will be instances of the AssertionError class. Node.js
  13. ^ "Node.js fully supports ECMAScript modules" Modules: ECMAScript modules. Node.js v16.19.1 documentation. 2023-02-19閲覧えつらん.
  14. ^ "Node.js will treat the following as ES modules ... Files with an .mjs extension ... Files with a .js extension when the nearest parent package.json file contains a top-level "type" field with a value of "module". ... as an argument ... with the flag --input-type=module." Modules: Packages. Node.js v16.19.1 documentation. 2023-02-19閲覧えつらん.
  15. ^ Production applications should only use Active LTS or Maintenance LTS releases. Node.js
  16. ^ Node 8 reschedule”. 2019ねん1がつ22にち閲覧えつらん
  17. ^ Bringing forward the End-of-Life Date for Node.js 16”. 2023ねん2がつ15にち閲覧えつらん
  18. ^ http://www.readwriteweb.com/hack/2011/04/nodeconf-schedule-announced.php
  19. ^ http://blog.nodejs.org/2011/07/14/node-v0-5-1/
  20. ^ https://github.com/joyent/libuv
  21. ^ 福田ふくだ崇男たかお (2012ねん7がつ31にち). “スタバ方式ほうしきで「C10K問題もんだい」を解消かいしょう”. 日経にっけいコンピュータ. 日経にっけいBPしゃ. 2017ねん2がつ20日はつか閲覧えつらん
  22. ^ The official Node.js docker image, made with love by the node community. [1]
  23. ^ All of the images contain pre-installed versions of node, npm, and yarn. [2]
  24. ^ This is the defacto image. [3]
  25. ^ This tag is based off of buildpack-deps. [4]
  26. ^ This image is based on the popular Alpine Linux project, available in the alpine official image. [5]
  27. ^ This variant is highly recommended when final image size being as small as possible is desired. [6]
  28. ^ This image does not contain the common packages contained in the default tag and only contains the minimal packages needed to run node. [7]
  29. ^ Unless you are working in an environment where only the Node.js image will be deployed and you have space constraints, we highly recommend using the default image of this repository. [8]

関連かんれん項目こうもく[編集へんしゅう]

外部がいぶリンク[編集へんしゅう]