Node.js入門:JavaScriptでバックエンドを作る最初の一歩(2026年版)

文系未経験からフロントエンドエンジニアに転職した筆者がNode.jsの基礎から実際に動くサーバーを作るまでを丁寧に解説。JavaScriptを学んだ次のステップに最適です。

Node.jsJavaScriptバックエンド入門独学

「JavaScriptはある程度書けるようになってきた。でも、Node.jsって結局何?」

この疑問、正直に言います。僕も独学を始めた頃、かなり長い間放置していました。フロントエンドで精一杯で、「バックエンドはいつかでいい」と思っていたんです。

結論から言うと、Node.jsを理解することで、JavaScriptエンジニアとしての価値が一段上がります。フロントもバックも同じ言語で書けるようになる、というのは採用市場でも明確なアドバンテージです。

この記事では、Node.jsの基礎から実際にシンプルなHTTPサーバーを作るところまで、コードを交えて解説します。

プログラミングとサーバーのイメージ


筆者について

文系大学卒→営業3年→独学8ヶ月でWeb系企業に転職した元未経験エンジニアです。現在はReact/Next.jsをメインにフリーランスで動いています。JavaScriptは独学の「最初の一本」として選んだ言語で、Node.jsはその延長で学びました。


Node.jsとは何か

JavaScriptをブラウザ外で動かす仕組み

もともとJavaScriptは「ブラウザの中でしか動かない」言語でした。HTMLのボタンを押したら何かが動く、入力欄をチェックする、そういった用途です。

Node.jsは、このJavaScriptをブラウザの外でも動かせるようにした「実行環境」です。

コードで言うなら、こういうイメージです。

通常のJS:  [ブラウザ] の中だけで動く
Node.js:   [ブラウザ] の外でも動く = サーバー、CLI、自動化ツール

なぜフロントエンドエンジニアがNode.jsを学ぶか

実は、フロントエンドの開発環境はすでにNode.jsの上で動いています。

npm install を実行するとき、npx create-react-app を使うとき、vitewebpack がバンドルするとき—これら全部、Node.jsが動いています。

つまり、フロントエンドエンジニアとして仕事をする段階で、すでにNode.jsのお世話になっているわけです。ここがポイントなんですが、「使っている」と「理解している」は全然違います。


Node.jsのインストール

nvmを使う(推奨)

Node.jsのバージョン管理ツール「nvm(Node Version Manager)」を使うのがおすすめです。プロジェクトごとにNode.jsのバージョンを切り替えられるため、実務では必須に近い知識です。

Macの場合:

# nvmのインストール
curl -o- https://raw.githubusercontent.com/nvm-sh/nvm/v0.39.7/install.sh | bash

# Node.jsのインストール(最新LTS版)
nvm install --lts

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

Windowsの場合:

nvm-windowsをGitHubからダウンロードしてインストールします。その後は同様のコマンドで動きます。

正直、当時の僕は公式サイトから直接インストーラーをDLしていました。バージョン管理なんて考えていなかったんです。でも実務でNode.js 16と18を同時に使うプロジェクトに入ったとき、nvmの存在を知ってすぐに乗り換えました。


最初のNode.jsプログラムを動かす

Hello World

まずは定番のHello Worldから。

// hello.js
console.log("Hello, Node.js!");
console.log("ブラウザなしでJavaScriptが動く。");

ターミナルで実行します。

node hello.js
# → Hello, Node.js!
# → ブラウザなしでJavaScriptが動く。

ブラウザなしでJavaScriptが動く。これが「Node.jsを理解した」最初の感覚です。

ファイルを読み書きする

Node.jsには標準モジュールが豊富にあります。ファイル操作のfsモジュールを使ってみます。

// file-read.js
const fs = require('fs');

// ファイルを同期的に読む
const content = fs.readFileSync('./hello.js', 'utf8');
console.log(content);

// ファイルを非同期で読む(実務ではこちらが主流)
fs.readFile('./hello.js', 'utf8', (err, data) => {
  if (err) {
    console.error('読み込みエラー:', err);
    return;
  }
  console.log('非同期で読み込んだ内容:', data);
});

ここがポイントなんですが、Node.jsは「非同期処理」が得意です。同期処理と非同期処理の違いを理解することが、Node.jsを使いこなす第一歩です。


HTTPサーバーを作る

標準モジュールだけでサーバーを立てる

Node.jsの標準モジュールhttpを使えば、外部ライブラリなしでWebサーバーが作れます。

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

const server = http.createServer((req, res) => {
  // レスポンスヘッダーを設定
  res.writeHead(200, { 'Content-Type': 'text/html; charset=utf-8' });

  // URLに応じてレスポンスを変える
  if (req.url === '/') {
    res.end('<h1>トップページです</h1>');
  } else if (req.url === '/about') {
    res.end('<h1>About: 中村ソウマのサーバーです</h1>');
  } else {
    res.writeHead(404);
    res.end('<h1>404 Not Found</h1>');
  }
});

// ポート3000で起動
server.listen(3000, () => {
  console.log('サーバー起動: http://localhost:3000');
});

実行してブラウザで http://localhost:3000 を開くと、「トップページです」と表示されます。

node server.js
# → サーバー起動: http://localhost:3000

正直、当時の僕はこれで「バックエンドって意外と難しくないかも」と感じました。もちろんここから先は複雑になりますが、土台はシンプルです。

バックエンド開発のイメージ


Expressで本格的なAPIを作る

Expressとは

実務のNode.jsアプリは、ほぼExpressというフレームワークを使います。標準モジュールだけでは複雑になりすぎるルーティングや、ミドルウェア(認証、ログ等)の管理を楽にしてくれます。

# プロジェクトの初期化
mkdir my-api && cd my-api
npm init -y

# Expressのインストール
npm install express

シンプルなREST APIを作る

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

// JSONリクエストを解析するミドルウェア
app.use(express.json());

// サンプルデータ
let users = [
  { id: 1, name: '中村ソウマ', role: 'フロントエンドエンジニア' },
  { id: 2, name: '田中テスト', role: 'バックエンドエンジニア' },
];

// GET: ユーザー一覧を返す
app.get('/api/users', (req, res) => {
  res.json(users);
});

// GET: 特定のユーザーを返す
app.get('/api/users/:id', (req, res) => {
  const user = users.find(u => u.id === parseInt(req.params.id));
  if (!user) return res.status(404).json({ message: 'ユーザーが見つかりません' });
  res.json(user);
});

// POST: ユーザーを追加する
app.post('/api/users', (req, res) => {
  const newUser = {
    id: users.length + 1,
    name: req.body.name,
    role: req.body.role,
  };
  users.push(newUser);
  res.status(201).json(newUser);
});

app.listen(3000, () => {
  console.log('API起動: http://localhost:3000');
});

これが「REST API」の基本形です。フロントエンドのReactアプリと、このバックエンドAPIを繋げることで、本格的なWebアプリが作れます。


非同期処理の3つのパターン

Node.jsを学ぶ上で、ここが最初の壁になりやすいです。3つのパターンをしっかり理解しておきましょう。

const { readFile } = require('fs/promises');

// パターン1: コールバック(古いスタイル)
require('fs').readFile('./data.txt', 'utf8', (err, data) => {
  if (err) throw err;
  console.log('コールバック:', data);
});

// パターン2: Promise(モダンなスタイル)
readFile('./data.txt', 'utf8')
  .then(data => console.log('Promise:', data))
  .catch(err => console.error(err));

// パターン3: async/await(最もシンプル・読みやすい)
async function readData() {
  try {
    const data = await readFile('./data.txt', 'utf8');
    console.log('async/await:', data);
  } catch (err) {
    console.error(err);
  }
}
readData();

プログラミング的に言うと、「同時に複数の作業をこなせる」のがNode.jsの強みです。レストランで例えるなら、一人のウェイターが複数のテーブルを掛け持ちするようなイメージです。実務ではasync/awaitが最も読みやすいため、新しいコードはほぼこのパターンで書きます。


Node.jsの次のステップ

Node.jsの基礎を掴んだら、次は以下に進むことをおすすめします。


まとめ

大事なのは「JavaScriptはもうフロントだけの言語じゃない」という認識です。

Node.jsを理解すると、フロントエンドとバックエンドの両方を視野に入れたエンジニアになれます。これは採用市場でも、フリーランスで案件を取る上でも、明確なアドバンテージになります。

まずは今日の内容を手元で動かしてみてください。node hello.js の一行から始まります。独学でプログラミングを進めている方は、独学プログラミングのロードマップも参考にしてみてください。


独学に限界を感じたら:

正直、Node.jsあたりまで来ると「誰かに聞けたら10倍速いのに」と思う場面が増えます。非同期処理まわりで3週間ハマりましたが、あれは誰かに一言聞けば5分で解決できた話でした。

もし独学に限界を感じたら、プログラミングスクールという選択肢も検討してみてください。現役エンジニアのメンタリングがある環境では、こういったギモンを即解決できます。

プログラミングスクール比較2026年版

広告

Colosoでプロから学ぶ

業界トップの講師によるオンライン講座。買い切り型で何度でも復習可能。

Colosoを見る →