Webフレームワーク(WF )、Webアプリケーションフレームワーク(WAF)、またはWeb開発フレームワークは、 Webサービス、Webリソース、Web APIなどのWebアプリケーションの開発をサポートするように設計されたソフトウェアフレームワークです。Webフレームワークは、 World Wide Web上でWebアプリケーションを構築およびデプロイするための標準的な方法を提供します。Webフレームワークは、 Web開発で実行される一般的なアクティビティに関連するオーバーヘッドを自動化することを目的としています。たとえば、多くのWebフレームワークは、データベースアクセス、テンプレートフレームワーク、セッション管理のためのライブラリを提供し、多くの場合、コードの再利用を促進します。[ 1 ]動的なWebサイトの開発を対象とすることが多いですが、静的なWebサイトにも適用できます。[ 2 ]
World Wide Webの設計は本質的に動的ではなかったため、初期のハイパーテキストは、Web サーバーに公開される手書きのHTMLテキスト ファイルで構成されていました。公開されたページへの変更はすべて、ページの作成者が行う必要がありました。1993 年に、外部アプリケーションと Web サーバーをインターフェースし、ユーザーの入力を反映した動的な Web ページを提供するためのCommon Gateway Interface (CGI) 標準が導入されました。[ 3 ]
CGIインターフェースの初期実装では、各リクエストが個別のプロセスを開始するため、サーバーの負荷に悪影響を及ぼしていました。[ 4 ]より最近の実装では、サーバーのリソースのフットプリントを削減し、全体的なパフォーマンスを向上させるために、他の技術とともに永続プロセスが利用されています。
1995年には、完全に統合されたサーバー/言語開発環境が初めて登場し、 ColdFusion、PHP、Active Server Pagesなどの新しいWeb専用言語が導入されました。
動的なウェブページを作成するための言語の大部分には、一般的なタスクを支援するライブラリが備わっていますが、ウェブアプリケーションでは、 HTMLの作成など、特定のタスクのために専用のライブラリが必要になることがよくあります(例えば、Jakarta Faces など)。
1990年代後半になると、成熟した「フルスタック」フレームワークが登場し始め、それらは多くの場合、Web開発に役立つ複数のライブラリを単一のまとまりのあるソフトウェアスタックに統合し、Web開発者が利用できるようにした。
ほとんどのWebフレームワークは、モデル・ビュー・コントローラー(MVC)パターンに基づいています。
多くのフレームワークは、MVCアーキテクチャパターンを採用し、データモデルをビジネスルール(「コントローラー」)とユーザーインターフェース(「ビュー」)に分離しています。これは、コードのモジュール化、コードの再利用促進、複数のインターフェースの適用を可能にするため、一般的に優れたプラクティスとされています。Webアプリケーションでは、これにより、例えばモバイルブラウザとデスクトップブラウザで異なるWebページを表示したり、機械可読なWebサービスインターフェースを提供したりするなど、異なるビューを表示することが可能になります。
ほとんどの MVC フレームワークは、「アクションベース」とも呼ばれるプッシュベースのアーキテクチャを採用しています。これらのフレームワークは、必要な処理を実行するアクションを使用し、結果をレンダリングするためにデータをビュー レイヤーに「プッシュ」します。[ 5 ] これとは別の方法として、プルベースのアーキテクチャがあり、これは「コンポーネントベース」とも呼ばれます。これらのフレームワークはビュー レイヤーから始まり、必要に応じて複数のコントローラから結果を「プル」できます。このアーキテクチャでは、1 つのビューに複数のコントローラが関与できます。
3層アーキテクチャでは、アプリケーションはクライアント、アプリケーション、データベースの3つの物理層を中心に構成されます。[ 6 ] [ 7 ] [ 8 ] [ 9 ]データベースは通常、RDBMSです。アプリケーションには、サーバー上で実行され、 HTTPを使用してクライアントと通信するビジネスロジックが含まれています。[ 10 ] Webアプリケーションのクライアントは、アプリケーション層によって生成されたHTMLを実行するWebブラウザです。[ 11 ] [ 12 ]この用語はMVCと混同しないでください。MVCでは、3層アーキテクチャとは異なり、ビジネスロジックを「中間層」であるコントローラから分離することが良いプラクティスと考えられています。[ 13 ] [ 14 ]
フレームワークは、単一のプログラミング言語に基づいてインターネットアプリケーションの構築をサポートするように構築されており、特定の言語の機能を拡張する Zend Framework や Ruby on Rails などの汎用ツールから、コンテンツ管理システム(CMS)、一部のモバイル開発ツール、一部のポータルツールなど、特定のユーザーアプリケーションを中心に構築されたネイティブ言語でプログラミング可能なパッケージまで、焦点が異なります。[ 15 ]
ウェブフレームワークは、ブラウザのアーキテクチャ規則や、ステートレスなHTTPなどのプロトコルに従って動作する必要があります。ウェブページはサーバーによって配信され、ブラウザはJavaScriptを使用してページを変更できます。どちらのアプローチにも、それぞれ長所と短所があります。
サーバー側のページ変更では、通常、ページの更新が必要になりますが、任意の言語を使用でき、より多くの計算能力を利用できます。クライアント側の変更では、デスクトップアプリケーションのようにページを小さなチャンクで更新できますが、JavaScript に限定され、計算能力が限られている可能性のあるユーザーのブラウザで実行されます。通常は、この 2 つの組み合わせが使用されます。[ 16 ] JavaScript を多用し、ページの一部のみを更新するアプリケーションは、シングルページアプリケーションと呼ばれ、通常はクライアント側の JavaScript Web フレームワークを使用してコードを整理します。
例としては、Backbone.js、AngularJS、Angular、Ember.js、ReactJS、jQuery UI、Svelte、Vue.jsなどが挙げられる。[ 17 ]
ReactやVueなどのJavaScriptベースのWebアプリケーションフレームワークは、幅広い機能を提供しますが、それに伴うトレードオフも存在します。これらのフレームワークは、ルーティング、コンポーネントベースの開発、状態管理など、ネイティブWebテクノロジーで利用可能な機能を拡張または強化することがよくあります。Web Components、FetchやES Modulesなどの最新のJavaScript API、Shadow DOMなどのブラウザ機能を含むネイティブWeb標準は大幅に進歩しましたが、フレームワークは、開発者の生産性を向上させ、大規模アプリケーション向けの構造化されたパターンを提供し、エッジケースの処理を簡素化し、パフォーマンス最適化のためのツールを提供する能力があるため、依然として広く使用されています。[ 18 ] [ 19 ] [ 20 ]
フレームワークは、パフォーマンスのオーバーヘッド、バンドルサイズの増大、複雑性の増加につながる可能性のある抽象化レイヤーを導入することがあります。React 18 や Vue 3 などの最新のフレームワークは、同時レンダリング、ツリーシェイキング、選択的ハイドレーションなどの機能でこれらの課題に対処しています。これらの進歩によりレンダリング効率とリソース管理は向上しますが、そのメリットは特定のアプリケーションと実装コンテキストによって異なります。Svelte や Preact などの軽量フレームワークは、異なるアーキテクチャアプローチを採用しており、Svelte は仮想 DOM を完全に排除してコンポーネントを効率的な JavaScript コードにコンパイルし、Preact は React と互換性のある最小限の代替手段を提供します。フレームワークの選択は、チームの専門知識、パフォーマンス目標、開発の優先順位など、アプリケーションの要件によって異なります。[ 18 ] [ 19 ] [ 20 ]
Enhance.dev、Astro、Freshなどの新しいカテゴリのWebフレームワークは、抽象化と開発ツールを最小限に抑えながら、ネイティブWeb標準を活用しています。[ 21 ] [ 22 ] [ 23 ]これらのソリューションは、プログレッシブエンハンスメント、サーバーサイドレンダリング、パフォーマンスの最適化を重視しています。Astroはデフォルトで静的HTMLをレンダリングし、インタラクティブな部分のみをハイドレートします。Freshは、ランタイムオーバーヘッドゼロのサーバーサイドレンダリングに重点を置いています。Enhance.devは、Webコンポーネントを使用してプログレッシブエンハンスメントパターンを優先します。これらのツールは、ロジックをビルド時またはサーバーサイド実行に移行することでクライアントサイドJavaScriptへの依存を減らしますが、インタラクティブ性のために必要な場合はJavaScriptを使用します。このアプローチにより、パフォーマンスが重要でコンテンツ重視のアプリケーションに特に適しています。[ 18 ] [ 19 ] [ 20 ]
フレームワークは通常、プログラムの制御フローを設定し、さまざまなイベントを公開することで、フレームワークのユーザーがそのフローに「フック」できるようにします。 [ 24 ]この「制御の反転」設計パターンは、フレームワークの決定的な原則と考えられており、チーム全体で共通のフローを強制し、誰もが同様の方法でカスタマイズできるため、コードにメリットがあります。[ 24 ]例えば、Ruby のSinatra ( Express.js の着想源) のような人気のある「マイクロフレームワーク」では、HTTP リクエストの前後に「ミドルウェア」フックを使用できます。これらのミドルウェア関数は何でもよく、ユーザーはログ記録、認証、セッション管理、リダイレクトを定義できます。[ 25 ]
ウェブキャッシングとは、帯域幅の使用量、サーバー負荷、および体感的な「遅延」を軽減するために、ウェブドキュメントをキャッシュすることです。ウェブキャッシュは、通過したドキュメントのコピーを保存し、特定の条件が満たされれば、後続のリクエストはキャッシュから処理されます。一部のアプリケーションフレームワークは、ドキュメントをキャッシュし、データベースアクセスやテンプレート解釈など、ページの準備におけるさまざまな段階をスキップするメカニズムを提供しています。
一部のWebフレームワークには、認証および認可フレームワークが付属しており、Webサーバーがアプリケーションのユーザーを識別し、定義された基準に基づいて機能へのアクセスを制限できます。Drupalは、ページへのロールベースのアクセスを提供し、ユーザーの作成とロールの割り当てを行うためのWebベースのインターフェースを提供する例です。
多くのウェブフレームワークは、データベースバックエンドへの統一されたAPIを作成し、ウェブアプリケーションがコードの変更なしにさまざまなデータベースと連携できるようにし、プログラマがより高レベルの概念を扱うことができるようにします。さらに、一部のオブジェクト指向フレームワークには、オブジェクトをタプルにマッピングするオブジェクトリレーショナルマッピングを提供するマッピングツールが含まれています。[ 26 ]
一部のフレームワークは、内省やよく知られた慣習に従うことによって、Webアプリケーションの設定を最小限に抑えます。たとえば、多くのJavaフレームワークは、実行時に必要な情報を永続化できるデータベーススキーマを生成できる永続化レイヤーとしてHibernateを使用しています。これにより、アプリケーション設計者は、データベーススキーマを明示的に定義することなくビジネスオブジェクトを設計できます。Ruby on Railsなどのフレームワークは、逆の動作も可能で、つまり、データベーススキーマに基づいて実行時にモデルオブジェクトのプロパティを定義できます。[ 26 ]
Webフレームワークが提供するその他の機能には、トランザクションサポート[ 27 ]やデータベース移行ツール[ 26 ]などがあります。
フレームワークのURLマッピングまたはルーティング機能は、フレームワークがURLを解釈する仕組みです。DrupalやDjangoなどの一部のフレームワークは、正規表現を使用して指定されたURLを事前に定義されたパターンと照合しますが、他のフレームワークは書き換え技術を使用して、指定されたURLを基盤となるエンジンが認識できるURLに変換します。Zopeなどで使用されているグラフトラバーサルという別の手法では、URLがオブジェクトグラフ(モデルとビュー)をたどるステップに分解されます。
パターンマッチングや書き換えを用いてリクエストをルーティングおよび処理するURLマッピングシステムでは、より短く「フレンドリーURL」を使用できるため、サイトのシンプルさが向上し、検索エンジンによるインデックス登録も改善されます。例えば、「/page.cgi?cat=science&topic=physics」で終わるURLは、「/page/science/physics」のように簡単に変更できます。これにより、URLがユーザーにとって覚えやすく、読みやすく、書きやすくなり、検索エンジンにはサイトの構造レイアウトに関するより良い情報が提供されます。グラフトラバーサル方式もフレンドリーURLの生成につながります。「/page/science」のような短いURLは、単に「/page/science/physics」への長いトラバーサルの短縮形であるため、デフォルトで存在する傾向があります。
Ajax (「非同期JavaScriptとXML 」の略)は、Webアプリケーションを作成するためのWeb開発技術です。その目的は、ユーザーが変更を要求するたびにWebページ全体を再読み込みする必要がないように、舞台裏でサーバーと少量のデータをやり取りすることで、Webページの応答性を向上させることです。これにより、Webページのインタラクティブ性、速度、保守性、ユーザビリティが向上します。[ 28 ]
JavaScriptにおけるAjaxプログラミングは複雑であるため、 Ajaxサポートに特化したAjaxフレームワークが数多く存在します。中には、より大規模なフレームワークの一部として組み込まれているAjaxフレームワークもあります。例えば、jQuery JavaScriptライブラリはRuby on Railsに含まれています。
「 Web 2.0」のリッチなWebアプリケーション開発への関心が高まるにつれ、AjaxとJavaScriptで直接プログラミングすることの複雑さが明らかになり、開発者がJava、Python、Rubyなどの高水準言語でコーディングできるように、コンパイラ技術が登場しました。これらのコンパイラの先駆けはMorfikで、その後Google Web Toolkitが登場し、しばらくしてPythonとRubyへの移植版であるPyjsとRubyJSが開発されました。これらのコンパイラと関連するウィジェットセットライブラリのおかげで、リッチメディアAjaxアプリケーションの開発は、デスクトップアプリケーションの開発に非常に近いものになりました。
一部のフレームワークは、Webサービスの作成と提供のためのツールを提供します。これらのユーティリティは、Webアプリケーションの他の部分と同様のツールを提供する場合があります。[ 29 ]
近年登場した多くのWeb 2.0 RESTfulフレームワークは、リソース記述フレームワーク(RDF)の概念に基づき、一種のセマンティックWebオントロジーでリソースのコレクションを構築するためのリソース指向アーキテクチャ(ROA)インフラストラクチャを提供している。
{{cite web}}: CS1メンテナンス: アーカイブサービスは非推奨になりました (リンク)オブジェクトリレーショナルマッピング (一般的に ORM と略される) は、アプリケーションの豊富なオブジェクトをリレーショナルデータベース管理システムのテーブルに接続する技術です。Active Record は、アプリケーションがテーブルに格納されているデータを読み取って操作できるようにするメソッドを自動的に作成します。