ウェブアプリケーション
ウェブアプリケーション(Web application)は、インターネット(もしくはイントラネット)などのネットワークを介して使用するアプリケーションソフトウェアである。多くの場合、これらのアプリケーションは、Webブラウザ上で動作するプログラミング言語(たとえばJavaScript)によるプログラムとWebサーバ側のプログラムが協調することによって動作し、ユーザはそれをWebブラウザ上で使用する。
ウェブアプリケーションの一例としては、ウィキペディアなどで使われているウィキやブログ、電子掲示板、銀行のインターネットバンキング、証券会社のオンライントレード、電子商店街などネット販売のショッピングカートなどを挙げることができる。
ウェブアプリケーションに対して、ローカルのデスクトップ環境上で動作するアプリケーションは、デスクトップアプリケーションやスタンドアロンアプリケーションと呼ばれる。
特徴
サーバとクライアントの間の通信手段としては、アプリケーションプロトコルの1つであるHTTPを用いる。HTTPはステートレスなプロトコルであるため、HTTPだけでは状態の管理は行えない。しかし、大半のウェブアプリケーションではセッションの管理が必要であるため、Cookieなどを用いてサーバとクライアント間でセッションIDの受け渡しをし、セッションの管理を行っている。
当初、クライアント側にはHTML文書を送信するだけであったが、近年ではJavaScriptを用いたAjaxやAdobe FlashやHTML5などを用いることにより、リッチなユーザインタフェースを備えたウェブアプリケーションも多くなっている。これらはリッチインターネットアプリケーションとも呼ばれている。
歴史
当初、ウェブは、Webサーバ上に配置したHTMLファイルをウェブブラウザなどのユーザエージェントに返却することしかできなかったが、CGIの登場によりユーザからの入力に応じて、HTML文書などのリソースを動的に生成し、返却することができるようになった。このことにより様々なウェブアプリケーションを構築できるようになった。
現在では、ウェブアプリケーションを構築するための技術としてはCGI以外に、Java ServletなどのJava EEやApache HTTP Server用のモジュールとしてPHPで記述されたプログラムを実行するmod_php[1]、マイクロソフトが開発したActive Server Pagesなどが存在する。
開発
Webアプリケーションは、Perl, Python, PHP, Rubyといった動的言語で開発されることが多い。これは、Webアプリケーションの多くはI/Oバウンド(CPU速度よりもI/Oがネックとなる)であるため実行速度がそれほど問題にならないことが多く、それよりも開発の容易さを優先することに一因がある。基幹系業務や金融システムなどではJavaが使われることも多い。高速化のためにC言語などを使うこともある。
メリットとデメリット
メリット
- 更新が容易である
- Webサーバ上のファイルを更新するだけで、クライアントはHTTPアクセスするだけで最新のウェブアプリケーションを利用できる。
- クライアント側にアプリケーションのインストールが不要
- Webサーバで処理を行って出力結果のファイルをクライアント側(ウェブブラウザ)で表示するだけなのでクライアントはウェブアプリケーションをインストールする必要はない。
- ウェブブラウザがあれば環境に依存しない
- 各クライアント側の環境が違っていてもウェブブラウザがあればクロスプラットフォームに対応できる。
デメリット
- Webサーバの障害発生時は利用できないこともある
- Webサーバにファイルがあり処理も行うので、利用しようとアクセスしても使えない。
- 通信環境が使えない場所では利用できない
- Webサーバと通信するためスタンドアロンでは利用できない。
- ウェブブラウザによっては描写や動作が異なる
- ウェブブラウザのバグや設計によって違いが出るためである。特にクライアントが古いウェブブラウザを利用している場合、新しい技術(HTML5や新規格のJavaScript等)に対応していないために適切に動作しないことがある。
- セキュリティホールのリスクが高い
- 近年ではウェブアプリケーションそのものや実行環境(Javaなど)の脆弱性を狙った攻撃が急増し、機密情報の漏洩やマルウエア感染等の原因の一つになっている。
関連項目
- Webアプリケーションフレームワーク
- Webサーバ
- ウェブブラウザ
- HTML
- HTTP
- リッチインターネットアプリケーション
- 多層アーキテクチャ
- SaaS - アプリケーションサービスプロバイダ(ASP)
- ウェブユーザーインターフェース