Node.js は、JavaScript を ブラウザの外 — サーバー、CLI、ツールチェーン上で — 実行できるランタイムです。Chrome の V8 エンジンの上に構築され、スケーラブルなネットワークアプリケーション向けに設計されたノンブロッキングでイベント駆動の I/O モデルを加えています。
中心となる考え方: シングルスレッドのノンブロッキング I/O
js
fs = ();
fs.(, , {
.();
});
.();
Node はあなたの JS を 1 つのメインスレッドで実行しますが、I/O(ファイル、ネットワーク、DB)をシステムへ委譲して実行を続けます。I/O が完了すると、コールバックが実行されます。これが、1 つの Node プロセスがリクエストごとにスレッドを持つことなく 数千の同時接続 を処理できる理由です。
✓ APIs & web servers (REST, GraphQL) — I/O-bound, many concurrent requests
✓ Real-time apps (chat, live updates) — WebSockets, event-driven model fits well
✓ Microservices — lightweight, fast startup
✓ CLIs & build tools (the entire npm/Vite/webpack ecosystem)
✓ Streaming (video, large files) via streams
✗ CPU-heavy work (image processing, big computations) — blocks the single thread
→ offload to worker threads, a queue, or another service
あなたの JS についてはシングルスレッドであるため、重い CPU 処理はすべてをブロックします。Node は CPU バウンドではなく I/O バウンド のワークロードで真価を発揮します。
Same language front-end and back-end → shared code/types, one skill set,
huge npm ecosystem (the largest package registry).
Node.js は JavaScript をサーバーへ持ち込み、ノンブロッキングでイベント駆動のモデルを普及させました。これにより、I/O 集約的で高並行性 のアプリケーション(API、リアルタイム、マイクロサービス)に優れています。
なぜスケールするのか(シングルスレッド上の非同期 I/O)と、どこで苦戦するのか(CPU バウンドの処理)を理解することが、それをうまく使うための基礎です。これは現代のほとんどの JavaScript バックエンドとツールチェーンの背骨です。