第1章 Node.js概論
更新日:2025年12月17日
1. Node.jsとは
JavaScriptはもともとブラウザ専用の言語であった。ブラウザの中でしか動作せず、HTMLを操作するための言語として設計されていた。2009年、Ryan DahlがJavaScriptをブラウザの外で動かすという発想でNode.jsを開発した。
1.1 誕生の背景
Node.jsが生まれた主な理由は、フロントエンドとバックエンドで同じ言語を使いたいという要求である。2009年以前、Web開発者はフロントエンドでJavaScriptを、バックエンドでPHP、Python、Ruby、Javaなど別の言語を使用する必要があった。これは2つの言語を学習し、維持する負担を意味していた。
Table 1. Node.js以前と以後の開発言語
| 時期 | フロントエンド | バックエンド |
|---|---|---|
| 2009年以前 | JavaScript | PHP、Python、Ruby、Java等 |
| Node.js以後 | JavaScript | JavaScript(Node.js) |
Node.jsの登場により、1つの言語でフロントエンドからバックエンドまで完結できるようになった。これにより学習コストの削減、フロントとバックでのコード共有、採用の効率化といったメリットが生まれた。
1.2 V8エンジン
Node.jsの中核はV8エンジンである。V8はGoogle Chromeで使用されているJavaScriptエンジンであり、JavaScriptのコードを読み取って実行する翻訳機のような役割を担う。
Table 2. 主要ブラウザとJavaScriptエンジン
| ブラウザ | JavaScriptエンジン |
|---|---|
| Chrome | V8 |
| Firefox | SpiderMonkey |
| Safari | JavaScriptCore |
Ryan Dahlが行ったことは、ChromeからV8エンジンを取り出し(オープンソースであるため可能)、ファイル操作やネットワーク機能を追加し、これをNode.jsと名付けたことである。つまり、Node.jsはV8エンジンにサーバー向け機能を追加したものである。
Fig. 1 ブラウザとNode.jsの構成比較
ブラウザ(Chrome) Node.js ├── V8エンジン ├── V8エンジン(同じもの) ├── DOM操作機能 ├── ファイル操作機能(fs) └── 画面描画機能 └── ネットワーク機能(http)
2. 非同期処理
Node.jsの最大の特徴は非同期処理である。これはPythonなど多くの言語とは異なるアプローチであり、Node.jsの設計思想の根幹をなす。
2.1 同期と非同期
同期処理では、処理Aが完了するまで処理Bは開始できない。1つずつ順番に処理が実行される。Pythonの標準的な実行モデルがこれに該当する。
同期処理(Python等): 処理A開始 → 処理A完了(3秒待つ)→ 処理B開始 → 処理B完了
一方、非同期処理では、処理Aの完了を待たずに処理Bを開始できる。Node.jsはこの非同期処理を基本としている。
非同期処理(Node.js): 処理A開始 → 処理B開始 → 処理A完了 → 処理B完了
2.2 イベントループ
Node.jsはWebサーバーとして使用することを想定して設計された。Webサーバーの仕事の大半は待ち時間である。
Table 3. Webサーバーにおける待ち時間の例
| 処理 | 待ち時間 |
|---|---|
| データベースに問い合わせ | 数十〜数百ミリ秒 |
| ファイルを読み込む | 数ミリ秒 |
| 外部APIを呼ぶ | 数百ミリ秒 |
同期処理の場合、この待ち時間の間、他のリクエストを処理できない。非同期処理であれば、待っている間に別のリクエストを処理できる。
Node.jsが非同期を実現する仕組みがイベントループである。イベントループは以下の流れで動作する。
1. タスクを受け取る 2. 待ちが必要なら「後で通知して」と登録して次へ進む 3. 通知が来たら処理を再開する 4. 1に戻る(ループ)
3. Playwrightとの関係
Playwrightはブラウザを自動操作するツールである。E2Eテスト、スクレイピング、定型作業の自動実行などに使用される。
Table 4. Playwrightの言語サポート
| 言語 | パッケージ名 |
|---|---|
| Node.js | playwright |
| Python | playwright-python |
| Java | playwright-java |
| .NET | playwright-dotnet |
PlaywrightはMicrosoftが開発しており、Node.js版が最初に作られた。他言語版は後から追加されたため、新機能は常にNode.js版が先行する。また、ブラウザ操作は待ち時間が多い処理であり、ページ読み込み待ち、ボタン表示待ち、APIレスポンス待ちなど、非同期処理との相性が良い。これがNode.js版が主流である理由である。
4. モックの概念
モックとは、本物を作る前の偽物である。開発やテストにおいて、本番環境を模倣した環境を構築するために使用される。
例えば、AIエージェントが発注操作を自動実行するシステムを開発する場合、本番の発注システムでテストすると誤って大量発注してしまう可能性がある。モックの発注画面を作成すれば、見た目は本物と同じだが、実際には注文が発行されないため、安全にテストができる。
Fig. 2 モックを使用した安全な開発フロー
AIエージェント
↓ 操作
Playwright(ブラウザ自動操作)
↓ 操作
発注Webページ(モック)
↓
何も起きない(安全)
モックの作成にはNode.jsとExpress.jsがよく使用される。Express.jsを使えば、簡易的なWebサーバーを数行のコードで構築でき、本番システムの動作を模倣するAPIを短時間で実装できる。
5. まとめ
本章で解説した概念を整理する。
Table 5. 第1章のまとめ
| 概念 | 内容 |
|---|---|
| Node.jsとは | JavaScriptをサーバーサイドで実行するための実行環境 |
| 誕生の目的 | フロントエンドとバックエンドで言語を統一する |
| V8エンジン | Google ChromeのJavaScriptエンジン。Node.jsの中核 |
| 非同期処理 | 待ち時間を有効活用する処理モデル |
| イベントループ | 非同期処理を実現する仕組み |
| Playwrightとの関係 | Node.js版が本家。非同期処理との相性が良い |
| モック | 安全にテストするための偽物の環境 |
本コンテンツは2025年12月時点の情報に基づいて作成されています。Node.jsおよび関連ツールは活発に開発が進められており、APIや機能が変更される可能性があります。最新情報は公式ドキュメントをご確認ください。