Web アプリケーションとは

いきなりフレームワークとか紹介しちゃって、そもそも「Web アプリケーションとは何か」って話をすっ飛ばしてたのでここで改めて。

ウェブアプリケーション - Wikipedia

そもそも Web アプリケーションとは「ブラウザから送信されたリクエストに基づいてサーバ上にあるプログラムが処理を行い、結果をレスポンスとしてブラウザにフィードバックする」ものを言います。サーバ上で動作することが要件なので、ブラウザ上で動作するものであっても JavaScript のように一旦クライアントにダウンロードされてから実行されるものは含みません。また、Java アプレットFlash のように、ブラウザ以外の何かしらのソフトが必要となるものも Web アプリケーションとは言いません。*1

ここで CGI を作ったことのある人なら「CGI と Web アプリケーションは何が違うの ?」と思われるでしょうが、Wikipedia にもある通り、CGI も立派な Web アプリケーションです。

Wikipedia にもある通り、Web アプリケーションには「ブラウザさえあれば使用できる」「特別なソフトはいらない」「メンテナンスが容易」という利点があります。一方で「サーバがダウンすると使えない」「通信環境がないと使えない」「GUI がブラウザ依存」などの欠点もあります。もちろんこれらの欠点を補うための方法はいくつかありますが、「通信環境がないと使えない」は如何せんどうしようもないので、Web アプリケーションは何らかの通信手段を確立している人が使用することが大前提となります。
さて、Java による Web アプリケーションですが、古くは JSPServlet による構築が行われていました。しかし、この方法では view と logic を完全に分離することが難しく、結果としてプログラマの作業が増えてしまうこともよくありました。こうした問題を解決する手段として生み出されたのが Java フレームワークで、先日紹介した Struts をはじめ、JSFWicket などの様々なフレームワークが提供されています。*2

さらには、全てを同じ言語で作るのではなく、view およびプログラムへのデータの受け渡しと、プログラム本体とを別々の言語で書くこともあります。また、処理の高速化を図るためにプログラム部分を C 言語や低級言語などで作って、サーバマシン用に最適化することも行われます。

Web アプリケーションにおいてとりわけ重要なのがいわゆる「三層構造」で、クライアントと Web アプリケーションサーバ間で通信し、さらに Web アプリケーションサーバとデータベースサーバで通信を行ってデータの処理をする、という仕組みです。もちろん、実際に三台も PC を用意するのは費用が掛かるので、Web アプリケーションサーバとデータベースサーバを一つにまとめたり、あるいは開発段階におけるテスト目的で、全てを一つのマシンで賄うこともできるのですが、当然その分だけ安全性という点では劣ります。

まぁいろいろ書きましたが、Web アプリケーションという考えは今後もいろいろな場面で必要とされることは間違いないので、どの言語を勉強するにしても頭の片隅に入れておくと何かと役に立つかと思います。

*1:ただし Web アプリケーションとこれらの技術を組み合わせる手法はよくある。

*2:フレームワークJava 以外でも存在します。CakePHPRuby on Rails などが有名。