メインコンテンツにスキップ

💚 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でフルスタック開発者になりましょう! 💚