どうもこんにちは!
サバ缶(@tech_begin)です。
「ミドルウェア」っていう用語を見かけるけど、
普通のソフトウェアと違うの……?
Webサーバやデータベースサーバを構築する際、「ミドルウェア」というソフトウェアが必要です。
通常のソフトウェアとは異なり、システムを利用する私たちからすれば、ほとんど意識することはありません。
少しとっつきにくいかもしれませんが、是非この機会に学んでいきましょう💪
処理の階層構造を理解しよう
ミドルウェアの説明に入る前に、まずは前提知識を入れておきましょう。
コンピュータに搭載されているソフトウェアが、どのような機能を担っているのかを理解します。
以下の図にある通り、下から順にソフトウェアが並んでいます。
- アプリケーションソフトウェア
- ミドルウェア
- OS
上層部に近づくにつれて、ユーザ側になります。
下層部になるにつれて、コンピュータの奥底に近づいていきます。
OSのざっくり用途
最下部に位置するOSは、コンピュータ本体である「ハードウェア」と、その上にある「ソフトウェア」との疎通を行うためのソフトウェアです。
したがってOSは、汎用的(特定の用途に特化せず、様々な用途で使われる)ソフトウェアとも呼べます。
アプリケーションソフトウェアのざっくり用途
最上部に位置するアプリケーションソフトウェアは、ChromeのようなWebブラウザであったり、TwitterのようなWebアプリケーションなどのようなものを指します。
つまりアプリケーションソフトウェアは、特定の機能(Webのブラウジング、SNSなど)に特化しているソフトウェアのことを指します。
ミドルウェアのざっくり用途
最後に、中間にあるミドルウェアについてです。
ミドルウェアは「汎用的でもなく、かと言って特化しているわけでもない」という位置付けにあります。
ちょっと中途半端ですよね。でもこの曖昧さが重要なんです!
ミドルウェアとは
ミドルウェアは、「ミドル(中間)」と言葉にある通り、OSとアプリケーションソフトウェアの中間に位置します。
OSの機能を利用し、アプリケーションソフトウェアで使用する共通の機能を提供しています。
要するに、橋渡し役ですね。
ミドルウェアが登場した経緯
OS単体では、汎用的な機能しか提供できないため、使い物になりません。
じゃあアプリケーションソフトウェアを載せて特化したものを使おう!
……としようとしても、特化しすぎて様々なアプリケーションを作成する必要が出てきます。
そこで(明確に位置付けられたわけではないですが)ミドルウェアが登場したというわけです。
ミドルウェアが提供する機能
ミドルウェアが提供する機能には以下のようなものがあります。
- データベース管理システム
- データベースを管理したり、利用するためのミドルウェア
- MySQL、PostgreSQL、SQLiteなど
- 通信管理システム
- コンピュータ間で通信を行えるようにするためのミドルウェア
- Apache、Nginxなど
- ソフトウェア開発支援ツール
- ソフトウェアを開発する際に効率を上げるツール
- 各企業から提供されている場合が多いです。(参考:日立ミドルウェア製品一覧)
【なぜ使うの?】ミドルウェアの役割とメリット
とはいっても、まだ曖昧で
よく分からないなぁ……。
大丈夫です、もう少し詳しく見ていきましょう!
ミドルウェアは『特定の処理や高度な技術』を『簡単に実現』できる
OSは汎用的な機能を持っていますが、OS単体で出来ることは限られています。
『広く浅く』っていうイメージです。
OSとアプリケーションだけでも動作できますが、アプリケーションに特化した機能を持つミドルウェアを使うことで、特定の処理を実行できるためOSが持たないことも実現可能になります。
ミドルウェアは開発コストを抑えられる
ミドルウェアは、世界中のアプリケーションで使われる共通部分をパッケージング(1つにまとめること)したものです。
『アプリケーション開発でここは無くちゃならないでしょ!』という汎用的な機能を提供しています。
汎用的なのにOSに搭載されていない、けどアプリケーションで必要なほど限定的ではない機能が必要になる場合があります。
例えば、とあるアプリケーション開発で通信処理を行いたいとき。
これってどのアプリでも必要ですよね。
でもOSには搭載されてない。
かといってアプリケーションで開発するのも大変。
そういう時に、アプリケーションに特化した限定的かつ汎用的な機能を提供するミドルウェアが活躍します。
この汎用的な機能の開発を省くことができるので、アプリケーション開発に注力できるわけですね。
【応用】ミドルウェアとライブラリの違い
少し開発をしている人は『ライブラリ』という言葉をご存知でしょう。
ライブラリは、アプリケーション開発において汎用的に使われるプログラムや機能などをまとめたものです。
これを使うことでシステム開発を大幅に効率化できます。
ミドルウェアとライブラリの共通点は、プログラムから呼び出せるというところです。
逆に2つの違いとしては、独立して動作できるかどうかです。
- ミドルウェア:独立して起動する
- 1つのソフトウェアであるため
- ライブラリ:独立して起動しない
- プログラムのコードのまとまりでしかないため
実用例のイメージ
まずは左下のクライアントから、リクエストを送信します。
ブラウザや一般的なスマホアプリが「アプリケーションソフトウェア」にあたります。
ユーザの特定の目的に特化したソフトウェア、でしたね。
そして、アプリケーションサーバで受け取ります。
TomcatやApacheがミドルウェアに当たります。
JavaやPHPといったプログラミング言語で作成したプログラムが実行され、DBサーバへとリクエストが送信されます。
DBサーバで受け取った命令を元に、データの取得や更新などを行います。
MySQLやPostgreSQLなどがミドルウェアに当たります。
ここではSQL文というデータベースを操作するための特別な命令文で実行されます。
そして結果がアプリケーションソフトウェアへ返ってくるという流れです。
これら一覧の流れをミドルウェアなしで実現することも可能ですが、とても大変です。
ですので、このように役割を分けて、ミドルウェアを導入してシステムを構築していくんですね。
ミドルウェアのまとめ
アプリケーションに特化した限定的かつ汎用的な機能を提供するソフトウェアが『ミドルウェア』
ミドルウェアにも色んな種類があるので、ぜひサーバに入れて使ってみてくださいね!