ミドルウェア

ミドルウェア（）は、コンピュータの分野で、コンピュータの基本的な制御を行うオペレーティングシステム(OS)と、各業務処理を行うアプリケーションソフトウェアとの中間に入るソフトウェアのこと。

通常はオペレーティングシステムの機能の拡張、あるいはアプリケーションソフトウェアの汎用的（共通的）な機能を集めたものである。アプリケーションソフトウェアはミドルウェアに要求を出すと、ミドルウェアがオペレーティングシステムに必要な要求を出し、結果をアプリケーションソフトウェアに返す。あるいはミドルウェア自体が各アプリケーションソフトウェアの起動・停止・監視などを含めた制御を行う。

代表的なミドルウェアには、データベース管理システム(DBMS)やトランザクションモニターなどがある。

また別の意味として、Django、Laravel、ASP.NET CoreなどWebフレームワークの一部において、HttpリクエストからControllerに至るまで、およびControllerからHttpレスポンスを返すまでの共通処理を層状に追加する概念である。

 概要 
アプリケーションプログラムが動作するにあたり、ネットワーク上の他サーバやデータベースとのやり取りなど、普遍的で面倒な手続きを要するものがある。これらとのやり取りの手順や管理をその種別単位にまとめ、ひとつの機能管理パッケージソフトウェアとしてまとめたものがミドルウェアである。

企業システムや社会インフラシステムなどのエンタープライズ領域のシステム構築では、分散されたソフトウェアやアプリケーションソフトウェア間のデータのやり取りなどを司る。ミドルウェアとしては、それぞれの管理分野の専用ソフトウェアが用いられる事が多い。

カスタマイズの幅も大きく、それぞれのシステム特性に合わせた最適化設定が必要となっている。

最近のシステム構築においては、オペレーティングシステムとこのミドルウェアをシステムプラットフォーム（またはシステム基盤と呼ぶ）としてひとつの管理単位として定義し、専用のエンジニア/ITコンサルタントに設計構築を依頼する事が多い。

 歴史 
1960年代後半にはIMSなどのデータベース管理システムやトランザクションモニターが登場した。これらは主にメインフレームやミニコンピュータを中心に発達し、特に重要な基幹業務の性能・信頼性確保などのために使用された。

1990年代にダウンサイジングの潮流により分散システムを中心としたシステムが普及すると、ミドルウェアの使用も一般化した。特にUNIXやWindowsなどのOSは標準ではごく単純なファイルシステムや管理権限設定しか持っていないことや、標準化の潮流もあり、ミドルウェアを併用したシステム構築が普及した。

 ミドルウェアの区分と代表的なパッケージソフトウェア製品 
 メッセージ通信基盤
 サーバ間及びコンピュータ・クラスターのノード間の通信に使用され、アプリケーション側からはその手順の複雑さや制御が見えないようにラッピングするための共通機能を提供する。
 MPI/CORBA/RPCなど
 統合運用管理
 システム内のサーバやネットワークの監視、バッチ処理のスケジューリング、資源配布等を統合して行える機能を提供する。
 A-AUTO/JP1/HP OpenView/Tivoli/Systemwalkerなど
  高可用クラスタ
 クラスターに参加しているノードの管理やサービスアプリケーション及びミドルウェアサービスを監視し、障害や異常停止が発生した場合に、他ノードに自動的に切り替え、サービスの継続を図る共通機能を提供する。
 MC/ServiceGuard/HACMP/VxClusterServer/MSCS/Oracle Solaris Clusterなど
 データベース管理システム
 システムの固有データや管理情報などを統括的に管理し、検索サービスを提供する。
 Oracle Database/DB2/SQL Server/MySQL/PostgreSQL など
 Webサーバ
 クライアントからのHTTP要求を解釈し、HTMLコンテンツを応答したり、他のサーバーサイドスクリプトを呼び出したりする。
 Apache HTTP Server/Internet Information Serverなど
 アプリケーションサーバ
 アプリケーションが動作するサービスを管理し、提供する。
 WebSphere Application Server/WebLogic/JBoss/Interstage Application Serverなど
 トランザクションモニター
 TCP/IPやその上で動作するHTTPによる通信トランザクションと業務処理要求である処理トランザクションとの関係を把握し、管理する共通機能をサポートする。
 OpenTP1/Tuxedo/J2EEに含まれるJTAなど
データ連携, EAI, BPM
 WebSphere MQ/HULFT/ASTERIA/BizTalk Server/Sun Java CAPS/webMethods Fabricなど

 組み込みシステムにおけるミドルウェア 
システムによって必要とされる機能が異なるため、より少ないリソースで動作させるために、OSの基本機能の他に機能ごとにオプションとなっている製品が商品化されている。
 ファイルシステム
 ネットワークプロトコルスタック
 情報セキュリティ, 暗号化, 復号
 GUI
 画像処理, 音声処理

 Webフレームワーク文脈におけるミドルウェア 
WebフレームワークがHttpリクエストを受け取り、個々の処理（MVCフレームワークであればController）に到達する前に共通処理を実現したい場合がある。これを実現する仕組みの内、以下の2点を備えるものをミドルウェアと呼ぶ。

・個々の処理に到達するまでと、個々の処理から返却する過程の両方で1対である

・ミドルウェア自身は層の概念であり、重ねることができる

似た概念としてフィルターと命名されることの多い概念があるが、フィルターの場合は個々の処理に到達するまでしか考慮されていないことが多い。

この呼称は少なくともDjango1.0https://djangoproject.jp/doc/ja/1.0/topics/http/middleware.htmlの時点で存在しており、Laravel5.0https://readouble.com/laravel/5.0/ja/middleware.html、ASP.NET Core1.0https://docs.microsoft.com/en-us/aspnet/core/fundamentals/middleware/でも採用された。

また、近年ではSlackのbolt-jshttps://github.com/slackapi/bolt-js/tree/main/src内など、単に層状の中間処理機構の事をミドルウェアと命名しているケースも少なくない。

単なる、GoFデザインパターンにおけるDecoratorパターンあるいはProxyパターン状の構造もミドルウェアと呼ばれる場合があり、バズワード化が進んでいる。

 出典 

 関連項目 
 基本ソフトウェア
 アプリケーションソフトウェア
 パッケージソフトウェア
 ダウンサイジング
 メッセージ指向ミドルウェア

*