結論

Node.js は、JavaScript をブラウザの外(パソコンやサーバー)で動かすための実行環境です。言語ではなく「JavaScript を動かす土台」で、Web サーバー・API・コマンドラインのツール・開発ツールを JavaScript で作れます。2026年10月29日時点で入れるなら、LTS の v26(v26.13.0)です。

この記事でわかること

  • ブラウザの JS との違いと、イベントループの実行順を実行結果で
  • Windows・Mac・Linux のインストール方法と、LTS の選び方
  • HTTP サーバー・npm・ファイル操作・よくあるエラーの原文

2026年10月29日更新|Node.js 22.23.4・26.13.0、Chromium 153、Bun 1.4.4、Deno 2.9.6で実行確認

Node.js は、Google Chrome と同じ JavaScript エンジン(V8)を、ブラウザから取り出して単体で動くようにしたものです。そこに、ファイル・ネットワーク・プロセスを扱う機能(API)と、待ち時間を上手にさばく仕組み(イベントループ)が足されています。

flowchart TD
    J[JavaScript のコード] --> V[V8<br>JS を実行する]
    J --> A[Node.js の API<br>fs・http・crypto など]
    A --> U[libuv<br>イベントループ]
    U --> O[OS<br>ファイル・ネットワーク]

よく調べられることの答えを先にまとめます。

知りたいこと 答え 詳しい節
Node.jsとは JavaScript をブラウザの外で動かす実行環境(言語ではない) Node.jsとは
Node.jsで何ができる Web サーバー・API・CLI ツール・開発ツール・定期処理 Node.jsとは
JavaScriptとNode.jsの違い window・document が無く、ファイルやネットワークを直接扱える ブラウザとの違い
どの版を入れる LTS。2026年10月29日時点は v26(Lithium) LTSとバージョン
Node.js インストール(Windows・Mac) 公式サイトのインストーラー(.msi・.pkg)か、バージョン管理ツール インストール方法
インストールできたか確認 新しいターミナルで node -v と npm -v インストール方法
node js の始め方 node app.js で実行。npm init -y でプロジェクトを作る 使い方
Deno・Bunとの違い どれも JS の実行環境。Node.js が最も広く使われ、情報が多い Deno・Bunとの違い

確認環境:Ubuntu 24.04.5 LTS(2コア)の上で、Node.js 22.23.4(npm 10.9.9)と Node.js 26.13.0 を使いました。26.13.0 は、この環境から nodejs.org のファイルを直接取得できなかったため、npm レジストリで公開されている公式バイナリのパッケージ(node-linux-x64@26.13.0)を作業用のフォルダーに入れ、PATH を切り替えて動かしています。ブラウザとの比較は Chromium 153.0.8010.12(Playwright 1.63.0)で同じスクリプトを実行し、Express 5.3.0、Bun 1.4.4、Deno 2.9.6 も同じ環境で動かしました。サーバーはすべて 127.0.0.1 で起動し、応答は curl 8.5.0 で確かめています。LTS の版と日程は nodejs.org(Previous Releases・リリースノート)と nodejs/Release の schedule.json、Windows・Mac のインストール方法は nodejs.org のダウンロードページ(とそのソース)と Microsoft Learn、npm の更新は npm Docs で確かめました。Windows・Mac の画面の操作は手元で行っていません。図は mermaid-cli 11.16.0 で描画を確かめています(確認日 2026年10月29日)。

本記事の内容は、ご自由にお使いください。
ご利用の際は、出典として本ページへのリンクを記載いただけますようお願いします。

(記載例)出典:株式会社RJC「Node.jsとは?インストール方法と使い方|v26 LTSの実行結果で解説」

Node.jsとは(何ができるのか)

この節では、Node.js が何で、何に使われているのかが分かります。

Node.js は、オープンソースでクロスプラットフォームの JavaScript 実行環境です。 公式の入門ページは「Google Chrome の中核である V8 JavaScript エンジンを、ブラウザの外で動かす」と説明しています。2009年に Ryan Dahl 氏が公開し、いまは OpenJS Foundation のプロジェクトです。

よく混同されますが、Node.js はプログラミング言語ではありません。言語は JavaScript で、Node.js はそれを動かす場所(ランタイム)です。Python のプログラムを python コマンドで動かすのと同じように、JavaScript のファイルを node コマンドで動かします。

1

Web サーバー・API

HTTP サーバーを数行で立てられる。Express・Fastify・Hono・NestJS などのフレームワークがある。

いちばん多い用途

2

リアルタイム通信

チャット・通知・共同編集など、たくさんの接続を同時に保つ処理。WebSocket と相性がよい。

待ち時間が多い処理が得意

3

開発ツール

Vite・webpack・ESLint・Prettier・TypeScript のコンパイラは Node.js の上で動く。React や Vue の開発でも入れる。

フロントエンドでも必須

4

CLI・自動化

ファイルの一括変換、定期処理、社内ツール。npm で配ればすぐに使ってもらえる。

npx で入れずに実行もできる

デスクトップアプリ(Electron)や、サーバーレス(AWS Lambda などの関数の実行環境)でも Node.js が使えます。一方で、動画の変換や大量の数値計算のように CPU を長く使い続ける処理は苦手です。理由は、後の「ブロッキング」の節で実測します。

React・TypeScript・npm との関係

  • React:画面を作るライブラリです。ブラウザで動きます。開発するときのツール(Vite など)を動かすために Node.js を入れます。
  • TypeScript:JavaScript に型を足した言語です。Node.js 22.18.0 以降は、型を取り除くだけで .ts ファイルをそのまま実行できます(後の節で実行)。
  • npm:Node.js に同梱されるパッケージ管理ツールです。Node.js を入れると npm と npx コマンドも使えるようになります。

ブラウザのJavaScriptとNode.jsの違い(同じコードで比較)

この節では、同じ JavaScript をブラウザと Node.js で動かすと、何が違うのかが実行結果で分かります。

言語の文法は同じですが、使える「道具」が違います。 ブラウザには画面(DOM)を操作する道具があり、Node.js にはファイルやプロセスを操作する道具があります。次のスクリプトを、Node.js 22・26 と Chromium 153 で実行しました。

const r = {};
const t = (k, f) => { try { r[k] = f(); } catch (e) { r[k] = e.name + ': ' + e.message; } };
t('typeof window', () => typeof window);
t('typeof document', () => typeof document);
t('typeof process', () => typeof process);
t('typeof require', () => typeof require);
t('typeof fetch', () => typeof fetch);
t('typeof setImmediate', () => typeof setImmediate);
t('typeof localStorage', () => typeof localStorage);
t('typeof alert', () => typeof alert);
t('this === globalThis', () => this === globalThis);
t('document.title', () => document.title);
for (const [k, v] of Object.entries(r)) console.log(k.padEnd(22), v);
調べたもの Node.js 22.23.4 Node.js 26.13.0 Chromium 153
window・documentundefinedundefinedobject
processobjectobjectundefined
requirefunctionfunctionundefined
fetchfunctionfunctionfunction
setImmediatefunctionfunctionundefined
localStorageundefinedundefined(警告あり)object
alertundefinedundefinedfunction
トップの thisglobalThis ではないglobalThis ではないglobalThis
document.titleReferenceErrorReferenceErrorテスト

Node.js 26.13.0 では、最後に次の警告が出ました。26 では localStorage を使うときに、保存先のファイルを --localstorage-file で指定します。

(node:3467) ExperimentalWarning: localStorage is not available because --localstorage-file was not provided.

ブラウザの JavaScript

window・document で画面を操作する

ファイルは使う人が選んだものだけ読める

どのブラウザ・どの版で動くかを選べない

モジュールは import(ES モジュール)

Node.js の JavaScript

画面は無い。process・fs・http を使う

ファイル・ネットワーク・環境変数を直接扱える

動かす Node.js の版を自分で決められる

require(CommonJS)と import の両方が使える

公式の「Node.js とブラウザの違い」のページも、Node.js には document や window が無いこと、ファイルシステムを扱えること、動かす環境(版)を自分で決められることを違いとして挙げています。fetch と setTimeout は両方にあるので、通信やタイマーのコードはそのまま動きます。

Node.jsの仕組み:イベントループとノンブロッキングI/O

この節では、Node.js が1つのスレッドで多くの処理をさばける理由と、コールバックが動く順番が実行結果で分かります。

Node.js は1つのプロセス・1つのメインスレッドで JavaScript を動かし、ファイルの読み込みや通信の「待ち」の間に別の処理を進めます。 この仕組みがイベントループです。公式ドキュメントは、標準ライブラリの入出力(I/O)が非同期で用意されていて、ブロッキングする動きは「例外的」だと書いています。

イベントループは、次の順の段階(フェーズ)を回ります。

  1. 1timerssetTimeout・setInterval の期限が来たもの
  2. 2pending callbacks前の周回から持ち越した一部の I/O
  3. 3idle, prepare内部でだけ使う
  4. 4poll新しい I/O の完了を受け取り、コールバックを動かす
  5. 5checksetImmediate
  6. 6close callbacksソケットを閉じたときの処理など

実行順の実物:同期・nextTick・Promise・setTimeout・setImmediate

console.log('A 同期の1行目');
setTimeout(() => console.log('E setTimeout 0ms'), 0);
setImmediate(() => console.log('F setImmediate'));
Promise.resolve().then(() => console.log('D Promise.then'));
process.nextTick(() => console.log('C process.nextTick'));
console.log('B 同期の最後の行');

同じ中身を order.js(CommonJS)と order.mjs(ES モジュール)に保存して実行しました。

$ node order.js
A 同期の1行目
B 同期の最後の行
C process.nextTick
D Promise.then
E setTimeout 0ms
F setImmediate

$ node order.mjs
A 同期の1行目
B 同期の最後の行
D Promise.then
C process.nextTick
F setImmediate
E setTimeout 0ms

それぞれ100回ずつ実行して、順番を数えました。

ファイル 同期の後 E→F の回数 F→E の回数
order.js(CommonJS)毎回 nextTick → Promise4753
order.mjs(ES モジュール)毎回 Promise → nextTick3763
readFile のコールバックの中で登録―0200(200回中)

1同期のコードが必ず先

コールバックは、いま動いている同期の処理が最後まで終わってから動く。

2nextTick と Promise は形式で逆転

ES モジュールは、読み込み自体が Promise の中で動くため、Promise.then が先に出た。

3setTimeout 0 と setImmediate は不定

トップで登録すると毎回変わった。I/O のコールバックの中では、200回すべて setImmediate が先。公式ドキュメントの説明どおり。

タイマーの順番に頼るコードは書かず、順番が要るなら await でつなぎます。マイクロタスクの考え方は、関連記事「JavaScriptイベントループ|マイクロタスクの実行順を図とクイズで」で扱っています。

ブロッキングすると何が起きるか(Node.jsの得意・不得意を実測)

この節では、Node.js が「待ち」に強く「重い計算」に弱い理由が、応答時間の実測で分かります。

2つの URL を持つサーバーを 127.0.0.1:47232 に立てました。/wait は2秒「待つだけ」、/cpu は2秒「CPU を回し続ける」処理です。

const http = require('node:http');
const { setTimeout: sleep } = require('node:timers/promises');

http.createServer(async (req, res) => {
  const t0 = Date.now();
  if (req.url === '/cpu') {            // CPU を2秒使い続ける(ブロッキング)
    while (Date.now() - t0 < 2000) {}
  } else if (req.url === '/wait') {    // 2秒待つだけ(ノンブロッキング)
    await sleep(2000);
  }
  res.end(`${req.url} ${Date.now() - t0}ms\n`);
}).listen(47232, '127.0.0.1');
--- /wait と /fast を同時に
http://127.0.0.1:47232/fast 応答まで 0.008714s
http://127.0.0.1:47232/wait 応答まで 2.013736s
--- /cpu と /fast を同時に
http://127.0.0.1:47232/cpu 応答まで 2.005603s
http://127.0.0.1:47232/fast 応答まで 1.885164s
--- /cpu を3本同時に
2.003891
4.034421
6.028443
0.009秒/wait の最中の /fast待ちの間はほかの要求を処理できた
1.89秒/cpu の最中の /fast計算が終わるまで何も返せなかった
2.15秒/wait を10本同時/cpu の3本同時は 6.05秒(順番に処理)

待ちが多い処理(DB・API・ファイル)は1つのスレッドでも同時にさばけますが、CPU を使い続ける処理はサーバー全体を止めます。 重い計算は、worker_threads(別スレッド)や別のプロセス・別のサービスに逃がします。

サーバーの中の重い処理

避けるリクエストの処理の中で readFileSync・大きなループ・同期の暗号化(pbkdf2Sync など)を使う
→
代わりにfs/promises などの非同期版を await する。CPU の重い処理は worker_threads かジョブのキューへ

同期版の関数は、起動時の設定の読み込みや CLI ツールなら問題になりにくい

Node.jsのLTSとバージョンの決まり(2026年10月29日時点)

この節では、どの版を入れればよいかと、LTS・Current の意味、サポートが切れる時期が分かります。

仕事や学習で使うなら、LTS(Long Term Support:長期サポート)の版を入れます。 公式の Previous Releases のページは「本番のアプリケーションは Active LTS か Maintenance LTS の版だけを使うべき」としています。2026年10月28日に v26.13.0 が出て、Node.js 26 が LTS(コードネーム Lithium)になりました。

版 コードネーム 状態(2026年10月29日時点) 最新 サポート終了
v26LithiumActive LTS(2026年10月28日から)v26.13.02029年4月30日
v24KryptonMaintenance LTS(2026年10月20日から)v24.22.22028年4月30日
v22JodMaintenance LTSv22.23.42027年4月30日
v20Ironサポート終了v20.20.22026年4月30日
v25―サポート終了(奇数の版)v25.9.02026年6月1日
  • Current:出たばかりの版。6か月の間 Current で、ライブラリの作者が対応する期間です。
  • Active LTS:不具合の修正と、安全に入れられる改善が入る期間です。
  • Maintenance LTS:重大な不具合とセキュリティの修正だけが入る期間です。公式は、LTS は合計でおよそ30か月、重大な不具合が直されるとしています。
  • サポート終了(EOL):セキュリティの修正も出ません。v20 以前は入れ替えます。

2026年からリリースの決まりが変わる

これまでは「偶数の版が LTS になり、奇数の版は6か月で終わる」という決まりでした。公式のページによると、この決まりは Node.js 26 までです。Node.js 27 からはリリースが年1回になり、6か月の Alpha と6か月の Current を経て、すべての版が LTS になります。schedule.json では v27 の Alpha が2026年10月28日、Current が2027年4月22日、LTS が2027年10月20日の予定です。

手元の Node.js で、いま動いている版が LTS かどうかは、次で分かります(LTS でなければ undefined)。

$ node -p 'process.release.lts'
Jod
$ /path/to/node26/bin/node -p 'process.release.lts'
Lithium

Node.jsのインストール方法(Windows・Mac・Linux)

この節では、Node.js を各 OS に入れる方法と、入ったかを確かめる方法が分かります。

公式のダウンロードページ(nodejs.org/ja/download)で、OS と入れ方を選ぶと、手順やファイルが表示されます。 ページのソースで確かめた、OS ごとの選択肢です(2026年10月29日時点。既定の版は v26.13.0 LTS)。

OS インストーラー・ファイル 選べるツール
WindowsWindows Installer(.msi)・単体のバイナリ(.zip)Chocolatey・Docker・Vite+・0install
macOSmacOS Installer(.pkg)・単体のバイナリ(.tar.gz)nvm・fnm・Homebrew・Docker・n・asdf・Vite+・0install
Linux単体のバイナリ(.tar.xz)nvm・fnm・Homebrew・Docker・n・asdf・Vite+・0install

ダウンロードページには「これらのツールとインストールのスクリプトは Node.js のプロジェクトが保守しているものではない」という注記があります。困ったときは、それぞれのツールの公式サイトを見ます。

Windows:インストーラー(.msi)で入れる

1

公式のダウンロードページを開く

nodejs.org のダウンロードページで、版に「LTS」と付いたもの(v26.13.0)と、OS に Windows、CPU に x64 か ARM64 を選ぶ。

32ビット(x86)は v23 から提供されていない

2

Windows Installer(.msi)を取得して実行

画面の案内に沿って進める。npm も一緒に入る。

ダウンロードページの表示名

3

新しいターミナルで確かめる

PowerShell かコマンドプロンプトを開き直して node -v と npm -v を打つ。開いたままの画面には、新しい PATH が入っていない。

v26.13.0 と表示されれば成功

複数の版を切り替えたいときは、Microsoft Learn(2026年9月27日更新)が nvm-windows を勧めています。その場合は、先に入れた Node.js(C:\Program Files\nodejs など)を消してから入れるよう、同じページに書かれています。

macOS:インストーラー(.pkg)か Homebrew・nvm で入れる

ダウンロードページで macOS を選び、macOS Installer(.pkg)を開いて案内に沿って進めます。Apple シリコンの Mac は ARM64 です。Homebrew を使うときのダウンロードページのコマンドです。

# Download and install Node.js:
brew install node@26

Linux:nvm で入れる(ダウンロードページの既定)

Linux・macOS でダウンロードページの既定になっているのが nvm です。ページに表示されるコマンドは次のとおりです(v26 を選んだとき)。

# Download and install nvm:
curl -o- https://raw.githubusercontent.com/nvm-sh/nvm/v0.40.8/install.sh | bash

# in lieu of restarting the shell
\. "$HOME/.nvm/nvm.sh"

# Download and install Node.js:
nvm install 26

Ubuntu の標準のリポジトリの版にも注意が要ります。Ubuntu 24.04 で apt-cache policy を見ると、候補は次の版でした。

$ apt-cache policy nodejs npm
nodejs:
  Installed: (none)
  Candidate: 18.19.1+dfsg-6ubuntu5
npm:
  Installed: (none)
  Candidate: 9.2.0~ds1-2

Node.js 18 は2025年4月30日にサポートが終わっています。 Ubuntu で sudo apt install nodejs とすると 18 が入るため、LTS を使うなら nvm などで入れます。

インストールの確認(node -v・npm -v・REPL)

$ node -v
v22.23.4
$ npm -v
10.9.9
$ npx -v
10.9.9
$ which node
/opt/node22/bin/node

node とだけ打つと、1行ずつ JavaScript を試せる対話モード(REPL)になります。.exit か Ctrl+D で終わります。

$ node
Welcome to Node.js v22.23.4.
Type ".help" for more information.
> 1 + 2
3
> const s = "Node.js"
undefined
> s.length
7
> [1,2,3].map(n => n * 2)
[ 2, 4, 6 ]
> .exit
  • 1node -v で LTS の版が出る2026年10月29日時点なら v26.13.0。v20 以前ならサポート終了
  • 2npm -v と npx -v も出る出なければ PATH の設定を見直す
  • 3which node(Windows は where node)が1か所だけ2か所に入っていると、思った版と違う版が動く
  • 4node -p 'process.release.lts' に名前が出るLithium・Krypton・Jod なら LTS

nvm・fnmなどNode.jsのバージョン管理と切り替え

この節では、プロジェクトごとに Node.js の版を変える方法と、版が合わないときに出るメッセージが分かります。

複数のプロジェクトを触るなら、最初からバージョン管理ツールで入れておくと、版の切り替えで困りません。 どれも「版ごとにフォルダーを分けて入れ、PATH の先頭を差し替える」仕組みです。手元では、Node.js 22 と 26 を PATH で切り替えて、同じフォルダーで動かしました。

$ which node; node -v
/opt/node22/bin/node
v22.23.4
$ PATH=/path/to/node26/bin:$PATH node -v
v26.13.0
ツール 対応 OS 版を入れる・使う
nvmmacOS・Linux・WSLnvm install 26・nvm use 26
nvm-windowsWindowsnvm install <版>・nvm use <版>・nvm ls
fnmmacOS・Linux(ダウンロードページの選択肢)fnm install 26
Volta・mise・asdf複数の OSプロジェクトに版を固定する機能がある

package.json の engines に版を書いておくと、違う版で npm install したときに警告が出ます。"engines": { "node": ">=26" } と書いて、Node.js 22 で入れた結果です。

npm warn EBADENGINE Unsupported engine {
npm warn EBADENGINE   package: 'eng@1.0.0',
npm warn EBADENGINE   required: { node: '>=26' },
npm warn EBADENGINE   current: { node: 'v22.23.4', npm: '10.9.9' }
npm warn EBADENGINE }

--engine-strict を付けると npm error code EBADENGINE で止まり、Node.js 26 に切り替えると同じコマンドが通りました。ツールごとの違いと速さの実測は、関連記事「Node.js バージョン管理|nvm・fnm・mise・Volta比較と実測」で扱っています。

Node.jsの使い方:最初のプログラムとファイル操作

この節では、JavaScript のファイルを Node.js で実行する方法と、ファイルを読み書きする基本が分かります。

ファイルに JavaScript を書き、node ファイル名 で実行します。 1行だけなら -e(実行)か -p(実行して結果を表示)でも動きます。

$ echo 'console.log("Hello, Node.js")' > hello.js
$ node hello.js
Hello, Node.js
$ node -e 'console.log(1+2)'
3
$ node -p 'require("node:os").platform() + " " + require("node:os").cpus().length + "コア"'
linux 2コア

ファイルを読み書きする(fs/promises)

ファイル操作は、組み込みの node:fs/promises を使います。import.meta.dirname は、そのスクリプトがあるフォルダーです(Node.js 20.11 以降)。

import { readFile, writeFile, appendFile, readdir, stat, mkdir } from 'node:fs/promises';
import path from 'node:path';

const dir = path.join(import.meta.dirname, 'data');
await mkdir(dir, { recursive: true });

const file = path.join(dir, 'memo.txt');
await writeFile(file, '1行目\n', 'utf8');           // 作る(上書き)
await appendFile(file, '2行目\n', 'utf8');          // 末尾に足す
const text = await readFile(file, 'utf8');          // 読む
console.log(text.trimEnd());

const info = await stat(file);
console.log('サイズ', info.size, 'バイト');
console.log('一覧', await readdir(dir));

try {
  await readFile(path.join(dir, 'nothing.txt'), 'utf8');
} catch (err) {
  console.log(err.code, '-', err.message);
}
$ node files.mjs
1行目
2行目
サイズ 16 バイト
一覧 [ 'memo.txt' ]
ENOENT - ENOENT: no such file or directory, open '/srv/s4/r17/t23/fs/data/nothing.txt'

日本語は1文字3バイト(UTF-8)なので、「1行目\n2行目\n」は16バイトです。err.code の ENOENT は「ファイルが無い」という意味で、エラーの種類はこの code で分けます。API の一覧は関連記事「Node.js fs/promisesの使い方|ファイル操作APIをコード例で一覧」で、パスの組み立ては関連記事「Node.js pathモジュールの使い方|joinとresolveの違い早見表」で扱っています。

Node.jsで最初のHTTPサーバーを作る

この節では、追加のパッケージを入れずに、Node.js だけで Web サーバーを動かす方法が分かります。

組み込みの node:http だけで、HTTP サーバーが作れます。 公式の入門ページの例を、日本語と JSON を返す形にしました。

import { createServer } from 'node:http';

const hostname = '127.0.0.1';
const port = 47233;

const server = createServer((req, res) => {
  if (req.url === '/api/time') {
    res.writeHead(200, { 'Content-Type': 'application/json; charset=utf-8' });
    res.end(JSON.stringify({ now: new Date().toISOString(), node: process.version }));
    return;
  }
  res.writeHead(200, { 'Content-Type': 'text/plain; charset=utf-8' });
  res.end('こんにちは、Node.js\n');
});

server.listen(port, hostname, () => {
  console.log(`Server running at http://${hostname}:${port}/`);
});
$ npm start
> hello@1.0.0 start
> node server.js

Server running at http://127.0.0.1:47233/

$ curl -i http://127.0.0.1:47233/
HTTP/1.1 200 OK
Content-Type: text/plain; charset=utf-8
Date: Thu, 29 Oct 2026 10:19:45 GMT
Connection: keep-alive
Keep-Alive: timeout=5
Transfer-Encoding: chunked

こんにちは、Node.js

$ curl http://127.0.0.1:47233/api/time
{"now":"2026-10-29T10:19:45.154Z","node":"v22.23.4"}

サーバーは Ctrl+C で止めます。charset=utf-8 を付けないと、ブラウザによっては日本語が文字化けします。127.0.0.1 で待ち受けると自分のパソコンからだけ開け、0.0.0.0 にすると同じネットワークのほかの機器からも開けるようになります。

保存したら自動で再起動する(--watch)

手元の Node.js 22・26 では、node --watch でファイルの変更を見張り、保存すると自動で再起動します。nodemon を入れなくても動きます。

$ node --watch server.js
Server running at http://127.0.0.1:47233/
Restarting 'server.js'
Server running at http://127.0.0.1:47233/

Node.js 26.13.0 では、Restarting の前に Change detected in '/srv/s4/r17/t23/hello/server.js' の1行も出ました。

npmとpackage.jsonの使い方(Expressを入れて動かす)

この節では、npm でプロジェクトを作り、パッケージを入れて動かすまでの流れと、ES モジュールの設定が分かります。

npm は、ほかの人が作ったパッケージを入れ、プロジェクトの情報を package.json に記録する道具です。 まずフォルダーを作って npm init -y を実行します。

$ npm init -y
Wrote to /srv/s4/r17/t23/hello/package.json:

{
  "name": "hello",
  "version": "1.0.0",
  "description": "",
  "main": "index.js",
  "scripts": {
    "test": "echo \"Error: no test specified\" && exit 1"
  },
  "keywords": [],
  "author": "",
  "license": "ISC"
}

ES モジュール(import/export)で書くために type を、よく使うコマンドを scripts に足します。npm pkg set を使うと、JSON を手で編集せずに済みます。

npm pkg set type=module
npm pkg set scripts.start="node server.js" scripts.dev="node --watch server.js"
npm install express
$ npm pkg get dependencies
{
  "express": "^5.3.0"
}
$ npm ls --depth=0
hello@1.0.0 /srv/s4/r17/t23/hello
`-- express@5.3.0
できたもの 中身 Git に入れるか
package.json名前・scripts・dependencies(express ^5.3.0)入れる
package-lock.json実際に入った全パッケージの版(lockfileVersion 3)入れる
node_modules/パッケージ本体。express 1つで65個・4.4MB入れない(.gitignore)

node_modules を消して npm ci を実行すると、package-lock.json のとおりに0.8秒で入り直しました(最初の npm install express は4.1秒)。ほかの人がプロジェクトを受け取ったときや CI では npm ci を使います。

Express で書いた小さな API です。

import express from 'express';

const app = express();
app.use(express.json());

const todos = [];
app.get('/todos', (req, res) => res.json(todos));
app.post('/todos', (req, res) => {
  const todo = { id: todos.length + 1, title: req.body.title };
  todos.push(todo);
  res.status(201).json(todo);
});

app.listen(47234, '127.0.0.1', () => console.log('listening on 127.0.0.1:47234'));
$ curl -X POST -H 'Content-Type: application/json' -d '{"title":"Node.jsを入れる"}' http://127.0.0.1:47234/todos
{"id":1,"title":"Node.jsを入れる"} 201
$ curl http://127.0.0.1:47234/todos
[{"id":1,"title":"Node.jsを入れる"}]

npx:入れずに1回だけ実行する

$ npx -y cowsay@1.6.0 "Node.js"
 _________
< Node.js >
 ---------
        \   ^__^
         \  (oo)\_______
            (__)\       )\/\
                ||----w |
                ||     ||

npm を新しくする

npm Docs は、macOS・Linux では npm install -g npm@latest で npm を最新にできるとしています。2026年10月29日時点の最新は npm 12.2.1 で、package.json の engines は ^22.22.2 || ^24.15.0 || >=26.0.0 でした。これより前の Node.js では npm 12 は対象外です。Windows では、Node.js のインストーラーが入れた npm が PATH の先にあるため、npm Docs に別の手順が書かれています。コマンドの一覧は関連記事「npm コマンド 一覧|package.json 書き方と実行結果・npm 12対応」で扱っています。

CommonJS(require)と ES モジュール(import)

ファイル 扱われ方 書き方
.mjs必ず ES モジュールimport・export
.cjs必ず CommonJSrequire・module.exports
.js(package.json に "type": "module")ES モジュールimport
.js(type なし)CommonJS。import があれば ES モジュールとして読み直す両方動くが警告が出る

type の無い package.json があるフォルダーで、import を書いた .js を Node.js 22 で実行すると、動いたうえで次の警告が出ました。

(node:11967) [MODULE_TYPELESS_PACKAGE_JSON] Warning: Module type of file:///srv/s4/r17/t23/err/typeless/imp.js is not specified and it doesn't parse as CommonJS.
Reparsing as ES module because module syntax was detected. This incurs a performance overhead.
To eliminate this warning, add "type": "module" to /srv/s4/r17/t23/err/typeless/package.json.

新しく作るプロジェクトは "type": "module" にしておくと迷いません。混在したときの直し方は、関連記事「Node.js ESMとCommonJSの違い|import混在の解決表」で扱っています。

Node.js・Deno・Bunの違い(同じコードで比較)

この節では、Node.js と、後から出た JavaScript の実行環境 Deno・Bun の違いが、同じコードを動かした結果で分かります。

Deno と Bun も、JavaScript と TypeScript をブラウザの外で動かす実行環境です。 どちらも Node.js の API(node: で始まるモジュール)と npm のパッケージを動かせるように作られています。次のコードを3つで実行しました。

import { readFile } from 'node:fs/promises';
import { createServer } from 'node:http';
const text = await readFile(new URL(import.meta.url), 'utf8');
console.log('読めた行数', text.split('\n').length);
const s = createServer((q, r) => r.end('ok')).listen(0, '127.0.0.1', async () => {
  const res = await fetch(`http://127.0.0.1:${s.address().port}/`);
  console.log('HTTP', res.status, await res.text()); s.close();
});

Node.js と Bun はそのまま動きました。Deno は、許可を与えないとファイルを読めずに止まりました(-A ですべて許可すると動いた)。

$ deno run same.mjs
error: Uncaught (in promise) NotCapable: Requires read access to "/srv/s4/r17/t23/rt/same.mjs", run again with the --allow-read flag
Node.js Deno Bun
手元の版22.23.4・26.13.02.9.61.4.4
エンジンV8V8JavaScriptCore
上のコードそのまま動いた許可(-A など)が要ったそのまま動いた
.ts の実行型を消すだけ(enum は不可)そのままそのまま
起動時間(中央値・30回)43ms(22)・40ms(26)21ms4ms
最大メモリ(hi.js)43MB・44MB27MB13MB
情報・事例の多さ最も多いNode.js より少ないNode.js より少ない

起動時間は console.log("hi") だけのファイルを30回ずつ起動した中央値です。Bun の公式ドキュメントは「Node.js で動くのに Bun で動かないパッケージは Bun の不具合とみなす」としていて、Deno の公式ドキュメントは「ほとんどの Node.js のコードはそのまま動く」としています。学ぶ順番としては Node.js から始めると、書籍・記事・エラーの検索結果が最も多く、ほかの2つにもそのまま応用できます。

TypeScript をそのまま動かす

Node.js は 22.18.0(23 系は 23.6.0)から、型の部分を取り除くだけで .ts を実行できます。手元の 22.23.4 と 26.13.0 では、const n: number = 1; の .ts が警告なしで動きました。ただし enum のように JavaScript に書き換えが要る構文は止まります。

$ node enum.ts
SyntaxError [ERR_UNSUPPORTED_TYPESCRIPT_SYNTAX]: TypeScript enum is not supported in strip-only mode

Node.js は tsconfig.json を読まないため、paths の別名やデコレーターも使えません(公式ドキュメント)。そうした機能を使うときは、tsx などのツールか、tsc でビルドしてから実行します。

Node.jsのよくあるエラーと直し方(原文つき)

この節では、Node.js を始めたときによく出るエラーの原文と、原因・直し方が分かります。

エラーは、1行目の種類(Error・ReferenceError など)と、code(ENOENT・EADDRINUSE など)を見ると原因が分かります。 すべて手元で出した原文です。

出た文言(原文) 原因 直し方
bash: line 1: node: command not foundNode.js が PATH に無い入れ直すか、ターミナルを開き直す。which node で確かめる
Error: Cannot find module '/srv/s4/r17/t23/err/app.js'指定したファイルが無い・フォルダーが違うpwd と ls で場所とファイル名を確かめる
Error: Cannot find module 'express'パッケージを入れていないそのフォルダーで npm install express
ReferenceError: document is not definedブラウザ用のコードを Node.js で動かした画面の操作はブラウザで。Node.js では使えない
ReferenceError: require is not defined in ES module scope, you can use import insteadES モジュールの中で require を使ったimport に書き換えるか、ファイルを .cjs にする
Error: listen EADDRINUSE: address already in use 127.0.0.1:47233同じポートでサーバーが動いている前のサーバーを止める(Ctrl+C)か、ポートを変える
Error: ENOENT: no such file or directory, open 'nothing.txt'読もうとしたファイルが無い。相対パスは実行した場所から数えるimport.meta.dirname か __dirname を起点にする
TypeError: fetch failed(cause は ECONNREFUSED)接続先のサーバーが動いていないerr.cause.code を表示して原因を見る
npm error Missing script: "build"package.json の scripts に無い名前npm run で一覧を見る
npm error enoent Could not read package.jsonpackage.json の無いフォルダーで npm を実行したプロジェクトのフォルダーへ移る

EADDRINUSE の全文です。code・address・port が最後に並びます。

node:events:497
      throw er; // Unhandled 'error' event
      ^

Error: listen EADDRINUSE: address already in use 127.0.0.1:47233
    at Server.setupListenHandle [as _listen2] (node:net:1941:16)
    ...
  code: 'EADDRINUSE',
  errno: -98,
  syscall: 'listen',
  address: '127.0.0.1',
  port: 47233
}

Node.js v22.23.4

グローバルインストールで権限エラー(EACCES)が出たとき

避けるsudo npm install -g で押し切る。root のファイルが混ざり、次の更新でまた止まる
→
代わりにnvm などで自分のホームに Node.js を入れ直すか、npm Docs の手順で prefix を自分のフォルダーにする

npm Docs も、権限のエラーを避ける方法としてバージョン管理ツールでの入れ直しを挙げている

判断表:Node.jsの入れ方・版・実行環境の選び方

この節では、状況ごとに、どの入れ方とどの版を選べばよいかが分かります。

状況 選ぶもの 理由
Windows で、まず1つ動かしたい公式の .msi(v26 LTS)手順が少なく npm も入る
Windows で、案件ごとに版が違うnvm-windows(または WSL の中で nvm)Microsoft Learn が勧めている
Mac で、まず1つ動かしたい公式の .pkg か brew install node@26Homebrew をすでに使っているなら後者
Mac・Linux で、複数の版を使うnvm か fnmダウンロードページの既定・推奨
Ubuntu で apt を使いたい標準のリポジトリは避ける24.04 の候補はサポート終了の 18.19.1
新しく作るプロジェクトv26(Active LTS)サポートが2029年4月まで続く
v22・v24 で動いているシステムそのまま使い、更新を計画するv22 は2027年4月、v24 は2028年4月まで
v20 以前で動いているシステムLTS の版へ上げるセキュリティの修正が出ない
CI・コンテナDocker の node:26-slim など、版を固定手元と同じ版で動かせる

よくある質問

Q. Node.jsとは何ですか?簡単に言うと? A. JavaScript を、ブラウザの外(パソコンやサーバー)で動かすための実行環境です。Chrome と同じ V8 エンジンを使っています。Web サーバー・API・開発ツールを JavaScript で作れます。

Q. Node.js はプログラミング言語ですか? A. 言語ではありません。言語は JavaScript で、Node.js はそれを動かす土台(ランタイム)です。

Q. Node.js は無料ですか? A. 無料のオープンソースソフトウェアで、MIT ライセンスで公開されています。仕事で使う場合も費用はかかりません。

Q. どのバージョンをインストールすればよいですか? A. LTS の最新です。2026年10月29日時点では v26.13.0(Lithium)です。案件や教材で版が決まっているときは、その版に合わせます。

Q. Node.js をインストールすると npm も入りますか? A. 入ります。公式のインストーラーや nvm で入れると、npm と npx も使えるようになります。npm -v で確かめられます。

Q. React や Vue を使うだけでも Node.js は要りますか? A. 開発するときは要ります。Vite などの開発サーバーやビルドのツールが Node.js の上で動くためです。できあがったファイルはブラウザで動くので、公開先のサーバーに Node.js が要るとは限りません。

Q. インストールしたのに node -v が動きません。 A. ターミナルを開き直します。それでも command not found なら、PATH に Node.js のフォルダーが入っていません。インストーラーを入れ直すか、バージョン管理ツールの設定(シェルの設定ファイルへの追記)を確かめます。

Q. Node.js をアンインストールするには? A. 入れた方法で消します。.msi・.pkg で入れたならその OS のアプリの削除の手順で、Homebrew なら brew uninstall node@26、nvm なら nvm uninstall 26 です。複数の方法で入れていると、片方を消しても別の版が残ります。which node(Windows は where node)で残りを確かめます。

Q. Node.js の以前の版と新しい版はどう違いますか? A. 新しい版ほど、組み込みの機能が増えています。手元では、Node.js 22・26 とも fetch・--watch・.ts の実行が組み込みで使えました。以前の版のまま使い続けると、npm 12 のように新しいツールが対応しない版になっていきます。

Q. Node.js と Deno・Bun はどれを学べばよいですか? A. まず Node.js です。情報と事例が最も多く、Deno と Bun も Node.js の API を動かせるように作られているため、覚えたことがそのまま使えます。

Q. Node.js は重い処理に向いていませんか? A. 1つのスレッドで JavaScript を動かすため、CPU を使い続ける処理の間はほかの要求を返せません。手元の実測では、2秒の計算の最中に来た要求は1.89秒待たされました。重い計算は worker_threads や別のサービスに分けます。

まとめ

  • Node.js は、V8 エンジンで JavaScript をブラウザの外で動かす実行環境。言語ではない。Web サーバー・API・CLI・開発ツールに使う。
  • ブラウザとは道具が違う。window・document が無く、process・fs・http がある。fetch と setTimeout は両方にある。
  • イベントループで「待ち」をさばく。待つだけの処理は10本同時でも2.15秒で返ったが、CPU を使い続ける処理は他の要求を止めた。
  • 入れるなら LTS。2026年10月29日時点は v26.13.0(Lithium・2029年4月まで)。Node.js 27 からは年1回のリリースで、すべての版が LTS になる。
  • Windows・Mac は公式のインストーラー、複数の版を使うなら nvm・fnm・nvm-windows。入れたら新しいターミナルで node -v と npm -v を確かめる。

参考・出典

確認日はいずれも 2026年10月29日です。

  • Node.js「Introduction to Node.js」:https://nodejs.org/en/learn/getting-started/introduction-to-nodejs
  • Node.js「Differences between Node.js and the Browser」:https://nodejs.org/en/learn/getting-started/differences-between-nodejs-and-the-browser
  • Node.js「The Node.js Event Loop」:https://nodejs.org/en/learn/asynchronous-work/event-loop-timers-and-nexttick
  • Node.js「Previous Releases」:https://nodejs.org/en/about/previous-releases
  • Node.js「Node.js 26.13.0 (LTS)」:https://nodejs.org/en/blog/release/v26.13.0
  • Node.js「Download Node.js」:https://nodejs.org/ja/download
  • nodejs/Release「schedule.json」:https://github.com/nodejs/Release/blob/main/schedule.json
  • Node.js ドキュメント「Modules: TypeScript」:https://nodejs.org/api/typescript.html
  • Microsoft Learn「Install Node.js on Windows」:https://learn.microsoft.com/en-us/windows/dev-environment/javascript/nodejs-on-windows
  • npm Docs「Try the latest stable version of npm」:https://docs.npmjs.com/try-the-latest-stable-version-of-npm
  • npm Docs「Resolving EACCES permissions errors when installing packages globally」:https://docs.npmjs.com/resolving-eacces-permissions-errors-when-installing-packages-globally
  • Deno「Node and npm Compatibility」:https://docs.deno.com/runtime/fundamentals/node/
  • Bun「Node.js compatibility」:https://bun.com/docs/runtime/nodejs-compat

本記事の内容は、ご自由にお使いください。
ご利用の際は、出典として本ページへのリンクを記載いただけますようお願いします。

(記載例)出典:株式会社RJC「Node.jsとは?インストール方法と使い方|v26 LTSの実行結果で解説」

株式会社RJC ― SI事業・SES事業・AI駆動開発。RJCは一緒に成長を楽しめる会社です。

WE ARE HIRING

RJCで一緒に開発しながら、
成長を楽しみませんか?

RJCは、Web・モバイル・AIを活用した開発プロジェクトで、テックリードやPM・PMOも活躍するシステム開発会社です。会社を知る、待遇を確かめる、話を聞いてみる。気になるところ見てみてください!

  • 127日年間休日
  • 12時間平均残業時間
  • 毎日ガチャ遊びココロも大切にする福利厚生。アマギフなどの賞品ラインナップ!

ほかにも、チケットレストラン、書籍読み放題、2年ごとの慰労報奨(休暇 or 金一封)、11期連続の黒字決算。

ABOUT RJC RJCがどんな会社か知る 考え方、研修、働き方、福利厚生、社員の前職まで。RJCのことが丸わかり! RJC丸わかりページへ JOB DESCRIPTION 仕事内容・待遇を見てみる 仕事内容、給与・待遇、選考の流れ。経験者も未経験も!応募前に知りたいこと、まとめました! 募集要項を見る ENTRY エントリーする エントリーは1〜2分・履歴書不要です。まずは話を聞いてみたい、という方でも歓迎です! エントリーフォームへ

RJCで一緒に開発しながら、 成長を楽しみませんか?