Node.js のーどじぇいえす
簡単に言うとこんな感じ!
もともとWebページを動かすためだけの言語だったJavaScriptを、サーバー側でも動かせるようにした仕組みだよ!「フロントもバックも同じ言語でOK」って開発チームがめちゃくちゃ助かるやつなんだ!
Node.jsとは
Node.js(ノードジェイエス)は、JavaScriptをWebブラウザの外、つまりサーバー側でも実行できるようにしたランタイム環境です。「ランタイム環境」とは、プログラムを動かすための土台のこと。Googleが開発した高速なJavaScript実行エンジン「V8エンジン」をベースに、2009年にRyan Dahlが公開しました。
従来、JavaScriptはWebブラウザの中でのみ動く言語でした。一方、サーバー側の処理(データベースへの問い合わせや認証処理など)にはPythonやRuby、PHPといった別の言語が必要で、フロントエンド(画面側)とバックエンド(サーバー側)で異なる言語を使うのが当たり前でした。Node.jsの登場により、JavaScriptひとつでフロントもバックも書ける時代が到来しました。
Node.jsの最大の特徴は非同期・ノンブロッキングI/Oという仕組みです。複数のリクエストが来ても、処理待ちの間に他の作業を進められるため、少ないリソースで高い同時接続数をさばけます。チャットアプリやリアルタイム通知など、大量の同時接続が必要なサービスで特に力を発揮します。
Node.jsの仕組みと構造
Node.jsを構成する3つの核心
| 要素 | 役割 | たとえると |
|---|---|---|
| V8エンジン | JavaScriptを機械語に変換して高速実行 | エンジン(車の動力源) |
| イベントループ | 非同期処理を効率よく順番に処理するしくみ | 回転ずしのレーン |
| libuv | ファイル・ネットワークなどOS機能を扱うライブラリ | 車のタイヤ・シャーシ |
ノンブロッキングI/Oのイメージ
従来型(ブロッキング)のサーバー:
客A → リクエスト処理中(待機)→ 完了 → 次の客へ
客B → ← 待たされる!
客C → ← さらに待たされる!
Node.jsのサーバー(ノンブロッキング):
客A → リクエスト受付 → DBに問合せ中(その間に次へ)
客B → リクエスト受付 → 処理中(その間に次へ)
客C → リクエスト受付 → 即対応!
↓ DBから返事が来たら順番に回答
料理を注文したあと、厨房が仕上げている間にも次のお客さんの注文を取り続けるウェイターのようなイメージです。
覚え方
「Node = 結び目」 ── ネットワーク上の「節(ふし)」という意味のNodeが語源。JavaScriptという糸で、フロントとバックを「結ぶ」存在、と覚えると◎
歴史と背景
- 2009年 ── Ryan Dahlが発表。「大量の同時接続をシンプルに扱いたい」という課題感から生まれた
- 2010年 ── パッケージ管理ツール「npm(Node Package Manager)」が登場。世界中の開発者が作ったライブラリを簡単に利用できる仕組みが整う
- 2011年 ── Windows対応。普及が一気に加速
- 2014年 ── コミュニティの一部が「io.js」としてフォーク(分岐)。開発方針をめぐる議論が活発化
- 2015年 ── Node.jsとio.jsが統合。Node.js Foundationが設立され、企業主導のガバナンス体制へ
- 2019年 ── JS Foundationと合併し、OpenJS Foundationに。LinuxFoundation傘下でオープンソースとして発展
- 2020年代 ── Netflix・LinkedIn・PayPalなど大手企業が採用。npmのパッケージ数は200万を超え、世界最大規模のエコシステムに成長
Node.jsと関連技術の比較
他のバックエンド技術との比較
| 比較項目 | Node.js | Python (Django/Flask) | Ruby on Rails | PHP |
|---|---|---|---|---|
| 言語 | JavaScript | Python | Ruby | PHP |
| 得意な用途 | リアルタイム・API | AI/機械学習連携 | 高速プロトタイプ | WordPress等CMS |
| 非同期処理 | ◎ 得意 | △ 追加実装が必要 | △ 追加実装が必要 | △ |
| 学習コスト | フロント経験者は低い | 中程度 | 中程度 | 低い |
| エコシステム | ◎ npm(最大規模) | ○ PyPI | ○ RubyGems | ○ Composer |
Node.jsを使った主要フレームワーク
Node.js(土台)
├── Express.js ← 最も軽量・シンプル。自由度高い
├── Fastify ← 高速性重視。Expressの後継候補
├── NestJS ← 大規模開発向け。TypeScript対応
├── Next.js ← フロントとバックを一体化(React向け)
└── Nuxt.js ← Vue.js向けのNext.js的存在
フロントエンドとバックエンドの関係図
関連する規格・RFC
| 規格・RFC番号 | 内容 |
|---|---|
| RFC 7230 | HTTP/1.1 メッセージ構文(Node.jsのHTTPモジュールが準拠) |
| RFC 7540 | HTTP/2(Node.js v8.4以降でサポート) |
| RFC 6455 | WebSocket(Node.jsのリアルタイム通信で多用) |
| RFC 8259 | JSON仕様(Node.jsのAPI通信で標準的に利用) |
関連用語
- JavaScript — WebブラウザおよびNode.js上で動くプログラミング言語
- npm — Node.jsのパッケージ管理ツール。世界最大規模のライブラリ集
- REST API — Webサービス間でデータをやり取りする設計スタイル
- Express.js — Node.js上で動く軽量なWebフレームワーク
- WebSocket — ブラウザとサーバー間でリアルタイム双方向通信を実現する規格
- Docker — Node.jsアプリをコンテナ化して環境差異をなくす仮想化技術
- TypeScript — JavaScriptに型付けを追加した言語。Node.jsと組み合わせて大規模開発に使われる
- フロントエンド — ユーザーが直接操作する画面側の総称。Node.jsの開発ツール群もここで活躍