マジセミドライブ

ウェビナー関連のニュースやITサービス&ツールの最新情報を随時配信します。

OSS情報

2020.01.01

【OSS情報アーカイブ】Node.js

【OSS情報アーカイブ】Node.js

※当記事に記載されている情報は、古くなっている場合があります。オフィシャルサイトで最新情報をご確認ください。

「Node.js」とは

「Node.js」基本情報

■概要

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

■基本説明

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

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

■(参考)「JavaScript」とは

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

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

■経緯

・2009年:初版リリース

■オフィシャルサイト情報

オフィシャルサイト

→Node.js

ライセンス情報

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

詳細について、こちらを参照ください。
→GitHub →nodejs/node →LICENSE

動作環境

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

ダウンロード

→Node.js →Downloads

導入事例

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

→v8.dev

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

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

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

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

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

概要

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

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

npmレジストリ

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

https://www.npmjs.com/

「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を利用するアプリケーション など

 

参考元サイト

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

この記事のタグ一覧

おすすめの記事

【トレンド解説】超入門「 スマートファクトリー 」🏭

トレンド解説

2024.04.15

【トレンド解説】超入門「 スマートファクトリー 」🏭

「 スマートファクトリー 」への理解を深めるための解説として、初心者向けにわかりやすくまとめた記事です。「新しい工場の概念」「デジタルツインの活用」「IoT技術による最適化」など、現代の製造業に必要な知識を効果的に学べます。 スマートファクトリー の導入によるメリットを具体的に解説しています。

【IT用語解説】「 デジタルヒューマン 」とは😊

IT用語解説

2024.01.26

【IT用語解説】「 デジタルヒューマン 」とは😊

【IT用語解説】「 デジタルヒューマン 」として、「デジタルヒューマンとは何か?」「どのようにして作成できるのか?」「私たちの世界にどのような影響を与えているのか?」などについて、まとめています。