ひとことで言うと
ミドルウェアは、アプリの本処理の前後に共通してやりたいことを挟み込む仕組み、またはOSとアプリの間で橋渡しをするソフトウェアの総称です。
「認証の確認」「ログの記録」「エラーの整形」など、どのリクエストにも共通する処理を、本体のコードに混ぜず一箇所にまとめられます。 Webフレームワークの世界では特に「リクエストとレスポンスの間に挟まる処理」としてよく使われる言葉です。
たとえ話でもう少し詳しく
ミドルウェアは、会社の受付窓口に近いです。
- 来客が担当部署へ通る前に、受付で必ず訪問カードに記入してもらう
- 受付票に不備があれば、担当者に会う前に止めて確認する
- どの部署への来客にも同じ手続きを共通で行う
Webアプリでも同じです。 リクエストが届いてからアプリの本処理に入る前に、「ログインしているか確認する」「アクセスログを記録する」「入力値を整形する」といった処理をミドルウェアとして挟みます。 本処理のコードは「確認済みの来客を迎える部署」だけに集中でき、共通処理の重複が減ります。
よく出る場面・使いどころ
- ログインが必要なページへのアクセスを、本処理の前に一律チェックしたいとき
- すべてのリクエストにアクセスログを自動記録したいとき
- レスポンスにCORSヘッダーやセキュリティヘッダーを一律付けたいとき
- エラーが起きたときの返し方を、アプリ全体で統一したいとき
似た言葉との違い
- フレームワーク
- アプリの土台となる構造やルールのセット
- ミドルウェアはフレームワークが提供する仕組みのひとつとして使われることが多い
- Webサーバー
- HTTPリクエストを受け取りレスポンスを返すソフトウェア
- ミドルウェアはそのWebサーバーやフレームワークの上でアプリ処理の前後に挟まる
- ライブラリ
- 呼び出して使う部品の集まり
- ミドルウェアは呼び出すのではなくリクエストの流れに自動で割り込む点が異なる
実務で気にするポイント
- ミドルウェアの実行順序に意味があるため、登録する順番を意識する
- 認証・ログ・エラー処理などは共通ミドルウェアにまとめ、本処理をシンプルに保つ
- 全リクエストに処理が走るため、重い処理を入れるとサービス全体が遅くなる
- 「なぜこのミドルウェアが実行されているか」がわかりにくくなることがあるため、役割を明確にしておく
注意: ミドルウェアに共通処理を詰め込みすぎると、どこで何が起きているかを追いにくくなります。「どのリクエストにも必ず必要か」を基準に整理し、特定の処理にしか使わないものは本体に書き残す判断も大切です。