Express.js — ルーティングとCRUD
このトピックを終えると
Express.jsでウェブサーバーを起動し、URLパスごとに異なるレスポンスを送信するルーティングを設定できるようになります。REST APIの4つの基本的な操作(CRUD)を実装できるようになります。
Express.jsが必要な理由
Node.jsの組み込みhttpモジュールでもサーバーを作成できます。しかし、URLの分岐、パラメータの解析、エラー処理などをすべて自分で実装する必要があります。Express.jsは、これらの繰り返し作業を代わりに処理してくれるウェブフレームワークです。
# インストールnpm init -ynpm install express// app.js — 最小限のExpressサーバー
const express = require('express');
const app = express();
app.get('/', (req, res) => {
res.send('こんにちは!');
});
app.listen(3000, () => {
console.log('サーバー実行: http://localhost:3000');
});node app.jsを実行すると、ブラウザでlocalhost:3000にアクセスできます。この6行がExpressのすべてです。残りは、このパターンの繰り返しと拡張です。
ルーティング — URLと関数を関連付ける
ルーティングは、「このURLへのリクエストがあったら、この関数を実行する」というルールです。
// GET — データ取得
app.get('/users', (req, res) => {
res.json([{ id: 1, name: 'キム・フン' }, { id: 2, name: 'イ・ス' }]);
});
// GET — URLパラメータで特定のアイテムを取得
app.get('/users/:id', (req, res) => {
const userId = req.params.id;
res.json({ id: userId, name: 'キム・フン' });
});
// POST — データ作成
app.use(express.json()); // JSONリクエストボディの解析は必須
app.post('/users', (req, res) => {
const newUser = req.body;
res.status(201).json({ message: '作成完了', user: newUser });
});:idは動的パラメータです。/users/1、/users/42のどちらもこのルートにマッチし、req.params.idで値を取得できます。
CRUD — 4つの基本的な操作
ウェブアプリケーションのデータ処理は、ほとんどの場合、この4つに帰着します。
| 操作 | HTTPメソッド | URL例 | 説明 |
|---|---|---|---|
| Create | POST | /users | 新しいユーザーを作成 |
| Read | GET | /users または /users/:id | リストまたは個別に取得 |
| Update | PUT | /users/:id | 特定のユーザー情報を修正 |
| Delete | DELETE | /users/:id | 特定のユーザーを削除 |
// Update — データ修正
app.put('/users/:id', (req, res) => {
const { id } = req.params;
const updatedData = req.body;
res.json({ message: `${id}番のユーザー修正完了`, data: updatedData });
});
// Delete — データ削除
app.delete('/users/:id', (req, res) => {
const { id } = req.params;
res.json({ message: `${id}番のユーザー削除完了` });
});このパターンをREST APIと呼びます。URLは「何か(名詞)」、HTTPメソッドは「どのように(動詞)」を表します。/usersという1つのURLに、GET/POST/PUT/DELETEの4つの操作がマッピングされる構造です。
ルーターの分離 — ファイルが大きくなる場合
ルートが多くなると、app.jsにすべて含めることはできません。ExpressのRouterを使用して、ファイルごとに分離します。
// routes/users.js
const router = require('express').Router();
router.get('/', (req, res) => { res.json([]); });
router.post('/', (req, res) => { res.status(201).json({}); });
router.put('/:id', (req, res) => { res.json({}); });
router.delete('/:id', (req, res) => { res.json({}); });
module.exports = router;// app.js — ルーターをマウント
const usersRouter = require('./routes/users');
app.use('/users', usersRouter);
// /users + router内部の '/' = GET /users
// /users + router内部の '/:id' = PUT /users/42app.use('/users', usersRouter)が重要です。/usersで始まるすべてのリクエストをroutes/users.jsが処理します。前のトピック(コードのモジュール化)の実践的な応用です。
重要なまとめ
Expressは「URL → 関数」の関連付けがすべてです。この単純な構造の上に、ミドルウェア、認証、データベースとの連携が積み重なるのであり、根本は変わりません。CRUDの4つのパターンを習得すれば、ほとんどのバックエンドAPIを作成できます。
→ プロフィールに適用: DevBench — Expressの基礎