マジセミドライブ
ウェビナー関連のニュースやITサービス&ツールの最新情報を随時配信します。
OSS情報
2020.01.01
【OSS情報アーカイブ】Node.js

※当記事に記載されている情報は、古くなっている場合があります。オフィシャルサイトで最新情報をご確認ください。
コンテンツ
「Node.js」とは
「Node.js」基本情報
■概要
Node.js(ノードジェイエス)とは、サーバサイドJavaScriptアプリケーションプラットフォームです。軽量高性能で、1万同時アクセス問題に対応できる性能を持ち、JavaScriptでサーバサイド機能を実装できる点が特徴です。
■基本説明
Node.jsは、サーバーサイドで実行されるJavaScriptアプリケーションプラットフォームです。
非同期型イベント駆動により、多くのリクエストを処理できるスケーラビリティの高いJavaScript環境を提供します。軽量で効率的なネットワークアプリケーションを構築できます。
■(参考)「JavaScript」とは
JavaScriptとは、プロトタイプベースのオブジェクト指向スクリプト言語です。
HTML内にJavaScriptを埋め込むことにより動的Webページを作成できます。
■経緯
・2009年:初版リリース
■オフィシャルサイト情報
オフィシャルサイト
ライセンス情報
Node.jsのライセンスは「MIT license」です。
詳細について、こちらを参照ください。
→GitHub →nodejs/node →LICENSE
動作環境
Node.jsは以下の環境用バイナリが提供されています。
・Windows
・macOS
・Linux
・SunOS
・Docker など
ダウンロード
導入事例
Node.jsは、世界的なサービスで導入されています。
・クレジットカード決済「PayPal」
・ソーシャルネットワーク「LinkedIn(モバイル版)」
・タクシー配車サービス「Uber」 など
「Node.js」のサーバサイドプログラミング機能
■サーバサイド動作
Node.jsは、フロントサイドで動作するJavaScriptとは異なり、バックエンド(サーバサイド)で動作します。HTTPサーバ機能/ファイルサーバ機能などの実装も行えます。
その他のサーバサイドプログラミング言語
Node.js以外のサーバサイドプログラミングとして利用できる言語として次のようなものがあります。
・Java
・PHP
・Ruby
・Python など
■サーバサイドJavaScript開発のメリット
学習コストが低い
従来、サーバサイド実装とフロントサイド実装は、別の言語であるため、それぞれの言語を習得する必要がありました。しかし、Node.jsを使用する場合、サーバサイド実装とフロントサイド実装について、同一なJavaScriptで実装できるため、2言語を習得する場合に比べ学習コストを低くできます。
エンジニア不足が問題となっている状況において、「JavaScriptでフロントサイド実装をしていたエンジニアが、そのままサーバサイド実装も行える」という点は大きなメリットになります。
高速処理
Node.jsはサーバサイドで動作するため、フロントエンドからのネットワークリクエストを軽減できます。
よりレスポンスが速いサービスの提供が可能となり、エンドユーザーのストレスを軽減できます。
「Node.js」の主な特徴
「Node.js」の主な特徴
■ノンブロッキングI/Oモデル
概要
データベースにアクセスして検索を実行して結果を取得する場合、データベースに問い合わせてから結果が返ってくるまで待ち時間が発生します。一般的には、その間、呼び出し元の処理を止めておきます。
一方、「ノンブロッキングI/O」を採用しているNode.jsの場合では、データベースに問い合わせたらデータベース側の処理完了を待たずに次の処理に移ります。このような仕組みにより、重い入出力処理を非同期で高速実行できます。
問い合わせ結果が必要な処理の場合は、そのまま待機になります。
非スレッドベース
Node.jsは、非スレッドベースで動作します。
一般的なOSが採用しているスレッドベースの同時実行モデルのネットワーキングは、比較的非効率であり困難とされています。
デッドロックは発生しない
Node.jsはロックが許可されていません。そのためI/O処理をブロックすることがなく、デッドロックは発生しません。
そのため、スケーラブルなシステム開発用途に向いています。
■イベント駆動型プログラミングモデル
概要
Node.jsは「イベント駆動型プログラミングモデル」を採用しています。
イベントループ
Node.jsはライブラリとしてイベントループを提供します。リクエスト/コールバックの発生をイベントとして扱い、そのイベントに関する処理が終わったら次のイベントを処理する仕組みです。非同期型であるため、軽量で効率的に動作できます。
例えば、「ページが読み込まれた」「クライアントからリクエストがあった」などのイベントをトリガーとして各機能を駆動させます。
メリット
「特定の処理が終わるのを待たずに別の処理を行うことができる」「処理の流れが明確になる」などのメリットがあります。
子プロセス生成
子プロセスは「child_process.fork」API を使用して生成でき、簡単に通信できるように設計されています。
ロードバランシング対応
Node.jsでは「clusterモジュール」が同一インターフェース上に内蔵されており、ロードバランシングを有効にするためにプロセス間でソケットを共有できます。
複数CPUコアを利用できる場合にコアの負荷分散を行えます。
■高速処理/省メモリ
概要
Node.jsは「高速処理」と「省メモリ」を実現できる設計になっています。
シングルスレッド/イベントループ
Node.jsはシングルスレッドで動作し、イベントループ機能を提供します。
アクセスが増大した場合でも、スレッド(CPUの利用単位)の数は増えることはなく、CPUの負荷は増えません。スレッド切り替え処理が発生しないことにより、メモリ消費も抑えられ、高速に動作します。
高性能JavaScriptエンジン「V8」
Node.jsは、高性能オープンソースJavaScriptエンジン「V8」を採用しています。
「V8」はGoogleが開発したJavaScriptエンジンで、ブラウザ「Google Chrome」などに採用されています。
C++で実装されており、中間コードもインタープリタ搭載もなく、最初の実行時からコンパイルするため高速処理が行われます。
C10K(1万同時アクセス)問題に対応可能
C10K(1万同時アクセス)問題とは、サーバサイドにおいて「1万を超えるクライアントが接続するとサーバパフォーマンスが極端に落ちてしまう」という問題です。
Node.jsは、「イベントループ」と「シングルスレッドベースの非同期処理(ノンブロッキングI/O)」により、1台のサーバPC(1CPU)で1秒間に1万同時アクセスに対応できます。
大量アクセスを処理できるスケーラブルなネットワークプログラミングが可能です。
■パッケージ管理マネージャ「npm」
概要
パッケージ管理マネージャ「npm」とは、Node.js向けに提供されているライブラリのパッケージを管理できるツールです。
「インストール」「共有」「配布」「プロジェクト依存関係管理」「フィードバック共有」などを行えます。
npmレジストリ
npmレジストリには、数百を超えるモジュールが蓄積されています。
「Node.js」のユースケース
「Node.js」のユースケース
Node.jsはメモリ消費量を抑えることができるため、特に小規模開発/運用時において、より高いパフォーマンスを出すことが可能です。
また、同時に大量のトラフィックを捌くことができるため、アクセスが集中するWebアプリケーション開発に向いています。
■Webサイト構築
JavaScript自体が、動的Webサイト開発に向いているため、リッチな表現を行うサイトを構築できます。
また、ブラウザ/サーバ間の頻繁な接続が必要なシステム構築に向いているため、課金システムなども効率的に開発できます。
■Webアプリケーション開発
Node.jsは、Ruby/Pythonなどの他のプログラミング言語と併用することも可能で、Webアプリケーション開発に利用できます。
主として、アプリケーション内の「チャット機能」や「通知機能」などのサーバ関連機能部分でNode.jsが用いられます。
■Webサーバ構築
Node.jsを使用して、「HTTPサーバ」「ファイルサーバ」など、Webサーバ機能を構築できます。
■スマートフォンアプリ開発
Node.jsで、スマートフォンアプリも開発できます。
省メモリ
Node.jsはメモリ消費を抑えられるため、搭載メモリが少ないスマートフォンでも快適に動作するアプリケーションを開発できます。
安定通信
複数ユーザーのモバイル通信速度が異なる状態でも、スムーズで安定した処理を提供できます。
大量同時接続に対応
ゲームアプリなどにおいて、多数のユーザーが同時接続を行う状況でも、パフォーマンスを落とさずに処理できます。
ハイブリッドアプリ
Node.jsを利用して手軽に開発できるようにさまざまなライブラリが提供されており、「HTML5+CSS+JavaScript」などのWeb技術でアプリ開発を行うハイブリッド型アプリ開発に利用できます。
■IoTサービス開発
Node.jsでは「JavaScriptでIoT開発を行える環境整備」が進められています。
近年、IoTのコントロールデバイスとして利用されるマイコンボード(Raspberry Pi/Arduinoなど)をNode.jsで制御できるようになってきています。
■リアルタイムWebサービス開発
Node.jsは、リアルタイム通信ライブラリ「Socket.io」を使用することで、CPU利用率の低い処理について頻繁にリアルタイム処理を行う用途に向いています。
Node.jsのリアルタイム処理機能を利用して応答性が必要なサービスを開発できます。
・チャット機能
・通知機能
・リアルタイムアプリケーション
・シングルページアプリケーション
・WebSocketを利用するアプリケーション など
参考元サイト
- Node.js
- TechAcademy →リアルタイム通信で活用!注目の技術「Node.js」とは【初心者向け】
- Qiita →Node.js を5分で大雑把に理解する
- 侍エンジニア塾 →【Node.jsとは?】初心者も理解できる言語の特徴を体系的に解説!
※定期的にメンテナンスを実施しておりますが、一部情報が古い場合がございます。ご了承ください。
この記事のタグ一覧
フリーワード検索
カテゴリー一覧
アクセスランキング
ランク1位
【OSS情報アーカイブ】Curlランク2位
【ツール紹介】無料オープンソース「 ビデオ監視 ツール 」まとめ3選ランク3位
【デジタル寺田の3分用語解説】 生成AIを悪用した「 サイバー攻撃 」とは?ランク4位
【ChatGPTプラグイン探訪】「 Show Me Diagrams 」〜データ視覚化〜ランク5位
【無料で使える】「 マルウェア 」対策ツールまとめランク6位
【OSS情報アーカイブ】SaMMAランク7位
【ChatGPT探訪】ビルトイン画像生成AI「 DALL·E 3 」ランク8位
【OSS情報アーカイブ】NetBeansランク9位
【OSS情報アーカイブ】Apache Nutchランク10位
【OSS情報アーカイブ】Apache Flink
おすすめの記事

デジタル寺田の3分用語解説
2025.03.17
【デジタル寺田の3分用語解説】 「 心理的安全性 」が無い職場とは?
「 心理的安全性 」が低い職場とはどのような環境なのか、具体的な特徴を解説します。「質問しづらい雰囲気」「失敗を報告できない隠蔽体質」「発言をためらう風土」など、心理的安全性の欠如がもたらす影響を詳しく紹介し、安全な職場づくりの重要性も解説します。