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

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

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

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

概要編集

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

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

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

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

歴史編集

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

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

ミドルウェアの区分と代表的なパッケージソフトウェア製品編集

メッセージ通信基盤
サーバ間及びコンピュータ・クラスターのノード間の通信に使用され、アプリケーション側からはその手順の複雑さや制御が見えないようにラッピングするための共通機能を提供する。
統合運用管理
システム内のサーバやネットワークの監視、バッチ処理のスケジューリング、資源配布等を統合して行える機能を提供する。
高可用クラスタ
クラスターに参加しているノードの管理やサービスアプリケーション及びミドルウェアサービスを監視し、障害や異常停止が発生した場合に、他ノードに自動的に切り替え、サービスの継続を図る共通機能を提供する。
データベース管理システム
システムの固有データや管理情報などを統括的に管理し、検索サービスを提供する。
Webサーバ
クライアントからのHTTP要求を解釈し、HTMLコンテンツを応答したり、他のサーバーサイドスクリプトを呼び出したりする。
アプリケーションサーバ
アプリケーションが動作するサービスを管理し、提供する。
トランザクションモニター
TCP/IPやその上で動作するHTTPによる通信トランザクションと業務処理要求である処理トランザクションとの関係を把握し、管理する共通機能をサポートする。
データ連携, EAI, BPM

組み込みシステムにおけるミドルウェア編集

システムによって必要とされる機能が異なるため、より少ないリソースで動作させるために、OSの基本機能の他に機能ごとにオプションとなっている製品が商品化されている。

Webフレームワーク文脈におけるミドルウェア編集

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

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

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

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

この呼称は少なくともDjango1.0[1]の時点で存在しており、Laravel5.0[2]、ASP.NET Core1.0[3]でも採用された。

脚注編集

関連項目編集