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


ライブラリとフレームワークの違いが説明できるでしょうか。

結構よく使われる言葉ではありますが、混同されて使われていることも多いようです。

今回はライブラリとフレームワークの違いについてお話ししたいと思います。

ひとことで言えば、

  • ライブラリは、使い方の自由度が高く主導権がユーザ側にある。0から始める。
  • フレームワークは、使い方の自由度が低く主導権がフレームワーク側にある。1から始める。

具体的な事例

まずは何がライブラリで何がフレームワークと呼ばれているのか、

Python と JavaScript を例にいろいろ見てみることにします。

言語ライブラリフレームワーク
PythonNumPy, SciPy, Pandas, matplotlibDjango, Flask
JavaScriptjQuery, ReactAngular, AngularJS, Vue.js

ライブラリもフレームワークも両方自分で使ったことがあるという方は、

これらの間でなにが共通していて何が異なるか、すぐにわかると思います。


共通点と相違点

ライブラリもフレームワークも、開発やコードの管理を簡単で便利にするためのものです。

ライブラリは今すぐにでも自作できます。

例えば数学系の処理をする関数をまとめれば、それは立派なライブラリになります。

もとの単語の意味からイメージする

ライブラリとフレームワークのもととなった単語は、

それぞれ library と framework です。

library は図書館、framework は枠組みという意味になります。

つまりライブラリを使うのは、図書館で借りた本を使うのと同じようなものです。


例えばレポートを書くことが目的だとすると、

図書館で借りた一冊以上の本の一部または全部の内容を使うことになると思います。

もしその本を読んでみて参考にできそうなところがあれば、0から書き始めたレポートの内容に一部組み込んでいきます。

どれぐらい組み込むかは基本的に自由です。

(レポートに関して言えば引用が多すぎるとよくないのですが)

まったく参考になりそうにないなら、その本を使うのをやめてもいいわけです。


では、framework =枠組みを使うとどうなるかというと、

あらかじめ用意されたレポートのテンプレートの空欄を埋めていくことになります。

0から書くのではなく、1から書くというようなイメージです。

その代わり、自由度はあまり高くなく、書き方が限られてきます。


つまり、ライブラリは「使いたいときに使ってくれればいいよー」という制約がないもの、

フレームワークは「使うんだったら俺の言った通りにしろよ」という制約

(ファイル名、ディレクトリ名、ディレクトリ構成、各処理をするときの書き方など)

があるものです。

それぞれの特徴

ライブラリの特徴としては、

  • 自由度が高いこと
  • 用途が比較的汎用的であること
  • 他のライブラリやフレームワークと共存できること

が挙げられます。

理論的には、導入したらすぐにいろいろな使い方を覚えなければならないということはなく、

段階的に導入していくことができます。

(現実的には使わないと不便なので使い方はすぐに覚えたほうがいいと思います。)


一方でフレームワークの特徴としては、

  • 使い方が独自に指定されていること
  • 用途が比較的限定的であること
  • 他のフレームワークと共存できないこと

が挙げられます。

なので、フレームワークを勉強するときは、ライブラリのときよりもちょっと覚悟をしたほうがいいと思います。


CSS フレームワーク=ライブラリ

BootstrapMaterial-UIVuetify はフレームワークではなくライブラリです。

Wikipedia や公式サイトにフレームワークと書かれていたりしますが、

CSS フレームワークという言葉がライブラリを指しているらしいのです。

実際これらはライブラリの中でスタイルの塊を定義しているのを引き出して使っているだけです。


ライブラリとフレームワークは結構性質の異なる部分があることがご理解いただけましたでしょうか。

この記事がお役に立てれば幸いです。

では👋