概要: このチュートリアルでは、Node.jsとは何か、そしてなぜ、どのような場合にNode.jsを使用すべきかを学びます。
Node.jsの概要
Node.jsは、JavaScriptを使用してサーバーサイドアプリケーションを開発できる、オープンソースのクロスプラットフォームランタイム環境です。
すべてのWebブラウザには、JavaScriptコードを機械語にコンパイルするJavaScriptエンジンがあります。たとえば、FirefoxはSpiderMonkeyを使用し、Google ChromeはV8を使用します。
ブラウザは異なるJavaScriptエンジンを使用しているため、ブラウザ間でJavaScriptの動作が異なる場合があります。
2009年、Node.jsの作成者であるRyan Dahlは、V8エンジンを取得し、サーバー上でJavaScriptを実行できるアプリケーションに組み込みました。

次の図は、Node.jsシステムを示しています。

Node.jsは、WebブラウザでのJavaScriptの実行モデルと同様に、シングルスレッド、ノンブロッキング、およびイベント駆動型の実行モデルを使用します。
Node.jsはシングルスレッド
Node.jsはシングルスレッドであり、各プロセスは1つの実行スレッドのみを実行することを意味します。
シングルスレッドの実行モデルにより、Node.jsはイベントループを介してより多くの同時リクエストを簡単に処理できます。その結果、Node.jsアプリケーションは通常、他のアプリケーションと比較して消費するメモリが少なくなります。
イベントループについて詳しくない場合は、こちらのチュートリアルを確認してください。Node.jsのイベントループは、Webブラウザのイベントループと同様に機能することに注意することが重要です。
Node.jsはノンブロッキングI/Oを使用
I/Oは、ディスクアクセス、ネットワークリクエスト、またはデータベース接続など、入力/出力を意味します。I/Oリクエストはコストが高く、遅いため、他の操作がブロックされる可能性があります。
Node.jsは、ノンブロッキングI/O操作を利用することで、ブロッキングI/Oの問題に対処します。
ノンブロッキングモデルでは、他のタスクを実行しながらリクエストを開始できます。リクエストが完了すると、コールバック関数が実行されて結果が処理されます。
Node.jsはイベント駆動型
Node.jsはイベント駆動型アーキテクチャを使用します。つまり、Node.jsは、直線的な上から下への実行モデルに従うのではなく、イベントが発生するのを待ち、発生したときにそれらに応答します。
以下は、Node.jsのイベント駆動型アーキテクチャの仕組みを説明しています。
- クライアントがサーバーにリクエストを送信するなど、イベントが発生すると、イベントハンドラー関数がトリガーされます。
- 次に、Node.jsはイベントハンドラー(コールバック関数)をイベントキューに追加します。
- Node.jsで継続的に実行されているループであるイベントループは、イベントキューをチェックし、イベントを1つずつ処理します。各イベントに対応するイベントハンドラーを実行します。
- イベントループがこれらのイベントを処理している間、Node.jsは、新しいイベントをリッスンするなど、他のタスクの処理を継続できます。
Node.jsの利点
Node.jsは、プロトタイピングとアジャイル開発に適しており、高速で拡張性の高いアプリケーションを構築できます。
Node.jsにはオープンソースライブラリの大きなエコシステムがあるため、既存のライブラリを再利用し、ビジネスロジックに集中する時間を増やすことができます。
すでにフロントエンド開発にJavaScriptを使用している場合は、既存のスキルをサーバーサイド開発に活用できます。
クライアントサイドとサーバーサイドの開発に同じJavaScriptを使用することで、コードベースがよりクリーンで一貫性のあるものになります。
Node.jsの実際のユースケース
Node.jsには幅広い実際のアプリケーションがあります
- スケーラブルなネットワークアプリケーション: Node.jsは、LinkedIn、Uber、Netflixなどの大手企業でスケーラブルなアプリケーションを開発するために使用されています。
- リアルタイムアプリケーション – Node.jsはイベント駆動型のノンブロッキングI/Oモデルを使用しているため、チャットやオンラインゲームなどのリアルタイムアプリケーションに最適です。
- APIとマイクロサービス – Node.jsは、Restful APIとマイクロサービスの開発によく使用されます。
- IoTデバイス: Node.jsは、さまざまなモノのインターネット(IoT)アプリケーションを動かしています。
まとめ
- Node.jsは、JavaScriptを使用してサーバーサイドアプリケーションを開発できる、オープンソースのクロスプラットフォームランタイム環境です。