Webアプリケーションフレームワーク
Web アプリケーションフレームワーク(ウェブアプリケーションフレームワーク、英: Web Application Framework)は、動的な ウェブサイト、Webアプリケーション、Webサービスの開発をサポートするために設計されたアプリケーションフレームワークである。 フレームワークの目的は、Web 開発で用いられる共通した作業に伴う労力を軽減することである。たとえば、多数のフレームワークがデータベースへのアクセスのためのライブラリや、テンプレーティング フレームワーク、セッション管理を提供し、コードの再利用を促進させるものもある。
目次 |
Webアプリケーションフレームワークの発展 [編集]
Common Gateway Interface(CGI) [編集]
World Wide Web の設計は元々ダイナミックなものではなく、初期のハイパーテキストは Webサーバ上で公開されたハードコードの HTML でできていた。
公開されたページについての変更はページの作者が行う必要があった。 ユーザーからの入力を反映したダイナミックな web ページを提供するため、Web サーバが外部のアプリケーションとやり取りするためのCommon Gateway Interface (CGI) 標準が導入された。 [1] CGI では各リクエストが別々のプロセスを開始しなければならないため、サーバの負荷に悪い影響を与えることがある。
密結合 [編集]
高いトラフィックに対応した Web アプリケーションを実現するため、プログラマーは Web サーバとの密な結合を望んだ。Apache HTTP Serverは、例えば、Web サーバが任意のコードを実行したり(mod_pythonなど)、特定のリクエストを動的なコンテンツを扱える Web サーバに転送するような(mod_jkなど)モジュールをサポートしている。Javaなどの言語で書かれた動的なコンテンツをWeb サーバで扱うことができるよう設計されたものもある(Apache Tomcatなど) 。
Web 言語 [編集]
同じころ Web 用途に特化してPHP やActive Server Pages などの新しい言語が開発された。
Web ライブラリ [編集]
Web ページの動的な生成に用いられる大半のプログラミング言語が、共通した作業を行うためのライブラリを持っているが、Web アプリケーションは HTML の生成(たとえば JavaServer Faces) などWeb アプリケーションで有用なライブラリを必要とすることが多い。
フルスタック [編集]
成熟した“フルスタック”フレームワークが登場した。 これは、複数の Web 開発に有用なライブラリを一つの結合した Web開発者向けの ソフトウェアスタックとして集約したものである。 例として、JavaEE、OpenACS、Ruby on Railsなどがある。
ポートレット [編集]
従来のフレームワークは基本的に横型に分割されているため、ユーザ機能を追加/変更/削除する場合は、アプリケーションを入れ替える必要があった。ポータルフレームワークはユーザ機能を縦型に分割し、ユーザ機能毎にホット・デプロイ/アンデプロイできる。デプロイされたポートレットをドラッグ・アンド・ドロップ操作でWebページに配置することができるのが特徴である。
なお、ポートレット毎にエンティティインターフェース(モデル)、表示(ビュー)、業務ロジックが含まれているため、ポートレット毎に異なるスタック技術を利用することもできる。例えばJSFで作成したポートレットとSpringFrameworkで作成したポートレットを1つのWebページに配置することができる。また、異なった言語でポートレットを記述することもできる。例えばJava、Ruby、PHPで記述したポートレットを一つのWebページに配置できる。
ユーザ機能を随時に追加/置き換え/削除することができるため、ポートレットフレームワークはアジャイル開発のように継続的に開発を行う場合に適している。例えばScrumの各ユーザストリーをプラグインにすることができる。
ポートレットフレームワークを利用したWebシステムの例として、liferay、ADempiere、Alfresco、JasperServerなどがある。その中でliferayは開発者向けのツールが揃っている。
アーキテクチャ [編集]
Model view controller [編集]
多数のフレームワークが、データモデル、ビジネスルール、ユーザーインターフェイスを分割するためにModel View Controllerアーキテクチャパターンに従っている。
プッシュ型 vs. プル型 [編集]
ほとんどの MVC フレームワークは、プッシュ型のアーキテクチャにしたがっている。このようなフレームワークは、処理を要求するアクションを実行し、次に結果を出力するためにデータを表示のレイヤに“プッシュ”する。 [2] Struts、Django、Ruby on Rails、Spring MVCなどがこのアーキテクチャの良い例である。
これに対するものとしてプル型のアーキテクチャがあり、“コンポーネント型”とも呼ばれている。こうしたフレームワークは表示レイヤから処理を開始し、必要に応じて複数のコントローラからの処理の結果を“プル”する。 このアーキテクチャでは、複数のコントローラーが一つのビューに関連付けられる。 Tapestry、JBoss Seam、Velocity などがプル型アーキテクチャの一例である。
コンテンツ管理システム [編集]
自己記述的なコンテンツ管理システムが、高位のレイヤーの Webアプリケーションフレームワークに進出し始めている。 例えば、Drupal の構造は Web アプリケーションフレームワークに関連した機能を提供するモジュールにより機能を拡張できる最小限のコアを提供している。 Joomla と Plone も同様な機能を持っている。 Liferay(オープンソース)のような高度な汎用コンテンツ管理システムでは、更にコンテンツのバージョン管理、公開開始日/終了日、公開する前の承認ワークフロー、プレビュー機能、マルチメディアコンテンツの対応など従来ではWebSphereやMS Sharepointなどでしか提供されていない機能にも対応している。 伝統的にこれらは コンテンツ管理システムとも呼ばれる。 しかし、“コンテンツの管理”がこれらのシステムの上で最重要の機能であるかについては議論の余地がある。Liferayのようなフレームワークは関数API、機能のフレームワークやコーディング標準、伝統的にWebアプリケーションフレームワークに関連する機能も提供している。
機能 [編集]
セキュリティ [編集]
Webサーバがアプリケーションのユーザーを識別し定義された基準に基づきアクセスを制限する認証と承認のフレームワークを備えた Webアプリケーションフレームワークもある。 Django はその一例で、ロールに基づいてページに対するアクセスを管理する機能と、ユーザーの作成やロールの割り当てのためのWebベースのインターフェイスを提供する。
データベースへのアクセスおよびマッピング [編集]
多数の Web アプリケーションフレームワークはバックエンドのデータベースに対する統一された APIを提供し、コードの変更なく多数のデータベースとやりとりすることを可能にし、プログラマーがより高位の概念を扱うことができるようにしている。 また高いパフォーマンスを得るため、AOLserverが行うようにデータベースのコネクションがプールされていなければならない。
さらに、オブジェクト指向フレームワークはオブジェクトと関係モデルとの対応づけを行うオブジェクト関係マッピングの機能を提供するマッピングツールを備えている。
Webアプリケーションフレームワークが提供するその他の機能としてトランザクションのサポートやデータベースの移行ツールなどが含まれる。
URL マッピング [編集]
パラメータの付加された URL をわかりやすい URL に自動的に変換することにより、システムは使いやすく、またさらなる利点としてサーチエンジンがインデックスを作りやすくなる。 たとえば、?cat=1&pageid=3 で終わるようなアドレスを /category/science/topic/physics や /science/physics への変換するような例である。 カテゴリーの ID が変更されても URL は変わらない(従ってサーチエンジンに対して有利である)。URL の変換により、アプリケーションが REST 的な設計方法の一部の要素によりうまく適合できるようにすることができる。
Web テンプレートシステム [編集]
詳細は「:en:Web template system」を参照
動的なWebページは通常静的な部分(HTML)とHTMLを生成するコードである動的な部分からなる。HTML を生成するコードはテンプレート上の変数あるいはコードから生成を行う。生成されるテキストをデータベースから取得することで、サイト内のページの数を劇的に少なくすることができる。
例として 500 軒の家を扱う不動産会社を考える。静的なWebサイトでは、不動産会社は500ページ作成する必要があるが、動的なWebサイトでは、不動産会社はただ動的なページを500レコードを持つデータベースに接続するだけでよい。
テンプレートでは、プログラミング言語由来の変数を、コードを使わずに挿入することができるため、Webサイト内のページを更新するためにプログラミングの知識が必要なくなる。 HTML と変数を区別するための記述方法が定義されており、たとえば JSP では <c:out> タグが変数を出力するために使用され、Smarty では{$variable} が用いられる。
多数のテンプレートエンジンはIFやFOREACHといった若干の論理タグをサポートしている。 これらはビジネスロジック層ないしMVCパターンにおけるM(モデル)との明確な分離を行うため、プレゼンテーション層に必要な決定を行うためだけに用いられる。
キャッシュ [編集]
詳細は「:en:Web cache」を参照
Web のキャッシングとは、帯域使用率、Webサーバの負荷、ユーザーに感じられる“ラグ”を削減するための Web文書のキャッシングである。Web キャッシュシステムは、ドキュメントのコピーを保存し、以降のリクエストは一定の条件が満たされればキャッシュから供給すれば問題なくなる。アプリケーションフレームワークには文書をキャッシュし、Web テンプレートシステムをバイパスする機構を提供するものもある。
Ajax [編集]
詳細は「:en:Ajax framework」を参照
Ajax とは “非同期(Asynchronous) JavaScriptおよびXML”の短縮形であり、インタラクティブなウェブアプリケーションを作成するための Web 開発手法である。Ajax の目的はユーザーが変更を要求するごとに Web ページ全体がリロードされないようにするため、背後でサーバとのデータのやり取りを少なくし、Web ページをより高速に反応するようにすることである。Web ページのインタラクティブ性や、速度、ユーザビリティを向上させることが意図されている。
Ajax プログラミングは複雑であるため、Ajax サポートを専門に行うAjax フレームワークが多数存在している。 他の大きなフレームワークの一部として組み込むことができるものも存在する。 たとえば、Prototype JavaScript Framework は Ruby on Rails に含まれている。
自動構成 [編集]
フレームワークにはイントロスペクション や以下の方法を用いてによってWebアプリケーションの構成作業をできる限り少なくするものがある。 たとえば、多数の Java フレームワークは Hibernate を永続化層として使用しており、必要な情報を永続化させるためのデータベーススキーマをランタイムに生成することができる。 これによりアプリケーションの設計者は明示的にデータベーススキーマを設計せずにビジネスオブジェクトを設計することができる。 Ruby on Railsのようなフレームワークは逆の動作、すなわちモデルオブジェクトのプロパティをデータベーススキーマに基づきランタイムに定義することが可能である。
Web サービス [編集]
詳細は「Webサービス」を参照
Webサービスの作成と提供を行うツールを提供するツールを備えたフレームワークもある。 これらのユーティリティは、その他の Web アプリケーションと同様の機能を提供する。
技術 [編集]
「List of web application frameworks」も参照
プログラミング言語 [編集]
多数のプログラミング言語に対して関連した Web アプリケーションフレームワークが存在する。 しかし、フレームワークに対するより高いレベルのサポートやフレームワークの開発に導く機能を提供したり十分な数の開発者がいる言語もあれば、そうでないものもある。
Java [編集]
膨大な数の Java フレームワークが開発中、ないしは実際に使用されている。 これらのフレームワークの多くはJava EE プラットフォームの上に構築されているか、ないしは要素を借りてきている。
C# および VB.NET [編集]
C# および VB.NET は、マイクロソフトの言語非依存の ASP.NET プラットフォーム上で最も人気のある言語である。 初期には最も人気のある Web アプリケーションフレームワークは DotNetNuke Web アプリケーションフレームワークであった。 ASP.NET 自体は Web アプリケーションを構築するために設計された技術であるため、誤って Web アプリケーションフレームワークとしてのみ参照されることがある。 これは、ASP.NET の一面に過ぎない。Web アプリケーションフレームワークとしての基本機能に加えて、好みの.NET 言語を選ぶことができる。 ASP.NET は統合された AJAX フレームワークである ASP.NET AJAX を備えている。
PHP [編集]
PHP の動的な Web ページに向けた設計により、CakePHP、PRADO、Qcodo、Symfony、Zoop Framework、eZ publish Web 出版フレームワーク、Zend Framework などのフレームワークが支持を得ている。 これらのフレームワークは、コア言語の上にフレームワーク層を適用することにより、アプリケーションの構造とモデル化を支援する。 これらは、ボトムアップからのプログラミングについての問題に対向するものである。
上記のフレームワークとは逆に、MODx、Drupal、Joomla、TYPO3 といったソフトウェアプロジェクトは、Web コンテンツ管理システムからより上位の Web アプリケーションフレームワークへと変貌し始めている。 これらの構造は、Web アプリケーションフレームワークに関連した機能を提供するモジュールにより機能を拡張できる最小限のコアを提供している。
オープンソースのプロジェクトとしてコミュニティが多数のモジュールを寄贈しており(たとえばDrupal は 1,000 以上、Typo3 には 2,500 以上のモジュールがある)、CMS のコア+モジュールを用いて、広い範囲の機能を持った Web サイトを、実際にはPHPレベルのコーディングを行わずに組み立てる方法が形作られている。
Perl、Python、Ruby [編集]
動的な言語によるフレームワークが多数存在する。
Perl には Maypole、Catalyst、Jifty、Ark、Mojolicious などのフレームワークがある。
Python には、たとえば Django、TurboGears、Pylons、Quixote、Karrigell、web2pyなどのフレームワークが存在する。ほぼ完全なリストとしてこのリストがある。
Ruby には Nitro、Merb、Ruby on Railsといったフレームワークがある。
Tcl [編集]
OpenACS は、Tcl で高トラフィックの Web アプリケーションを開発するために設計されたオープンソースの Web アプリケーションフレームワークである。
Smalltalk [編集]
Seaside はSmalltalkで Web アプリケーションを開発するためのオープンソースの Web アプリケーションフレームワークである。 Seaside の開発は主に Squeak で行われているが、他の Smalltalk の方言にも移植版が存在する。
JavaScript [編集]
Helma は Java で記述されたオープンソースの Web アプリケーションフレームワーク/出版システムであり、JavaScript をプログラミング言語として使用する。
オペレーティングシステム [編集]
ごくわずかの例外はあるが、Web アプリケーションフレームワークは多数のプラットフォームで動作する、プラットフォーム非依存の言語の上に作られている。
特定の構成を推奨するフレームワークもあるが、大半のものは Windows、Linux、Mac、やUnixベースのプラットフォーム上で動作する。 特筆すべき例外として、.NETのために書かれたDotNetNukeは Mono ランタイムをサポートしていない。
参考文献 [編集]
- ^ “CGI: Common Gateway Interface”. 2007年7月29日閲覧。
- ^ en:Template:Cite web Thomson, Kris (2003年10月29日). “Clarification on MVC Pull and MVC Push”. 2007年7月29日閲覧。
- Tony Shan and Winnie Hua (2006). Taxonomy of Java Web Application Frameworks. Proceedings of the 2006 IEEE International Conference on e-Business Engineering (ICEBE 2006), October 2006, p378-385.
関連項目 [編集]
- List of web application frameworks
- Comparison of web application frameworks
- ソフトウェアフレームワーク
- アプリケーションフレームワーク
- Don't repeat yourself (DRY)
- Solution stack
- JavaScript library
|
||||||||||||||||||||||||||