Node.jsとは?

Node.jsは、JavaScriptをブラウザの外、つまりサーバー側やローカル環境で実行するための実行環境です。
もともとJavaScriptはブラウザ上で動作する言語として使われていましたが、Node.jsの登場により、JavaScriptでサーバー処理、ファイル操作、API開発、コマンドラインツールの作成などができるようになりました。
Node.jsは、Google Chromeにも使われているV8 JavaScriptエンジンを利用しており、高速にJavaScriptを実行できます。また、非同期処理を得意としているため、APIサーバーやリアルタイム通信を扱うアプリケーションにもよく利用されます。
サーバーサイドJavaScriptとは?
サーバーサイドJavaScriptとは、サーバー上で実行されるJavaScriptのことです。
ブラウザ上で動くJavaScriptは、画面の操作やDOMの変更など、ユーザーが見ているページに関する処理を担当します。一方、サーバーサイドJavaScriptでは、データベース操作、ファイル処理、APIの作成、認証処理などを行います。
クライアントサイドとサーバーサイドの違い
| 種類 | 実行場所 | 主な役割 |
|---|---|---|
| クライアントサイド | ユーザーのブラウザ | 画面操作、DOM操作、ユーザーインターフェースの制御 |
| サーバーサイド | サーバー | データ処理、API作成、認証、データベース連携 |
Node.jsを使うことで、フロントエンドとバックエンドの両方でJavaScriptを利用できるようになります。
Node.jsの特徴
Node.jsには、次のような特徴があります。
非同期I/O
Node.jsは非同期I/Oを得意としています。
I/Oとは、ファイルの読み書き、データベースへの問い合わせ、ネットワーク通信などの入出力処理のことです。これらの処理は時間がかかる場合があります。
Node.jsでは、時間のかかる処理の完了を待っている間も、他の処理を進めることができます。これにより、多くのリクエストを効率よく処理できます。
非同期処理とは?
非同期処理とは、ある処理の完了を待たずに、次の処理へ進む仕組みです。
例えば、ファイルを読み込んでいる間に、別のリクエストを処理できます。これにより、サーバーの待ち時間を減らし、効率よく動作できます。
シングルスレッド
Node.jsは基本的にシングルスレッドでJavaScriptコードを実行します。
シングルスレッドとは、1つの実行の流れで処理を進める仕組みです。ただし、Node.jsはイベントループと非同期処理を組み合わせることで、多くの処理を効率よく扱えます。
スレッドとは?
スレッドとは、プログラムを実行する処理の単位です。
一般的には複数のスレッドを使って複数の処理を同時に行うことがありますが、Node.jsはイベントループを利用することで、少ないリソースで多くの処理を扱えるようにしています。
イベント駆動型
Node.jsはイベント駆動型の仕組みで動作します。
これは、「リクエストが来た」「ファイルの読み込みが終わった」「データベースの結果が返ってきた」といったイベントが発生したタイミングで、対応する処理を実行する仕組みです。
イベントループとは?
イベントループは、Node.jsが非同期処理を管理するための重要な仕組みです。
イベントループによって、処理の完了を待つ間に他の処理を進めることができ、シングルスレッドでも効率的に複数の処理を扱えます。
Node.jsの基本的な使い方
次に、Node.jsで簡単なWebサーバーを作成する例を紹介します。
このコードは、ブラウザからアクセスされたときにHello, World!という文字列を返すシンプルなサーバーです。
基本的なNode.jsサーバーの例
const http = require("http");
const server = http.createServer((req, res) => {
res.statusCode = 200;
res.setHeader("Content-Type", "text/plain; charset=utf-8");
res.end("Hello, World!");
});
server.listen(3000, () => {
console.log("Server running at http://127.0.0.1:3000/");
});
コード解説
このコードでは、Node.js標準のhttpモジュールを使ってWebサーバーを作成しています。
require("http")でHTTPサーバー用のモジュールを読み込んでいます。http.createServer()でサーバーを作成しています。reqはリクエスト情報、resはレスポンス情報を表します。res.end()でクライアントへレスポンスを返しています。server.listen(3000)でポート3000番を使って待機しています。
Node.jsとnpm
Node.jsを使ううえで重要なのが、npmです。
npmは、Node.js用のパッケージ管理ツールです。外部ライブラリをインストールしたり、プロジェクトの依存関係を管理したりできます。
// ターミナルで実行
npm install express
このように、npmを使うことで便利なライブラリを簡単に追加できます。
Node.jsのメリットとユースケース
Node.jsは、特にWeb開発やAPI開発でよく利用されています。
メリット
- JavaScriptをサーバー側でも使える:フロントエンドとバックエンドで同じ言語を利用できる。
- 非同期処理に強い:多数のリクエストやI/O処理を効率よく扱える。
- npmのライブラリが豊富:多くの便利なパッケージを利用できる。
- APIサーバーを作りやすい:Expressなどのフレームワークと相性が良い。
ユースケース
- Web APIサーバー
- リアルタイムチャットアプリ
- コマンドラインツール
- ファイル処理ツール
- フロントエンド開発環境のビルドツール
Node.jsを使うときの注意点
- CPU負荷の高い重い計算処理は苦手な場合がある。
- 非同期処理の書き方を理解しておく必要がある。
- サーバー開発ではセキュリティ対策も重要になる。
- 本番環境ではエラーハンドリングやログ管理も必要になる。
まとめ
- Node.jsは、JavaScriptをサーバー側やローカル環境で実行するための環境である。
- V8エンジンを利用して高速にJavaScriptを実行できる。
- 非同期I/O、イベントループ、イベント駆動型の仕組みを持つ。
- Web API、リアルタイムアプリ、開発ツールなど幅広い用途で使われる。
- npmを使うことで、多くのライブラリやツールを簡単に利用できる。