Node.js(ノードジェイエス)とは、サーバサイドJavaScriptアプリケーションプラットフォームです。軽量高性能で、1万同時アクセス問題に対応できる性能を持ち、JavaScriptでサーバサイド機能を実装できる点が特徴です。

オープンソースのAPサーバ/Node.jsとは

Node.js(ノードジェイエス)とは、サーバサイドJavaScriptアプリケーションプラットフォームです。軽量高性能で、1万同時アクセス問題に対応できる性能を持ち、JavaScriptでサーバサイド機能を実装できる点が特徴です。

目次

「Node.js」基本情報
■概要
■基本説明
■(参考)「JavaScript」とは
■動作環境
■経緯

主な特徴
■サーバサイド動作
・その他のサーバサイドプログラミング言語
■サーバサイドJavaScript開発のメリット
・学習コストが低い
・高速処理
■ノンブロッキングI/Oモデル
・概要
・非スレッドベース
・デッドロックは発生しない
■イベント駆動型プログラミングモデル
・概要
・イベントループ
・メリット
・子プロセス生成
・ロードバランシング対応
■高速処理/省メモリ
・概要
・シングルスレッド/イベントループ
・高性能JavaScriptエンジン「V8」
・C10K(1万同時アクセス)問題に対応可能
■パッケージ管理マネージャ「npm」
・概要
・オフィシャルサイト

ユースケース
■Webサイト構築
■Webアプリケーション開発
■Webサーバ構築
■スマートフォンアプリ開発
・省メモリ
・安定通信
・大量同時接続に対応
・ハイブリッドアプリ
■IoTサービス開発
■リアルタイムWebサービス開発

導入事例

補足情報
■オフィシャルサイト
・オフィシャルサイト
・ライセンス情報
・ダウンロード

「Node.js」基本情報

■概要

Node.js(ノードジェイエス)とは、サーバサイドJavaScriptアプリケーションプラットフォームです。軽量高性能で、1万同時アクセス問題に対応できる性能を持ち、JavaScriptでサーバサイド機能を実装できる点が特徴です。

■基本説明

Node.jsは、サーバーサイドで実行されるJavaScriptアプリケーションプラットフォームです。

非同期型イベント駆動により、多くのリクエストを処理できるスケーラビリティの高いJavaScript環境を提供します。軽量で効率的なネットワークアプリケーションを構築できます。

■(参考)「JavaScript」とは

JavaScriptとは、プロトタイプベースのオブジェクト指向スクリプト言語です。

HTML内にJavaScriptを埋め込むことにより動的Webページを作成できます。

■動作環境

Node.jsは以下の環境用バイナリが提供されています。
・Windows
・macOS
・Linux
・SunOS
・Docker など

■経緯

・2009年、初版リリース

主な特徴

■サーバサイド動作

Node.jsは、フロントサイドで動作するJavaScriptとは異なり、バックエンド(サーバサイド)で動作します。HTTPサーバ機能/ファイルサーバ機能などの実装も行えます。

その他のサーバサイドプログラミング言語

Node.js以外のサーバサイドプログラミングとして利用できる言語として次のようなものがあります。
・Java
・PHP
・Ruby
・Python など

■サーバサイドJavaScript開発のメリット

学習コストが低い

従来、サーバサイド実装とフロントサイド実装は、別の言語であるため、それぞれの言語を習得する必要がありました。しかし、Node.jsを使用する場合、サーバサイド実装とフロントサイド実装について、同一なJavaScriptで実装できるため、2言語を習得する場合に比べ学習コストを低くできます。

エンジニア不足が問題となっている状況において、「JavaScriptでフロントサイド実装をしていたエンジニアが、そのままサーバサイド実装も行える」という点は大きなメリットになります。

高速処理

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++で実装されており、中間コードもインタープリタ搭載もなく、最初の実行時からコンパイルするため高速処理が行われます。

→Google →Chrome V8(Google's high performance, open source, JavaScript engine.)

C10K(1万同時アクセス)問題に対応可能

C10K(1万同時アクセス)問題とは、サーバサイドにおいて「1万を超えるクライアントが接続するとサーバパフォーマンスが極端に落ちてしまう」という問題です。

Node.jsは、「イベントループ」と「シングルスレッドベースの非同期処理(ノンブロッキングI/O)」により、1台のサーバPC(1CPU)で1秒間に1万同時アクセスに対応できます。

大量アクセスを処理できるスケーラブルなネットワークプログラミングが可能です。

■パッケージ管理マネージャ「npm」

概要

パッケージ管理マネージャ「npm」とは、Node.js向けに提供されているライブラリのパッケージを管理できるツールです。

「インストール」「共有」「配布」「プロジェクト依存関係管理」「フィードバック共有」などを行えます。

オフィシャルサイト

npmレジストリには、数百を超えるモジュールが蓄積されています。

→npm(Build amazing things)

ユースケース

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は、世界的なサービスで導入されています。
・クレジットカード決済「PayPal」
・ソーシャルネットワーク「LinkedIn(モバイル版)」
・タクシー配車サービス「Uber」 など

補足情報

■オフィシャルサイト

オフィシャルサイト

→Node.js

ライセンス情報

Node.jsのライセンスは「MIT License」です。

詳細について、こちらを参照ください。
https://raw.githubusercontent.com/nodejs/node/master/LICENSE

ダウンロード

→Node.js →ダウンロード

 

参考元サイト

※定期的にメンテナンスを実施しておりますが、一部情報が古い場合がございます。ご了承ください。

Node.js最新CLOSEUPコラム

イベント情報

無料資料プレゼント

第2回「多要素認証の種類と方法」

講演資料を見るには、 プライバシーポリシーに同意して、送付先メールアドレスをご入力しご請求ください。

またご入力いただきました情報は、当該資料の作成・提供企業とも共有させていただき、当社及び各社のサービス、製品、セミナー、イベントなどのご案内に使用させていただきます。

本資料を見るには次の画面でアンケートに回答していただく必要があります。



  • 勉強会
  • OSSNEWSに広告を掲載しませんか?

facebook

twitter