ミドルウェア

ミドルウェア（）は、コンピュータの分野で、コンピュータの基本的な制御を行うオペレーティングシステム(OS)と、各業務処理を行うアプリケーションソフトウェアとの中間に入るソフトウェアのこと。
通常はオペレーティングシステムの機能の拡張、あるいはアプリケーションソフトウェアの汎用的（共通的）な機能を集めたものである。アプリケーションソフトウェアはミドルウェアに要求を出すと、ミドルウェアがオペレーティングシステムに必要な要求を出し、結果をアプリケーションソフトウェアに返す。あるいはミドルウェア自体が各アプリケーションソフトウェアの起動・停止・監視などを含めた制御を行う。
代表的なミドルウェアには、データベース管理システム(DBMS)やトランザクションモニターなどがある。
また別の意味として、Django、Laravel、ASP.NET CoreなどWebフレームワークの一部において、HttpリクエストからControllerに至るまで、およびControllerからHttpレスポンスを返すまでの共通処理を層状に追加する概念である。
概要.
アプリケーションプログラムが動作するにあたり、ネットワーク上の他サーバやデータベースとのやり取りなど、普遍的で面倒な手続きを要するものがある。これらとのやり取りの手順や管理をその種別単位にまとめ、ひとつの機能管理パッケージソフトウェアとしてまとめたものがミドルウェアである。
企業システムや社会インフラシステムなどのエンタープライズ領域のシステム構築では、分散されたソフトウェアやアプリケーションソフトウェア間のデータのやり取りなどを司る。ミドルウェアとしては、それぞれの管理分野の専用ソフトウェアが用いられる事が多い。
カスタマイズの幅も大きく、それぞれのシステム特性に合わせた最適化設定が必要となっている。
最近のシステム構築においては、オペレーティングシステムとこのミドルウェアをシステムプラットフォーム（またはシステム基盤と呼ぶ）としてひとつの管理単位として定義し、専用のエンジニア/ITコンサルタントに設計構築を依頼する事が多い。
歴史.
1960年代後半にはIMSなどのデータベース管理システムやトランザクションモニターが登場した。これらは主にメインフレームやミニコンピュータを中心に発達し、特に重要な基幹業務の性能・信頼性確保などのために使用された。
1990年代にダウンサイジングの潮流により分散システムを中心としたシステムが普及すると、ミドルウェアの使用も一般化した。特にUNIXやWindowsなどのOSは標準ではごく単純なファイルシステムや管理権限設定しか持っていないことや、標準化の潮流もあり、ミドルウェアを併用したシステム構築が普及した。
組み込みシステムにおけるミドルウェア.
システムによって必要とされる機能が異なるため、より少ないリソースで動作させるために、OSの基本機能の他に機能ごとにオプションとなっている製品が商品化されている。
Webフレームワーク文脈におけるミドルウェア.
WebフレームワークがHttpリクエストを受け取り、個々の処理（MVCフレームワークであればController）に到達する前に共通処理を実現したい場合がある。これを実現する仕組みの内、以下の2点を備えるものをミドルウェアと呼ぶ。
・個々の処理に到達するまでと、個々の処理から返却する過程の両方で1対である
・ミドルウェア自身は層の概念であり、重ねることができる
似た概念としてフィルターと命名されることの多い概念があるが、フィルターの場合は個々の処理に到達するまでしか考慮されていないことが多い。
この呼称は少なくともDjango1.0の時点で存在しており、Laravel5.0、ASP.NET Core1.0でも採用された。
また、近年ではSlackのbolt-js内など、単に層状の中間処理機構の事をミドルウェアと命名しているケースも少なくない。
単なる、GoFデザインパターンにおけるDecoratorパターンあるいはProxyパターン状の構造もミドルウェアと呼ばれる場合があり、バズワード化が進んでいる。