【自分用】ミドルウェアとは？ / APサーバーとは？ / PHPはなぜAP鯖が不要？

# ミドルウェアって何だっけ？
- OSとアプリケーション（WordPress / 業務アプリとか）の間で動き、
 アプリケーションの土台となっている。

- OSとアプリケーションの橋渡し的な役割を担うソフトウェアである。

- アプリケーションへのリクエストを処理する。（AP）
\- プログラミング言語で構築されたアプリを実行する。(AP)
Ex. ミドルWeb鯖(動的コンテンツくれ) -> ミドルAP鯖(了解) -> アプリ実行(プログラム)
Ex. クライアント/ブラウザ(静的コンテンツくれ) -> ミドルWeb鯖(了解：静的コンテンツ)

- 特定の機能に特化してOSとアプリケーションを補助している。
  
- アプリケーションがよく利用する高度で専門性が高い機能をパッケージ化し、
 別のソフトウェアとしてまとめたもの。
 \-　アプリケーションがよく利用する機能とは： 
　 アクセス管理、トランザクション管理、セキュリティ管理、ユーザー認証、DB接続など

- ミドルがあることによって、アプリは開発の手間を削減できる。
 ミドルの機能を呼出して使うことができるから。無かったらコーディングする必要がある。

- ライブラリとの違いは、単独で動作できること。

- OSほどの汎用性はなく、特定のアプリケーション分野に重点を置いている。
 基本的には、WEBとかAPとかDBとかなどのジャンルがある。

:::note info
[**【ミドルウェアとは】**](https://pfs.nifcloud.com/navi/words/middleware.htm)
OSはハードウェアのコントロールや入出力を担当するソフトウェアです。ユーザーに具体的なサービスを提供するアプリケーションソフトは、さまざまな要求をOSに対して行います。
その中には、データベースへのアクセスやネットワークとの通信など、アプリケーションがよく利用するリクエストが数多くあります。これらのリクエストをサービスごとにまとめたものがミドルウェアと呼ばれるソフトウェアです。
:::
:::note info
[**【ライブラリとの違い】**](https://sackle.co.jp/blog/detail/1248-2)
ミドルウェアが「よく利用する機能をパッケージ化」したものというのであれば、プログラム開発の際に利用する「ライブラリ」との違いは何なのでしょうか。ライブラリも、よく使う機能をまとめてパッケージ化したものであり、再利用することで開発を効率化する目的で使われています。

ミドルウェアとライブラリの大きな違いは、ミドルウェアはそれ単独でも動作できるのに対して、ライブラリは単独では動作できず、アプリケーションプログラムの中に組み込んで利用するというということです。

ライブラリがアプリケーションプログラムに含まれる部品として利用されるのに対し、ミドルウェアはアプリケーションプログラムとは対等の立場もしくは土台として動作するイメージになります。
:::

アプリケーション：ユーザーに具体的なサービスを提供
ミドルウェア：アプリケーションに高度で専門性が高い機能を提供
OS：ハードウェアのコントロールや入出力などの汎用的な機能を提供

:::note info
【その他参考】
- [ミドルウェアとは？役割や機能、種類をわかりやすく解説！](https://it-trend.jp/development_tools/article/32-0044)
:::

# アプリケーション（AP）サーバーって何だっけ？

- 作成したアプリケーションを動かすのに必要なモノ。

- Webサーバーからのリクエストを処理するモノ。

- プログラミング言語で構成されたアプリを実行して、動的なコンテンツを作成する。
 \- 時にはDBにアクセスし、固有のデータを抽出・加工する。

- 処理した結果をWeb鯖に返すモノ。

- Web鯖との違い
 \- 処理するコンテンツが違う
 \- Web鯖は、クライアントのリクエストを処理
 \- AP鯖は、Web鯖のリクエストを処理 

- 基本的にアプリケーションを実行する機能しかないので、AP鯖単体を使うことはほぼない。 
 \- なぜならものによっては、Web鯖機能を持つAP鯖(ミドル)もいるから。(Tomcat等)
　だが簡易的なweb鯖機能だから、膨大なクライアントの処理を捌くのは無理。

- 負荷分散の為にWeb鯖とAP鯖とDB鯖は、分けて作成するのが普通(Web３層構造)

:::note info 
[**【アプリケーションサーバの役割】**](https://www.cloudtimes.jp/dynamics365/blog/what-is-application-server)
アプリケーションサーバの役割は、WebサーバからのリクエストをJava、Ruby、PHPなどのプログラミング言語を実行して処理し、結果を返却することです。Webサーバから受け取ったリクエストによってはデータベースにアクセスしてデータをリクエストし、抽出や加工処理を行います。

主な役割は、WebブラウザとWebサーバとのアクセス管理、データベース接続のコネクト機能・トランザクション管理・セキュリティ管理・ユーザー認証などがあります。企業内の業務システムや企業外の電子商取引、ECサイトの発注システムなどの動的な処理が多いWebサイトで活用されるものです。
:::


:::note info
【その他参考】
- [APサーバの役割とは？Webサーバとの違いをしっかり理解しよう！](https://kitsune.blog/ap-server-summary)
- [静的コンテンツとWebアプリケーションの配置を切り分ける](http://itdoc.hitachi.co.jp/manuals/3020/30203M0461/EM040148.HTM#ID00632)
- [なぜAPサーバーをWebサーバーとしてりようしないのか](https://qiita.com/yCroma/items/e46476e2ac7c372bb2a3)
:::

# PHPはなぜAPサーバーが不要なのか？

- Apche(Web鯖)のモジュール(機能)を使用し、簡単にAP鯖のような仕組みを導入できるから。

- Apace(Web鯖)が、AP鯖の役割も担っているから。

:::note info 
**【[PHPとは](https://www.kagoya.jp/howto/it-glossary/web/php/)】**
PHPとは動的にWebページを生成することができるサーバーサイドのスクリプト言語です。
MySQLなどのデータベースとの連携が容易なことなどから、WordPressを含めたWebアプリケーションの開発にもよく使われる有名なスクリプト言語でもあります。
:::

:::note info
【その他参考】
- [PHPのアプリケーションサーバとは？ Web3層構成を簡単に解説します](https://www.sejuku.net/blog/96713)
- [nginx と PHP-FPM の仕組みをちゃんと理解しながら PHP の実行環境を構築する](https://qiita.com/kotarella1110/items/634f6fafeb33ae0f51dc)
:::

# メモ
- 静的コンテンツは、必ずしもWebサーバーに保管されているとは限らない。

- プログラミング言語 = ツール/ライブラリ
 \- こ奴単体では、何も機能しないただの部品や。