トップ OSS紹介 Node.js

Node.js

NRIのOpenStandiaが提供するNode.js最新情報

バージョンアップ情報

Node.js情報

Node.jsとは

Node.js(ノードジェイエス)は、Ryan Dahl(ライアン・ダール)氏によって開発され、2009年に公開されたサーバサイドJavaScript実行環境です。
Googleが提供するV8 JavaScriptエンジン上で動作し、ApacheのようなWebサーバ環境やTomcatのようなWebアプリケーション環境をJavaScriptで実現することができます。V8は自動車のV型8気筒エンジンから取られており、その名の通り高速で高性能なJavaScriptエンジンです。
Node.jsを利用する開発者は全世界で1,100万人を超え、モジュール開発も盛んに行われており、100万を超えるパッケージが無料で公開されています(※1)。

Node.jsでは、従来のサーバ関連技術(Apacheなど)で問題となっていた接続台数増加に伴う性能劣化問題(※2)を解決するために、シングルスレッド、イベントループ、ノンブロッキングI/Oモデルといった技術を採用しています。
このため、Node.jsでは同時接続台数が増えた場合においても高速な処理性能を維持することが可能です。 更に、クライアントサイド・サーバサイドの開発においてJavaScriptを共通して利用できるため、効率的に開発を進めることも可能です。
また、2014年付近からは、MEANスタックやMERNスタック(※3)の一要素としてNode.jsが取り上げられ、技術動向の調査を目的としたウェブサイト(※4)においても"ADOPT"(導入を推奨)と評価されるなど、Node.jsが技術的に優れていることを示す評価がなされました。

近年では、Netflix、PayPal、LinkedIn、Walmart、Uber、eBay、NASAといった大規模なサイトでも採用されるなどの広がりを見せています。

Node.jsは、LTS版(Long-term Support)である偶数(12.x、14.xなど)バージョンを使用することが推奨されています。

※1 npmコマンドを使用することで、世界最大のソフトウェアレジストリであるhttp://www.npmjs.com/よりモジュールを取得することが可能です。
※2 C10K問題と呼ばれています。http://www.kegel.com/c10k.html
※3  MongoDB(データベース)、Express(Webアプリケーションフレームワーク)、Angular(クライアントサイドMVCフレームワーク)、Node.js(Webサーバ)からなるウェブアプリケーション構築のためのソフトウェア群。頭文字を取ってMEANと呼ばれています。http://meanjs.org/
また、AngularでなくReact.jsを用いた場合は、こちらも頭文字をとってMERNと呼ばれています。
※4 https://www.thoughtworks.com/radar/platforms/node-js

主な特徴

Node.jsは以下の1、2の特徴より、同時接続台数が増えた場合においても高速な処理性能を実現することができます。

1.シングルスレッド+イベントループ

Node.jsでは、複数のクライアントとのやり取りをシングルスレッド+イベントループの形式で行います。(JavaScript環境をベースとしているため)
シングルスレッド+イベントループの処理形式では、マルチスレッドの処理形式と比較し、以下の2点のメリットがあります。

  • スレッド単位で消費されるメモリ使用量が少ない(クライアントが増える度にスレッドが増えることがないため、スレッドに対して使用されるメモリ使用量は一定となる)
  • スレッド切替えに伴うオーバーヘッドが少ない

但し、イベントループ形式では、データベース接続などの時間がかかるI/O処理が発生した場合に処理結果が返るまで待機し続けるため、その間別の処理(プログラム実行、リクエスト応答など)が行われなくなる問題があります(ブロッキング)。

2.ノンブロッキングI/O

「1.シングルスレッド+イベントループ」で挙げたブロッキングの問題を解決するのが、ノンブロッキングI/Oとなります。
ノンブロッキングI/Oを適用したイベントループ形式では、時間のかかる処理を非同期に実行させ、スレッド自体もブロックさせないため、その間に別の処理を行うことが可能になります。
例えば、ノンブロッキングI/Oでは、データベースに問い合わせを行った際に、問い合わせ結果を待たずにリクエスト応答などの別の処理を行うことができます。

その他の特徴

その他にも以下の特徴があります。

  • npmによる高速かつ堅牢で一貫性のあるパッケージ管理
  • サーバサイド、クライアントサイドで処理の共通化ができる
  • 多くの開発者が利用しているJavaScriptで実装できる
  • アクティブな開発コミュニティ
  • JavaScriptを高速に実行できる「V8」エンジンを利用

類似プロダクト

Node.jsの他にも、Rhino、RingoJS、Jaxerなどのサーバーサイドスクリプトの実行環境が存在します。

ユースケース

Node.jsはリアルタイムで複数人が使用するサーバでもパフォーマンスが落ちることが少ないため、主にWebサーバの構築で利用されます。

  • チャットサーバ
  • Gameサーバの一部機能
  • Webアプリ
  • スマホアプリ

動作環境

  • Windows
  • MacOS
  • Linux
  • SmartOS
  • Docker

Node.jsのライセンス

Node.jsのライセンスは、MITライセンスです。
MITライセンスは、X Window System (X11)などのソフトウェアに適用されていることから、X11ライセンス、またはXライセンスとも表記されます。
MITライセンスは、数あるソフトウェ アライセンスの中で最も制約が少なく、ソースコードの無償の使用のほか、改変、再配布することも認められています。

製品ダウンロード

オープンソース年間サポートサービス

OpenStandiaではOSSを安心してご利用いただけるように、オープンソース年間サポートサービスをご提供しております。
サポートしているOSSは下記ページをご参照ください。

お気軽にお問い合わせください

関連OSS

  • Vue.js
    サポート対象

    Vue.js

    ヴュー・ジェイエス。SPA(シングルページアプリケーション)に向いたJavaScriptフレームワークです。

  • React
    サポート対象

    React

    リアクト。Facebookが作成したMVCモデルのView領域を担当するJavascriptのUIライブラリです。

  • Next.js
    サポート対象

    Next.js

    ねくすとじぇーえす。Reactの機能を拡張するためのJavaScriptフレームワークです。

  • Angular
    サポート対象

    Angular

    アンギュラー。Googleが開発を行っているMV*モデルのJavaScriptのアプリケーションフレームワークです。

オープンソースに関するさまざまな課題、OpenStandiaがまるごと解決します。
下記コンテンツも
あわせてご確認ください。