1.

Node.js 完全ガイド — V8/イベントループ/npm/Express/NestJS

編集
この記事の要点
  • Node.js は V8 エンジン + libuv で動くサーバサイド JavaScript ランタイム (2009 年 -)
  • 特徴: シングルスレッド + イベントループ + ノンブロッキング I/O で高並列処理
  • npm レジストリは世界最大級 (200 万パッケージ超)
  • 主要フレームワーク: Express (最古参) / Fastify (高速) / NestJS (Angular 風) / Hono (エッジ対応)
  • LTS バージョン管理は nvm / Volta / fnm が便利。2026 現在 v22 が Active LTS

Node.js とは

Node.js は、Google 製の V8 JavaScript エンジンを OS 上で直接動かすためのランタイム環境です。2009 年に Ryan Dahl が公開し、それまでブラウザでしか動かなかった JavaScript をサーバサイドで動かす道を開きました。

非同期 I/O ライブラリ libuv を組み合わせたシングルスレッド + イベントループで、少数のスレッドで何万もの同時接続を捌けるのが強みです。

アーキテクチャ

+---------------------------------------+
|  JavaScript アプリケーションコード      |
+---------------------------------------+
|  Node.js Standard Library (fs/http/…) |
+---------------------------------------+
|  Node Bindings (C++)                  |
+---------------------+-----------------+
|     V8 エンジン     |     libuv       |
| (JIT / GC)          | (Event Loop)    |
|                     | (Thread Pool)   |
+---------------------+-----------------+
|     OS Kernel                          |
+---------------------------------------+

イベントループ

Node.js のイベントループは 6 フェーズで構成されます:

フェーズ処理対象
1. TimerssetTimeout / setInterval のコールバック
2. Pending callbacksI/O の延期コールバック (TCP エラー等)
3. Idle, prepare内部処理
4. Poll新しい I/O イベントを取得 / コールバック実行
5. ChecksetImmediate のコールバック
6. Close callbackssocket.on("close", …) など

各フェーズ間で process.nextTickPromise (microtask) が優先実行されます。

最小 HTTP サーバ

// server.mjs (ESM)
import http from 'node:http';

const server = http.createServer((req, res) => {
  res.writeHead(200, { 'Content-Type': 'application/json' });
  res.end(JSON.stringify({ message: 'Hello, Node.js' }));
});

server.listen(3000, () => {
  console.log('Listening on http://localhost:3000');
});

// 実行
// node server.mjs

npm エコシステム

Node.js とセットで配布される npm (Node Package Manager) は、世界最大のパッケージレジストリです。

# パッケージ初期化
npm init -y

# 依存追加
npm install express                    # 本番依存
npm install -D typescript @types/node  # 開発専用

# スクリプト実行 (package.json の "scripts")
npm run dev
npm run build
npm test

# 監査
npm audit
npm audit fix

# パッケージ更新
npm outdated
npm update

# グローバルインストール
npm install -g pm2

主要フレームワーク

フレームワーク特徴用途
Express2010 -。事実上の標準。ミニマル / ミドルウェア型REST API 全般
FastifyExpress より 2-3 倍速い。スキーマバリデーション内蔵高負荷 API
NestJSAngular 風 DI / デコレータ / モジュールエンタープライズ
KoaExpress 作者の後継。async/await ベースモダンな API
Honoエッジ / Cloudflare Workers 対応の超軽量エッジ API
tRPC型安全な RPC。React と相性◎フロント+バックの型共有

Express の例

import express from 'express';

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

app.get('/users/:id', async (req, res) => {
  const user = await db.user.findById(req.params.id);
  res.json(user);
});

app.post('/users', async (req, res) => {
  const created = await db.user.create(req.body);
  res.status(201).json(created);
});

app.listen(3000);

NestJS の例

@Controller('users')
export class UsersController {
  constructor(private readonly users: UsersService) {}

  @Get(':id')
  findOne(@Param('id') id: string) {
    return this.users.findOne(id);
  }

  @Post()
  create(@Body() dto: CreateUserDto) {
    return this.users.create(dto);
  }
}

用途別の Node.js 使い所

  • API サーバ: REST / GraphQL / gRPC のサーバ実装
  • BFF (Backends for Frontends): フロント特化の中間サーバ
  • SSR: Next.js / Nuxt / Remix のサーバ部
  • ビルドツール: Webpack / Vite / esbuild / Rollup の実行基盤
  • CLI ツール: ESLint / Prettier / npm-scripts
  • WebSocket / リアルタイム: Socket.IO / ws ライブラリ
  • バッチ / 定期処理: cron-like なスケジューラ
  • Discord/Slack bot: 公式 SDK が Node 対応

TypeScript との組み合わせ

# TypeScript + tsx (高速実行)
npm install -D typescript tsx @types/node
npx tsc --init

# 開発時実行
npx tsx watch src/server.ts

# 本番ビルド
npx tsc

# Node 22+ なら .ts を直接 (実験的)
node --experimental-strip-types src/server.ts

Deno / Bun との比較

項目Node.jsDenoBun
エンジンV8V8JavaScriptCore
初版200920202022
TS 対応要トランスパイル (v22 で実験)ネイティブネイティブ
セキュリティ制限なしデフォルト拒否 / 明示許可制限なし
npm 互換○ (v1.25+)
パッケージ管理npm/yarn/pnpmURL import / npmbun install
速度 (起動)普通普通★★ 最速
エコシステム★★★ 最大

バージョン管理 (nvm / Volta)

# nvm (Linux/macOS)
nvm install 22
nvm use 22
nvm alias default 22

# Windows は nvm-windows
nvm install 22.0.0
nvm use 22.0.0

# Volta (推奨。プロジェクト単位でピン留め)
curl https://get.volta.sh | bash
volta install node@22
volta pin node@22.0.0  # package.json に記録

# fnm (Rust 製 / 軽量)
fnm install 22
fnm use 22

FAQ

Q: Node はシングルスレッドというが CPU が複数あれば?
A: cluster モジュールや worker_threads、PM2 / Node Cluster で複数プロセス / 複数スレッド化できます。

Q: LTS と Current の違いは?
A: 偶数番号は LTS (Long Term Support, 30 ヶ月サポート)。奇数番号は短命 (Current 6 ヶ月)。本番は LTS のみ使用。

Q: Express で十分か NestJS が必要か?
A: ルーティング数百以下・小規模 → Express で十分。チーム開発・モジュール構造重視・テスト容易性 → NestJS。

📸 参考画像

※ 旧バージョンから引き継いだ参考画像です。手順・図解の補助としてご覧ください。

参考画像

編集
Post Share
子ページ
  1. インストール方法(Windows編)
  2. インストール方法(CentOS編)
  3. クイックスタート
  4. 簡単なサーバー構築と起動方法
  5. ExpressとEJSを使用した簡単なアプリの作成
同階層のページ

同階層のページはありません

最近更新/作成されたページ