ミドルウェア
リクエストとレスポンスの間に挟まる処理層で、認証・ログ・エラーハンドリングを横断的に適用する
ミドルウェアとは
ミドルウェアは、リクエストとレスポンスの間に挟まる処理層で、認証、ログ、エラーハンドリング、CORS などの横断的関心事を一元的に適用する。Express、Koa、Hono などの Web フレームワークの基本概念。
ミドルウェアの流れ
リクエストはハンドラに到達する前に、認証、ログ、CORS などのミドルウェアを順番に通過する。各ミドルウェアはリクエストの検査・加工を行い、next() で次のミドルウェアに処理を渡す。レスポンスも逆順にミドルウェアを通過するため、エラー処理やレスポンスの加工も可能。
リクエスト → [認証] → [ログ] → [CORS] → ハンドラ → [エラー処理] → レスポンス
↑ ↑
ミドルウェア ミドルウェア
Express の例
Express の例を示す。
import express from 'express';
const app = express();
// ログミドルウェア
app.use((req, res, next) => {
console.log(`${req.method} ${req.path}`);
next(); // 次のミドルウェアへ
});
// 認証ミドルウェア
app.use('/api', (req, res, next) => {
const token = req.headers.authorization;
if (!token) return res.status(401).json({ error: 'Unauthorized' });
next();
});
app.get('/api/users', (req, res) => res.json({ users: [] }));
ミドルウェアのパターン
典型的なミドルウェアには、トークンの検証や権限チェックを行う認証・認可、リクエスト/レスポンスの記録を行うログ、例外をキャッチして統一レスポンスを返すエラーハンドリング、クロスオリジンヘッダーを付与する CORS、リクエストボディを検証するバリデーション、リクエスト数を制限するレート制限がある。
API Gateway のミドルウェア的機能
API Gateway のミドルウェア的機能を以下にまとめる。
| 機能 | API Gateway の対応 |
|---|---|
| 認証 | Cognito Authorizer, Lambda Authorizer |
| CORS | CorsConfiguration |
| スロットリング | Usage Plan |
| リクエスト検証 | Request Validator |
| WAF | AWS WAF 統合 |
API Gateway がミドルウェアの役割を担うため、Lambda のコードをシンプルに保てる。
ミドルウェアの順序
ミドルウェアの順序を図で示す。
重要: ミドルウェアの実行順序は定義順
1. CORS (最初に実行、OPTIONS を早期返却)
2. ログ (全リクエストを記録)
3. 認証 (未認証は早期返却)
4. バリデーション
5. ハンドラ
6. エラーハンドリング (最後に実行)
実務での活用方法は関連書籍にも詳しい。
この記事は役に立ちましたか?
関連用語
デコレータ
既存の関数やクラスに機能を追加するデザインパターンで、元のコードを変更せずに拡張する
API Gateway
API のエントリーポイントとして認証、スロットリング、ルーティングを一元管理する AWS サービス
SBOM
ソフトウェアに含まれるすべてのコンポーネントの一覧を記録した部品表
Decorator パターン実装
既存オブジェクトの振る舞いを動的に拡張し、継承を使わずに機能を追加するデザインパターン
SRE
Site Reliability Engineering の略で、ソフトウェアエンジニアリングの手法でシステムの信頼性を向上させる実践
シェアードナッシング
各ノードが独立したリソースを持ち、共有状態を排除するアーキテクチャ