アプリケーションサーバ

**アプリケーションサーバ**（）は、ビジネスロジックなどを実装したアプリケーションソフトウェアを実行することを専門とするコンピュータネットワーク上のサーバコンピュータ、もしくはそのようなコンピュータ上でのアプリケーションの実行を管理補助するミドルウェアのこと。

ウェブアプリケーションサーバは、ウェブクライアントからのHTTPのレスポンス要求を処理するウェブサーバとバックエンドの関係データベース管理システム (RDBMS) を中心とするデータベース中核層への橋渡しを担い、データの加工などの処理を行う。

## 概要

アプリケーションサーバの基本的な機能とされるものは、以下の3つである。

* プログラムの実行環境やデータベースへの接続機能の提供
* 複数の処理を連結するトランザクションの管理機能
* 業務処理の流れを制御するビジネスロジックの実装

ただし、アプリケーションサーバの機能についての厳密な定義は存在しないため、これらの機能を有しないアプリケーションサーバも存在する。また、この3つの機能以外に、各ベンダによる機能強化が行われている事も多い。

以降、本稿ではウェブアプリケーションサーバの記載を中心とする。

## ウェブ3層構成
一般的なウェブシステムの多くは「ウェブ3層構成」と呼ばれる構成にて設計されている事が多い。このウェブ3層設計は、以下の3つの層で構成されている。
* ウェブブラウザからのHTTPによるアクセス要求を分散処理するウェブサーバ層
* HTTPトランザクションの一貫性を保持し、システム固有の処理を行い、バックエンドで動作するデータベースなどの検索/加工処理などを司るウェブアプリケーション層
* システムのデータや管理情報を司るデータベース層

ウェブシステムをそれぞれ3つの層に実装を分け垂直分散したことで、それぞれの層単位でスケールアウト（サーバの増設で処理性能を向上できること）が可能となり、拡張性やコストパフォーマンスも大きく向上している。

一般に、3階層システムは、インターネットが登場する前の古典的な非ウェブアプリなどでよく使われていた、クライアントやバックエンド側にビジネスロジックを実装する方式 (2階層システム) に比べ、システムの変更や更新、増強などが容易で、柔軟性が高いシステム構成といわれている。特にウェブアプリ化により、クライアント（ウェブブラウザ）とアプリケーション層を切り分けたことで、古典的な2層システムなどであったシステム更改の際の「高価な基幹データベース自体やそのサーバの必要諸元の変更にあわせて買い換えなければならない」といった悩みが解消され、導入コストが安くなった。ただし、その代わり、ウェブブラウザの制限事項に引きずられることになった。

## 歴史
1990年代前半のクライアントサーバベースのシステムでは、クライアント側を専用端末とし、各種機能を用意するリッチクライアント型のシステム構築が主流であった。これは、関係データベース管理システム (RDBMS) などを含むサーバが非常に高価であり、変更 (買い換え) が容易でなかったことによる。
そのため、業務プロセスが変わったら、端末側のプログラムを更新或いは入れ替える必要があったが、多くの場合、利用者は社内の人間などに限られていたため大きな問題とはならなかった。

1990年代後半に、インターネットが普及をはじめると、ウェブブラウザを用いた電子商取引などのニーズが広がってくる。ウェブブラウザをクライアントに用いるシステムでは、サービスの対象者が不特定多数になることが多く、システムの変更にあわせて利用者全ての環境を更新することは事実上不可能である。そこで、サーバサイドに業務プロセスなど各種アプリケーションを用意することが求められるようになった。
この要求に対して、アプリケーションのクライアントからサーバへのシフトは、サーバサイドコンピュータの高性能化（UNIXサーバなどに代表される比較的安価で高性能なサーバの登場）とネットワークの高速化、Javaなどのプログラム言語の処理高速化技術等の進展などにより可能となった。1990年代後半には、ウェブブラウザをクライアントとして使用し、様々な処理をサーバ側で行うシステムが一般化している。

インターネットを利用したクライアントサーバシステムでは、サーバ側に多種多様な機能が求められる。例えばECサイトでは、商品情報を表示し、複数の商品の購入チェックボックスをチェックして、最終的に商品の決済（電子決済）を行う必要がある。このサービスを実装するには、対話型の処理の保障と、認証/個人情報の保護といったセキュリティ面の確保、安定性・可用性の確保といった各種要件・機能を保障する必要がある。

サーバが高性能化したとはいえ、大規模なシステムにおいては、これらの要求に全て対処していくのは困難である。そこで、従来ウェブサーバだけで処理してきた内容をウェブサーバと**アプリケーションサーバ**の2つに分離することで、より大量のトランザクション処理にも対応できる方式 (3層構造システム) が実用化された。1998年頃から本格的な製品が登場し始めている。

## ウェブアプリケーションサーバに求められる機能
ウェブアプリケーションサーバは、以下のような要件を取り込むべく作成が進められ、実装されている。

## アプリケーションサーバの分類
広義な意味での**アプリケーションサーバ**という用語はプログラミング言語で実装されたアプリケーションソフトウェアを動作させるサーバサービスを意味する。

特にウェブアクセスに特化したアプリケーションサーバは、マイクロソフト製品とJavaベースの製品とに大別できる。

Windowsプラットフォームで動作する代表的なアプリケーションサーバはMicrosoft Internet Information Services (IIS) がある。

### Jakarta EEアプリケーションサーバ
;定義
Jakarta EEは、標準機能セットであるJava Platform, Standard Edition (Java SE) に、ウェブサーバに必要な各種機能を追加した標準仕様で、この仕様に準拠したものをJakarta EEアプリケーションサーバと呼称している。

;補足
Jakarta EEアプリケーションサーバ製品上でアプリケーション動作を規定するプログラミング言語として採用されているのはJavaである。通常、WebモジュールはJavaServer Faces (JSF) やFaceletsで構築され、バックエンドのプログラムはEnterprise JavaBeans (EJB)、データアクセスモジュールはJPA仕様に準拠して開発される。
Java Beansはサン・マイクロシステムズのJavaアーキテクチャ上で、クラスの部品化及びその組み合わせ方法を規定する技術仕様である。

また、このWebモジュール部分のみの限定仕様として、Web Profileサブセットが存在し、この仕様に準拠した小型版としてApache Strutsなどがある。このフレームワークにも多くの種類があり、互いに影響を与え合って、発展している。

### Windowsプラットフォームのアプリケーションサーバ
Windowsプラットフォームで動作する代表的なアプリケーションサーバはInternet Information Services (IIS) がある。
IISはWebサーバとアプリケーションサーバ両方の機能を持つため、Webサーバと呼ばれる場合とアプリケーションサーバと呼ばれる場合とがある。
Netcraft調査によると2013年3月現在、IISは全世界の18.01%のサイト上で稼働している。

このIIS上で動作するフレームワークとしては、Windows 2000 以降の安定性とWindowsでのユーザ認証機能を基に、多くの機能を含有した.NET Frameworkに準じたものがある。

;補足
.NET Frameworkに準じたもので、オープンソースや商用のアプリケーションサーバもある。Base4アプリケーションサーバやZopeが例として挙げられる。マイクロソフトのWindows Communication Foundationはアプリケーションサーバというよりも、通信フレームワークかミドルウェアと言うべきものである。ただし、.NET連携の場合もWindowsのユーザ認証機能とそのLDAPを利用したものがある。

なおクロスプラットフォームな.NET CoreおよびASP.NET CoreのソースコードがMITライセンスで公開されたことにより、IISに依存することなく.NETベースのアプリケーションサーバを構築することも可能となった。

### その他のアプリケーションサーバ
;定義
Jakarta EE以外の言語セット・フレームワークを使用し、ビジネスロジックを実装し得るアプリケーションサーバのこと。

### ポータルサイト製品
多くのポータルサイト製品は、Jakarta EEアプリケーションサーバ製品とユーザ認証機能を提供するLDAP、さらにシングルサインオンを実現する拡張機能を連携させており、一般的なアプリケーションサーバ機構と言える。

WebSphere Application Serverやなどの統合化された有償の商用製品では、1つのエントリポイントから、どんなデバイスからも全てのウェブサービスにアクセスできるように設計されており、柔軟性に富んでいる。

## 関連項目
* クライアントサーバモデル
* コンテンツ管理システム (CMS)
* ウェブブラウザ
* Java
* Java Servlet
* JavaServer Pages
* Webコンテナ
* Webサーバ
* Hypertext Transfer Protocol (HTTP)
* UNIX
* Microsoft Windows
* トランザクションモニター
* Web Services Interoperability (WS-I)

## 外部リンク
*IBMのアプリケーションサーバー：WebSphere Application Serverが選ばれる７つの理由
*＠IT：Linuxで動くJavaアプリケーションサーバ・カタログ
*The Server Side(英語) : サーバサイド技術専門のウェブサイト
*Microsoft - アプリケーションサーバーの役割