はじめてのNode.js完全入門ガイド – インストールから実践まで初心者向け解説

フリーランスボード

20万件以上の案件から、副業に最適なリモート・週3〜の案件を一括検索できるプラットフォーム。プロフィール登録でAIスカウトが自動的にマッチング案件を提案。市場統計や単価相場、エージェントの口コミも無料で閲覧可能なため、本業を続けながら効率的に高単価の副業案件を探せます。フリーランスボード

ITプロパートナーズ

週2〜3日から働ける柔軟な案件が業界トップクラスの豊富さを誇るフリーランスエージェント。エンド直契約のため高単価で、週3日稼働でも十分な報酬を得られます。リモートや時間フレキシブルな案件も多数。スタートアップ・ベンチャー中心で、トレンド技術を使った魅力的な案件が揃っています。専属エージェントが案件紹介から契約交渉までサポート。利用企業2,000社以上の実績。ITプロパートナーズ

Midworks 10,000件以上の案件を保有し、週3日〜・フルリモートなど柔軟な働き方に対応。高単価案件が豊富で、報酬保障制度(60%)や保険料負担(50%)など正社員並みの手厚い福利厚生が特徴。通勤交通費(月3万円)、スキルアップ費用(月1万円)の支給に加え、リロクラブ・freeeが無料利用可能。非公開案件80%以上、支払いサイト20日で安心して稼働できます。Midworks

Node.jsとは?初心者にもわかりやすく解説

Node.jsは、JavaScriptをサーバーサイドで実行できる実行環境です。従来、JavaScriptはブラウザ上でのみ動作していましたが、Node.jsの登場により、サーバー開発やコマンドラインツールの作成が可能になりました。

Node.jsの特徴

非同期処理による高いパフォーマンス Node.jsは非同期I/O処理を採用しており、大量のリクエストを効率的に処理できます。これにより、リアルタイムアプリケーションやAPIサーバーに最適です。

豊富なライブラリエコシステム npmパッケージマネージャーを通じて、50万を超えるライブラリにアクセスできます。開発効率が大幅に向上し、車輪の再発明を避けられます。

JavaScript統一開発環境 フロントエンドとバックエンドで同じ言語を使用できるため、フルスタック開発が容易になります。開発チームの学習コストも削減できます。

Node.jsのインストール方法

Windows環境でのインストール

  1. 公式サイトからダウンロード Node.js公式サイト(nodejs.org)にアクセスし、LTS版をダウンロードします。LTS版は長期サポート版で、本番環境での使用に推奨されています。

  2. インストーラーの実行 ダウンロードしたmsiファイルを実行し、ウィザードに従ってインストールを完了させます。

  3. インストール確認 コマンドプロンプトで以下のコマンドを実行し、バージョンが表示されることを確認します。

node --version
npm --version

Mac環境でのインストール

Homebrewを使用した方法(推奨)

# Homebrewのインストール(未インストールの場合)
/bin/bash -c "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/HEAD/install.sh)"

# Node.jsのインストール
brew install node

# バージョン確認
node --version
npm --version

Linux環境でのインストール

Ubuntu/Debian系の場合

# パッケージリストの更新
sudo apt update

# Node.jsとnpmのインストール
sudo apt install nodejs npm

# バージョン確認
node --version
npm --version

はじめてのNode.jsプログラム

Hello Worldの作成

最初のNode.jsプログラムを作成してみましょう。

// hello.js
console.log('Hello, Node.js!');

このファイルをターミナルで実行します。

node hello.js

Webサーバーの作成

Node.jsの組み込みモジュールを使用してWebサーバーを作成できます。

// server.js
const http = require('http');

const server = http.createServer((req, res) => {
  res.writeHead(200, { 'Content-Type': 'text/html; charset=utf-8' });
  res.end('<h1>はじめてのNode.jsサーバー</h1>');
});

const PORT = 3000;
server.listen(PORT, () => {
  console.log(`サーバーが http://localhost:${PORT} で起動しました`);
});

Next.jsとの連携

Next.jsプロジェクトの作成

Next.jsは、React.jsベースのフレームワークで、Node.js上で動作します。

# Next.jsプロジェクトの作成
npx create-next-app@latest my-nextjs-app
cd my-nextjs-app

# 開発サーバーの起動
npm run dev

API Routes の実装

Next.jsでは、Node.js APIを簡単に作成できます。

// pages/api/hello.js または app/api/hello/route.js
export default function handler(req, res) {
  if (req.method === 'GET') {
    res.status(200).json({ 
      message: 'Hello from Next.js API!',
      timestamp: new Date().toISOString()
    });
  } else {
    res.setHeader('Allow', ['GET']);
    res.status(405).end(`Method ${req.method} Not Allowed`);
  }
}

データベース連携例

// lib/database.js
const mysql = require('mysql2/promise');

const dbConfig = {
  host: process.env.DB_HOST || 'localhost',
  user: process.env.DB_USER || 'root',
  password: process.env.DB_PASSWORD || '',
  database: process.env.DB_NAME || 'myapp'
};

export async function connectDB() {
  try {
    const connection = await mysql.createConnection(dbConfig);
    return connection;
  } catch (error) {
    console.error('データベース接続エラー:', error);
    throw error;
  }
}

// pages/api/users.js
import { connectDB } from '../../lib/database';

export default async function handler(req, res) {
  if (req.method === 'GET') {
    try {
      const connection = await connectDB();
      const [rows] = await connection.execute('SELECT * FROM users');
      await connection.end();
      
      res.status(200).json({ users: rows });
    } catch (error) {
      res.status(500).json({ error: 'データベースエラーが発生しました' });
    }
  }
}

パッケージ管理の基本

npmの基本コマンド

# パッケージのインストール
npm install express

# 開発依存関係としてインストール
npm install --save-dev nodemon

# グローバルインストール
npm install -g typescript

# パッケージの更新
npm update

# パッケージの削除
npm uninstall express

package.jsonの理解

{
  "name": "my-node-project",
  "version": "1.0.0",
  "description": "はじめてのNode.jsプロジェクト",
  "main": "index.js",
  "scripts": {
    "start": "node index.js",
    "dev": "nodemon index.js",
    "test": "jest"
  },
  "dependencies": {
    "express": "^4.18.0",
    "mysql2": "^3.6.0"
  },
  "devDependencies": {
    "nodemon": "^3.0.0",
    "jest": "^29.0.0"
  }
}

よく使われるNode.jsライブラリ

Express.js(Webフレームワーク)

const express = require('express');
const app = express();

// ミドルウェアの設定
app.use(express.json());
app.use(express.static('public'));

// ルーティング
app.get('/', (req, res) => {
  res.send('Express.jsサーバーが動作中!');
});

app.post('/api/users', (req, res) => {
  const { name, email } = req.body;
  // ユーザー作成処理
  res.json({ message: 'ユーザーが作成されました', user: { name, email } });
});

app.listen(3000, () => {
  console.log('Express サーバーが port 3000 で起動しました');
});

Lodash(ユーティリティライブラリ)

const _ = require('lodash');

const users = [
  { id: 1, name: '田中', age: 25 },
  { id: 2, name: '佐藤', age: 30 },
  { id: 3, name: '鈴木', age: 28 }
];

// 年齢でソート
const sortedUsers = _.sortBy(users, 'age');

// 特定の条件でフィルタリング
const youngUsers = _.filter(users, user => user.age < 30);

console.log('年齢順:', sortedUsers);
console.log('30歳未満:', youngUsers);

実践的なプロジェクト例

RESTful APIの作成

// app.js
const express = require('express');
const cors = require('cors');
const app = express();

// ミドルウェア設定
app.use(cors());
app.use(express.json());

// メモリ内データストア(実際の開発ではデータベースを使用)
let todos = [
  { id: 1, title: 'Node.jsを学ぶ', completed: false },
  { id: 2, title: 'APIを作成する', completed: true }
];

// 全てのTODOを取得
app.get('/api/todos', (req, res) => {
  res.json(todos);
});

// 新しいTODOを作成
app.post('/api/todos', (req, res) => {
  const { title } = req.body;
  const newTodo = {
    id: Date.now(),
    title: title,
    completed: false
  };
  todos.push(newTodo);
  res.status(201).json(newTodo);
});

// TODOの完了状態を更新
app.put('/api/todos/:id', (req, res) => {
  const id = parseInt(req.params.id);
  const todo = todos.find(t => t.id === id);
  
  if (!todo) {
    return res.status(404).json({ error: 'TODOが見つかりません' });
  }
  
  todo.completed = !todo.completed;
  res.json(todo);
});

// TODOを削除
app.delete('/api/todos/:id', (req, res) => {
  const id = parseInt(req.params.id);
  const index = todos.findIndex(t => t.id === id);
  
  if (index === -1) {
    return res.status(404).json({ error: 'TODOが見つかりません' });
  }
  
  todos.splice(index, 1);
  res.status(204).send();
});

const PORT = process.env.PORT || 3000;
app.listen(PORT, () => {
  console.log(`APIサーバーが http://localhost:${PORT} で起動しました`);
});

デバッグとテスト

デバッグ方法

// console.logを使用したデバッグ
console.log('デバッグ情報:', variable);
console.error('エラー:', error);
console.table(arrayData);

// VS Codeでのデバッグ設定(launch.json)
{
  "version": "0.2.0",
  "configurations": [
    {
      "name": "Launch Program",
      "program": "${workspaceFolder}/app.js",
      "request": "launch",
      "skipFiles": [
        "<node_internals>/**"
      ],
      "type": "node"
    }
  ]
}

Jestを使用したテスト

// math.js
function add(a, b) {
  return a + b;
}

function multiply(a, b) {
  return a * b;
}

module.exports = { add, multiply };

// math.test.js
const { add, multiply } = require('./math');

describe('Math Functions', () => {
  test('add function', () => {
    expect(add(2, 3)).toBe(5);
    expect(add(-1, 1)).toBe(0);
  });

  test('multiply function', () => {
    expect(multiply(3, 4)).toBe(12);
    expect(multiply(0, 5)).toBe(0);
  });
});

本番環境への展開

PM2を使用したプロセス管理

# PM2のインストール
npm install -g pm2

# アプリケーションの起動
pm2 start app.js --name "my-app"

# プロセスの監視
pm2 monit

# ログの確認
pm2 logs

# アプリケーションの停止
pm2 stop my-app

# 自動起動設定
pm2 startup
pm2 save

環境変数の管理

// .env ファイル
PORT=3000
DB_HOST=localhost
DB_USER=myuser
DB_PASSWORD=mypassword
JWT_SECRET=your-secret-key

// アプリケーションでの使用
require('dotenv').config();

const port = process.env.PORT || 3000;
const dbHost = process.env.DB_HOST;

パフォーマンス最適化

メモリ使用量の監視

// メモリ使用量の確認
setInterval(() => {
  const memUsage = process.memoryUsage();
  console.log('Memory Usage:', {
    rss: `${Math.round(memUsage.rss / 1024 / 1024)} MB`,
    heapTotal: `${Math.round(memUsage.heapTotal / 1024 / 1024)} MB`,
    heapUsed: `${Math.round(memUsage.heapUsed / 1024 / 1024)} MB`
  });
}, 5000);

キャッシュ実装

const NodeCache = require('node-cache');
const cache = new NodeCache({ stdTTL: 600 }); // 10分間キャッシュ

app.get('/api/users/:id', async (req, res) => {
  const userId = req.params.id;
  const cacheKey = `user_${userId}`;
  
  // キャッシュから確認
  const cachedUser = cache.get(cacheKey);
  if (cachedUser) {
    return res.json(cachedUser);
  }
  
  // データベースから取得
  try {
    const user = await getUserFromDatabase(userId);
    cache.set(cacheKey, user);
    res.json(user);
  } catch (error) {
    res.status(500).json({ error: 'ユーザー取得エラー' });
  }
});

まとめ

Node.jsは現代のWeb開発において欠かせない技術です。この記事で紹介した内容を基に、実際にコードを書いて経験を積むことが重要です。

学習のポイント

  • 小さなプロジェクトから始めて徐々に機能を追加する
  • npmパッケージを積極的に活用する
  • エラーハンドリングとテストを意識する
  • 実際のWebアプリケーション開発でNext.jsと組み合わせる

Node.jsの学習を継続することで、フルスタック開発者としてのスキルが大幅に向上します。今日から実際にコードを書いて、Node.jsの世界を探求してみてください。

らくらくPython塾 – 読むだけでマスター

■AI時代の第一歩!「AI駆動開発コース」はじめました!

テックジム東京本校で先行開始。

■テックジム東京本校

「武田塾」のプログラミング版といえば「テックジム」。
講義動画なし、教科書なし。「進捗管理とコーチング」で効率学習。
より早く、より安く、しかも対面型のプログラミングスクールです。

<短期講習>5日で5万円の「Pythonミニキャンプ」開催中。

<月1開催>放送作家による映像ディレクター養成講座

<オンライン無料>理系出身者向けのPython爆速講座

フリーランスボード

20万件以上の案件から、副業に最適なリモート・週3〜の案件を一括検索できるプラットフォーム。プロフィール登録でAIスカウトが自動的にマッチング案件を提案。市場統計や単価相場、エージェントの口コミも無料で閲覧可能なため、本業を続けながら効率的に高単価の副業案件を探せます。フリーランスボード

ITプロパートナーズ

週2〜3日から働ける柔軟な案件が業界トップクラスの豊富さを誇るフリーランスエージェント。エンド直契約のため高単価で、週3日稼働でも十分な報酬を得られます。リモートや時間フレキシブルな案件も多数。スタートアップ・ベンチャー中心で、トレンド技術を使った魅力的な案件が揃っています。専属エージェントが案件紹介から契約交渉までサポート。利用企業2,000社以上の実績。ITプロパートナーズ

Midworks 10,000件以上の案件を保有し、週3日〜・フルリモートなど柔軟な働き方に対応。高単価案件が豊富で、報酬保障制度(60%)や保険料負担(50%)など正社員並みの手厚い福利厚生が特徴。通勤交通費(月3万円)、スキルアップ費用(月1万円)の支給に加え、リロクラブ・freeeが無料利用可能。非公開案件80%以上、支払いサイト20日で安心して稼働できます。Midworks