💚 Node.jsとは?
📖 定義
Node.jsは、Chrome V8 JavaScriptエンジン上に構築されたJavaScriptランタイムです。ブラウザ外でJavaScriptを実行でき、非同期イベント駆動アーキテクチャにより高性能とスケーラビリティを提供します。npm(Node Package Manager)を通じて膨大なライブラリエコシステムを提供します。
🎯 簡単な例え
レストランの厨房
従来のサーバー(同期)
└─ 1人のシェフが順番に1人ずつ対応(遅い)
Node.js(非同期)
├─ 1人のシェフが複数の注文を同時処理
├─ ステーキを焼く間 → サラダを準備
└─ 速くて効率的!
⚙️ イベントループ
┌─────────────┐
│ Call Stack │ 実行中のコード
└──────┬──────┘
│
┌──────▼──────┐
│ Event Loop │ 調整役
└──────┬──────┘
│
┌────┴─────┐
│ │
Microtask Task Queue
(Promise) (setTimeout)
💡 主な例
基本HTTPサーバー
const http = require('http');
const server = http.createServer((req, res) => {
res.writeHead(200, { 'Content-Type': 'text/html' });
res.end('<h1>こんにちは、Node.js!</h1>');
});
server.listen(3000, () => {
console.log('サーバー起動: http://localhost:3000');
});
Express API
const express = require('express');
const app = express();
app.use(express.json());
app.get('/api/users', (req, res) => {
res.json([
{ id: 1, name: '太郎' },
{ id: 2, name: '花子' }
]);
});
app.post('/api/users', (req, res) => {
const newUser = req.body;
res.status(201).json({ message: '作成完了', user: newUser });
});
app.listen(3000);
Async/Await
const fs = require('fs').promises;
// ❌ 順次実行(遅い)
async function readSequential() {
const file1 = await fs.readFile('file1.txt');
const file2 = await fs.readFile('file2.txt');
// 合計: 200ms
}
// ✅ 並列実行(速い)
async function readParallel() {
const [file1, file2] = await Promise.all([
fs.readFile('file1.txt'),
fs.readFile('file2.txt')
]);
// 合計: 100ms(同時実行)
}
データベース統合
const express = require('express');
const mysql = require('mysql2/promise');
const pool = mysql.createPool({
host: 'localhost',
user: 'root',
password: 'password',
database: 'mydb'
});
app.get('/api/users', async (req, res) => {
try {
const [rows] = await pool.execute('SELECT * FROM users');
res.json(rows);
} catch (error) {
res.status(500).json({ error: 'データベースエラー' });
}
});
🤔 よくある質問
Q1. なぜNode.jsは速いのですか?
// ノンブロッキングI/O
readFile('file.txt', (err, data) => {
processData(data);
});
// 読み込み中に他のリクエストを処理可能!
// イベント駆動
// シングルスレッドで数千の接続を処理
// コンテキストスイッチングコストなし
Q2. npmとは何ですか?
# Node.jsのパッケージマネージャー
npm install express # パッケージインストール
npm init -y # プロジェクト初期化
npm list # インストール済みパッケージ一覧
npm audit # セキュリティチェック
# package.json
{
"dependencies": {
"express": "^4.18.0"
}
}
Q3. CommonJS vs ESモジュール?
// CommonJS(従来)
const { add } = require('./math');
module.exports = { add };
// ESモジュール(現代)
import { add } from './math.js';
export function add(a, b) { return a + b; }
// package.jsonで有効化
{ "type": "module" }
🎬 まとめ
- 非同期I/O: 高性能とスケーラビリティ
- JavaScript: フロントエンドと同じ言語
- npm: 膨大なパッケージエコシステム
- イベントループ: 効率的な同時処理
Node.jsでフルスタック開発者になりましょう! 💚