ウェブエンジニア問題集
第1章

Node.jsとは何か — ブラウザのJavaScriptとの違いと動く仕組み

8
この章の目次開く

Node.jsは、JavaScriptをブラウザの外で動かすための実行環境です。JavaScriptそのものは言語ですが、Node.jsはそのJavaScriptをサーバー、CLI、バッチ処理、開発ツールなどで動かすための土台です。

フロントエンドでJavaScriptを学んだ人がNode.jsで最初につまずくのは、「同じJavaScriptなのに、使えるものが違う」ことです。ブラウザには documentwindow がありますが、Node.jsにはありません。その代わり、Node.jsにはファイルを読む fs、パスを扱う path、HTTPサーバーを作る http、プロセス情報を扱う process があります。

Node.jsは「JavaScriptの文法」ではなく、「JavaScriptをサーバーサイドや開発環境で動かすための実行環境」です。
学習者学習者

JavaScriptはブラウザで動くものだと思っていました。Node.jsになると、何が同じで何が変わるんですか?

先生先生

文法は同じ。でも「周りに用意されているAPI」が違うんだ。ブラウザは画面操作が得意、Node.jsはファイル・通信・プロセス操作が得意、と考えると整理しやすいよ。

Node.jsでできること

Node.jsは、Web開発のいろいろな場所で使われています。

用途
WebサーバーAPIサーバー、SSR、管理画面のバックエンド
開発ツールVite、Next.js、ESLint、Prettier、TypeScriptコンパイラ
CLIツールコマンドラインで動く変換・生成・自動化ツール
バッチ処理定期実行、ログ処理、データ変換
リアルタイム通信WebSocket、チャット、通知

実務では、Node.jsを「本番サーバーとして直接書く」場面だけでなく、Next.jsやViteのような開発環境の裏側として毎日使っています。npm installnpm run dev が動くのも、Node.jsがあるからです。

ブラウザのJavaScriptとの違い

JavaScriptの基本文法、配列、オブジェクト、関数、Promise、async/await などは、ブラウザでもNode.jsでも同じです。詳しい文法はJavaScript入門の各章で扱っています。

違うのは、実行環境が提供するAPIです。

観点ブラウザNode.js
主な目的画面を操作するサーバー・ファイル・プロセスを扱う
代表的なグローバルwindow, document, locationglobalThis, process, Buffer
ファイル操作原則できないfs でできる
HTTPfetch() でリクエストする側が中心サーバーもクライアントも作れる
モジュールESM中心ESMとCommonJSが共存
実行場所ユーザーのブラウザサーバー、ローカルPC、CI環境
// ブラウザでは使えるが、Node.jsでは基本的に存在しない
console.log(document.title);
js
// Node.jsでは使えるが、ブラウザでは基本的に存在しない
console.log(process.version);
js

Node.jsの動く仕組み

Node.jsの中では、大きく分けて次の要素が協力しています。

要素役割
V8JavaScriptを実行するエンジン。Chromeにも使われている
libuv非同期I/Oやイベントループを支えるライブラリ
Node.js標準ライブラリfs, path, http, stream, buffer などのAPI群
npmエコシステム外部パッケージを配布・利用する仕組み

ブラウザでDOMを操作する代わりに、Node.jsではOSに近い処理を扱います。ファイルを読む、ポートを開いてHTTPリクエストを待つ、標準出力へログを出す、といった処理です。

なぜNode.jsは非同期I/Oが得意なのか

Node.jsは「シングルスレッドなのに速い」と説明されることがあります。ただし、これは「CPUを使う重い計算が何でも速い」という意味ではありません。

Node.jsが得意なのは、ファイル読み込み、データベースアクセス、HTTP通信のような待ち時間の多いI/O処理です。待っている間にプロセス全体を止めず、別のリクエストや処理を進められます。

import { readFile } from 'node:fs/promises';
 
const text = await readFile('message.txt', 'utf8');
console.log(text);
js

このコードは一見「読み込みが終わるまで待っている」ように見えます。しかしNode.js全体が完全に停止しているわけではありません。ファイル読み込みの完了を待つ間、イベントループは他の処理を進められます。非同期処理の文法自体は非同期処理の基本でも扱っています。

Node.jsはCPUを使い切る計算より、I/O待ちが多いサーバー処理で力を発揮します。

nodeコマンドでJavaScriptを実行する

Node.jsをインストールすると、node コマンドが使えるようになります。

node app.js
bash

app.js に次のように書くと、ターミナルに出力されます。

console.log('Hello from Node.js');
console.log(process.version);
js

process は、現在動いているNode.jsプロセスの情報を持つグローバルオブジェクトです。ここでは process.version でNode.jsのバージョンを確認しています。

プロパティ説明値の例
process.version実行中のNode.jsのバージョン'v22.13.1'
process.platformOSの種類'darwin', 'linux', 'win32'
process.cwd()現在の作業ディレクトリを返すメソッド'/Users/example/project'

構文: process.cwd()

引数説明
なし引数は取りません

戻り値: 現在のNode.jsプロセスの作業ディレクトリを表す文字列

console.log(process.cwd());
js

Node.jsを学ぶ順番

Node.jsは範囲が広いので、最初から全部を覚えようとしない方がいいです。まずは次の順番で土台を作ると、Expressや本番運用までつながりやすくなります。

  1. Node.jsとブラウザの違いを理解する
  2. npmと package.json を読めるようにする
  3. CommonJSとES Modulesの違いを理解する
  4. 非同期処理とイベントループをNode.jsの文脈で理解する
  5. ファイル、Buffer、Stream、HTTPサーバーを触る

この章では全体像を扱いました。次章では、Node.jsをインストールし、プロジェクトごとにバージョンを管理する方法を見ていきます。

参考リンク

Node.jsクイズに挑戦するこの章で学んだNode.jsの知識を、4択クイズでアウトプットして定着させよう