フレームワークとは何か
フレームワークとは、アプリケーションの標準的な構造をまとめた仕組みの総称である。ライブラリよりも広義な意味で使われる。 たとえばStruts(ストラッツ)というフレームワークは、WEBアプリケーションを開発する上で必要な、Java言語で作られたクラス群である。 現在のソフトウェア開発では、フレームワークの利用によってより高品質・高生産性を実現するための王道となりつつある。 ただのJavaによってゼロからソフトウェアを作っていくことはもちろん可能であるが、例えばWEBクライアントとWEBサーバとのデータ通信を アプリケーションで実現させるため、フレームワークが提供するクラス・ライブラリをプログラムで利用することで簡単に実現することができる。 なお、フレームワークは開発方式や開発手順を表す言葉ではないことに注意していただきたい。ソフトウェア開発のための枠組みという表現もあるが、 それはフレームワークが提供するクラス・ライブラリによって、プログラミングの方法が制限される、という意味での枠組みである。
フレームワークの活用
Strutsというフレームワークは、前述の通りJava言語によって作られたクラスの集合体である。Java言語はオブジェクト指向開発に向いている言語であり、 StrutsもObject指向に沿った使い方をする。例えば、HttpServletクラスにはinit()メソッドやdoGet()メソッドが定義されてある。そのHttpServletクラスを継承し、 独自にSampleHttpServletクラスを定義し、init()やdoGet()をオーバーライドすることで、HttpServletによる恩恵を受けることができる。HttpServletクラスはGenericServletクラスを 実装しているため、Httpリクエストの種類によってSampleHttpServletクラスに定義したinit()メソッドやdoGet()が呼び出される。
ライブラリ、フレームワーク、パッケージの違い
ライブラリとは、あるソフトウェアを構成するアプリケーションから呼び出されるAPIの総称である。DB接続や切断など、汎用的な処理を APIとして切り出したものをライブラリと呼ぶ。フレームワークは前述したとおり、アプリケーションの標準的な構造をまとめた仕組みの総称である。つまり、ライブラリはAPIを意味するのに対し、 フレームワークはAPIとその使い方、構造を意味する。パッケージはある特定のサービスを提供するためのソフトウェア群の総称である。SAP/R3に代表されるように、パッケージはそれ自身でサービスを提供することができる。 フレームワークはフレームワークの構造に従ってシステムやソフトウェアを開発するために拡張しなければならない。 ライブラリ、フレームワーク、パッケージという言葉は混同されがちであるが、それぞれの概念が異なる。どれがどれを内包したり、大小の関係性を持つことはない。
フレームワークの弊害
フレームワークを利用してソフトウェア開発を行う場合、ゼロからアプリケーションを作る必要がなくなる。フレームワークを大いに利用し、 システムを作るための時間やコスト、あるいは品質を有利にすることができる。しかしながら、フレームワーク自身にバグがあったり、機能性が低い場合は 開発効率が著しく低下してしまう。大規模なシステム開発を行う場合、オープンソースのフレームワークや、有償で使うことができるフレームワークを システムに合わせて拡張するのが一般的である。この拡張に失敗することがあり、それは開発全体に大きな悪影響を及ぼす。フレームワークを利用する開発者にとっては、 フレームワークによって提供されたAPIの動作が保証されていることが前提であるから、ここに致命的なバグがあってはならない。また、フレームワークを利用するための 方法や、使い方を示したドキュメントが充実していることも、フレームワークによる恩恵を最大限に引き出すために必要なことである。