アプリケーションフレームワーク
アプリケーションフレームワーク (英: application framework) とは、プログラミングにおいて、典型的・定型的なアプリケーションソフトウェアの標準構造を実装するのに使われる枠組みやテンプレートのことであり、ライブラリ(サブルーチンやクラスなど)の集合を含む[1]。
ソフトウェアフレームワークの一種であり、単にフレームワークとも呼ぶ。
特定のプラットフォーム(オペレーティングシステム)のための専用フレームワークであることもあれば、複数のプラットフォームをサポートするものもある。
概要
[編集]多くの再利用可能なコードをフレームワークにまとめることによって、開発者の手間を省き、新たなアプリケーションのために定型的で標準的なコードを毎回改めて書かなくて済むようにする。
アプリケーションフレームワークは特に、グラフィカルユーザインタフェース (GUI) が普及するにつれて一般化してきた。それは、GUIはオペレーティングシステムの仕様と密接な関係があり、一般的な操作を共通化する観点から、アプリケーションの基本的構造や外観(ルック・アンド・フィール)の標準化を促進する傾向があるためである。GUIアプリケーションはCUIアプリケーションと比べて実装が難しく、GUI部品(ウィジェット)の描画や、イベントハンドリングのためのイベントループ(メッセージループ)などの記述が煩雑になりがちだが、ほとんどのアプリケーションは同じようなGUI部品を必要とし、同じようなイベントループ構造を持っているため、新しいアプリケーションを開発するたびに新しく書き下すのは労力の無駄となる。GUIではアプリケーションの基本コード構造が明らかであるため、標準フレームワークには自動GUI作成ツール(テンプレートやコードジェネレーター)が用意されていることが多く、サードパーティーによるツール開発も比較的容易である。
フレームワークの実装にはオブジェクト指向プログラミング技法やオブジェクト指向プログラミング言語が一般に使われ、フレームワーク内の既存のクラスを継承して、あるアプリケーションの独自の派生部品を定義することができる。アプリケーションによる特定処理の部分的カスタマイズには、コールバック関数や仮想関数による多態性を用いたカスタマイズポイントをフレームワーク内に用意することで、差分プログラミングが可能となる。
事例
[編集]商用の最初のフレームワークとしてMacAppがある。Apple ComputerがMacintosh向けに開発したものである。当初、オブジェクト指向に拡張されたPascal言語であるObject Pascalで書かれていたが、後にC++言語で書き直された。Macintosh向けの他のフレームワークとしてMetrowerks PowerPlantやMacZoopがある(いずれもCarbonベース)。別の系統であるNeXTSTEP由来のmacOS向けアプリケーションフレームワークとしてCocoaがある。
フリーソフトウェアとしては、Mozilla、OpenOffice.org、GNOME、KDEといったプロジェクトにはアプリケーションフレームワークが含まれている。
マイクロソフトは、Microsoft Foundation Class (MFC) と呼ばれる Windows 向けの同様の製品を開発している。MFCはWindows APIを薄くラップしたC++言語専用のクラスライブラリおよびフレームワークであり、マイクロソフトは他にもActive Template Library (ATL) やWindows Template Library (WTL) といったC++のテンプレート機能を活用したクラスライブラリやフレームワークを開発している。.NET Frameworkは基本クラスライブラリのほかにいくつかのアプリケーションフレームワークを含んでおり、Windowsデスクトップアプリケーション向けの標準的なGUIフレームワークとしてWindows Forms (WinForms) やWindows Presentation Foundation (WPF) がある。そのほか、Windows 8以降のModern UIアプリケーション開発の基盤となるWindows Runtime (WinRT) に対応したWindows UI Library (WinUI) も存在する。
wxWidgetsやFOX toolkitのようなウィジェット・ツールキットのように、Macintosh、Windows、Linuxなどの複数のプラットフォーム向けのアプリケーションを同一ソースコードから作成できるクロスプラットフォームなフレームワークも多数存在する。Javaは標準的なGUIツールキットとしてSwingを備えている。Monoに対応したクロスプラットフォームなフレームワークとしては、Gtk#やXamarin.Formsが挙げられる。
また、ウェブアプリケーション構築のためのアプリケーションフレームワークも多数存在する(ASP.NET、Apache Struts、Ruby on Railsなど)。