フレームワークとライブラリの違い

フレームワーク全盛の昨今、あまりにもフレームワークを使うことに慣れすぎてフレームワーク自体についてはあんまり考えたことがなかったけど、

http://capsctrl.que.jp/kdmsnr/wiki/bliki/?InversionOfControl
上記サイトに

フレームワークの第一の重要な特徴は、フレームワークに合わせて利用者が定義したメソッドが、アプリケーションコードからはあまり呼ばれず、フレームワーク自身からよく呼び出されるという点だ。フレームワークは、アプリケーションの動作を調整したり、動作の順番を制御したりするためのメインプログラムとしての役割を果たす。制御の逆転によって、フレームワークを拡張可能なスケルトンとして動作することができる。フレームワークが定義した汎用アルゴリズムにあわせて、利用者はメソッドを作成し、個別のアプリケーションをつくりあげる。

とあり、また

制御の逆転の存在が、フレームワークとライブラリを決定的に違うものにしている。ライブラリとは、基本的に呼び出し可能な関数の集まりである。最近では、通常はクラスの集まりとして構成されている。関数を呼び出すと、何らかの作業を行い、クライアントに制御を返す。

一方、フレームワークは、抽象的な設計を含んでおり、より多くの振る舞いが組み込まれている。フレームワークを使うには、作成したクラスを、サブクラス化やプラグインによって、フレームワークに組み込む。フレームワークのコードが、作成したクラスのコードを組み込まれた場所で呼び出す。

とある。

なるほど、フレームワークとライブラリの最大の違いは利用者が呼び出すか、呼び出されるかというところにあったようだ。おそらくこれまでは呼び出されるか、呼び出すかというところではなくてプログラムを組みやすいかどうか、やりたいことが素直にできるかどうかという観点でフレームワークを考えていたために、ライブラリとフレームワークがごっちゃになっていたのだろう。自分だけフレームワークとライブラリがごっちゃになってたと思うと癪なのでこの世にはいっぱいそれらの区別がついてない人がいると思い込んでおこう。

上記のページを見る限り、考え方自体は相当昔からあったようなのでおそらくフレームワークであるべきところ、ライブラリであるべきところ、良いフレームワークとはみたいなものは議論され尽くしているのかもしれない。ちょっとそこら辺を漁ってみるのも面白いのかも。