ライブラリとフレームワークの違いとは何か?目的・制御・自由度の点から違いを解説

2020年10月20日

ライブラリとフレームワークの違いのイメージ画像

アプリケーション開発をしていると、ライブラリやフレームワークという言葉を耳にします。
両方ともアプリケーション開発を助けてくれるものですが、その違いはどこにあるのでしょうか?
今回はライブラリとフレームワークの違いについて解説していきます。

ライブラリとは何か?

ライブラリ(library)とは本来書庫や図書館という意味を持っていますが、IT分野では、便利なプログラムのコードが集められたファイルのことを指します。
Webサイトを制作する時に使用されるjQueryはJavaScriptのライブラリとして有名です。
多くの場合、ファイルに格納されているコードは単体では起動しません。他の実行可能ファイルと連結することによって起動します。使用するライブラリを決めて、マニュアルを読みながら組み込んでいきます。

汎用的なコードが格納されているため、ライブラリを活用することで開発の効率化も可能です。特定のソフトウェアやハードウェアの開発キットとして配布されることもあれば、頻繁に使用するコードをファイルに格納してライブラリ化することもあります。自分で作成したライブラリを一般公開することも可能です。そのため、スキルアップ目的で、自作ライブラリを公開するプログラマーも増えています。

フレームワークとは何か?

フレームワーク(framework)は骨組みという意味を持ち、ビジネスにおいては考え方の枠組みを意味し、IT分野ではアプリケーション開発で必要となる枠組み(構造)のことをいいます。
例えば、Webアプリケーション開発で多く用いられるPHPであれば、CakePHPLaravelなどがあります。
フレームワークはテンプレート化されており、一部(ホットスポット)にコードを当てはめて使用します。

全てのアプリケーション開発に使用できる万能なフレームワークは存在しません。各フレームワークには専門領域があります。これらのフレームワークを使用してアプリケーション開発することで、一定の品質をもったアプリケーションを作ることができるのです。

フレームワークの種類

フレームワークの種類 対象とする領域
Webアプリケーション・フレームワーク Webアプリケーションのフロントエンド
デスクトップGUIフレームワーク デスクトップアプリケーションのGUI
O/Rマッピング・フレームワーク オブジェクトとリレーショナル・データベースのマッピング
Webサービスフレームワーク Webサービスの通信基盤
テスティング・フレームワーク プログラムの単体テスト

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

ライブラリとフレームワークは、アプリケーション開発の効率化のために使われるものという共通点があります。
実際に、アプリケーションの開発で、ライブラリとフレームワークを使用した経験がある方もいるでしょう。ライブラリとフレームワークは、似ている特徴を持っていますが違いもあります。
開発現場で頻繁に使用されるものなので、これらの違いについて理解を深めておきましょう。

目的

ライブラリの目的は、求められた機能を実現するために、コードを再利用して開発効率を上げたり、プログラムを軽くしたりすることです。
その一方で、フレームワークの目的は、アプリケーションの設計構造(骨組み)を再利用することを目的にしています。

例えば、JavaScriptのライブラリであるjQueryでは、要素の表示・非表示を切り替える"toggle"というメソッドがあります。Webサイトでは、スマホ用のハンバーガーメニューなど、表示非表示を切り替えたい場面は多々あります。
そのため、いちいちコードを書いていては開発がめんどうになってしまいますが、ライブラリを使えば、簡単な記述でほしい機能を実現することができます。

一方で、フレームワークはもっと大きな開発の枠組みをサポートしてくれます。
このフレームワークで多くの人が一番イメージしやすいのは、PHPで作られたWordPressではないでしょうか。
WordPressは無料のCMS、つまりWebサイト更新ツールとして知られていますが、WordPressをPHPのフレームワークだと捉える人もいます[1] Is WordPress a PHP framework? – Quora
WordPressの中身を見てみると、ファイルが一定の規則に従って管理され、「デザインを変更したい場合は○○のファイルを修正する」「Webサイトの設定を変える場合は○○のファイルを編集する」というルールが定まっています。
そのため、WordPressは開発しやすく、世界中にディベロッパーが存在します。

フレームワークというのはこのWordPressのように、ファイルやフォルダのルールが定まっており、規則に従って開発することで、そこまで高い知識がなくともアプリケーション開発ができるようにしたものです。

フレームワークはライブラリの集合体なのか?

ライブラリとフレームワークの役割のイメージ画像

世の中には、フレームワークをライブラリのコレクションだと考える人もいるようです[2]What is Frameworks? [Definition] Types of Frameworks
たしかに、フレームワークの中にはライブラリのように、特定のコードを記述することで簡単に機能を実現することができることもあります。そのため、フレームワークがライブラリの役割も担っていることもあります。
しかし、両者の目的の違いからわかるように、フレームワークというのはアプリケーションの骨組みを作るものであり、ライブラリは機能を実現させるものです。

例えるなら、クルマを開発・製造する際に、「どこにタイヤを取り付けて、どこにエンジンを取り付けるのか」というような、大きな枠組みを決めるのがフレームワークであり、その部分的な機能を実現するのに用いられる過去の事例がライブラリです。

制御

ライブラリは単体では起動しないため、読み込むだけでは、プログラムが実行されることがありません。そのため、実行可能ファイルに連結して読み込み、起動させることが必要です。
例えば先ほどのJavaScriptのライブラリ・jQueryも、そのファイルをダウンロードし、Webサイトにアップするだけではなんの効果もありません。
かならず、ライブラリの中のメソッドを呼び出すようなコードを記述し、ライブラリの中のプログラムを呼び出す必要があります。
如何に立派な書庫が家にあったとしても、その中の本を手に取って読んでみなければ、知識にならないのと同じことです。

その一方で、フレームワークは読み込めばプログラムが実行されます。完成形のプログラムではないため、一部のコードを修正しなければいけませんが、半製品の状態でも起動させることができます。
これも先ほどのWordPressをイメージすればよいでしょう。
WordPressはインストールするだけで、さまざまな機能を使うことができます。
しかし多くの場合、開発はフレームワークをインストールしてからがはじまりであり、さまざまなコードを追加していって、骨組みしかないシステムに肉付けをしていきます。

自由度

ライブラリとフレームワークの自由度の違いを簡単にまとめると、ライブラリは組み合わせが自由であり、フレームワークは決められた範囲の中で自由な開発ができます。

ライブラリは、汎用可能なコードが格納されたファイルです。どのコードを使用していくかは、プログラマーが決めることができます。
JavaScriptのライブラリ・jQueryには先ほど紹介したtoggle以外にもさまざまなメソッドが用意されています。
この中で何を使用するかはプログラマーの自由です。
しかし、多くの場合、これらのライブラリのおおもとのコードを修整することは難しく、決められた動作を行わせることしかできません。

一方で、フレームワークはコードの書き方やファイル管理については一定の規則が存在しており、その名の通り枠組みが固まっています。
そのため、プログラマーの自由は制限されており、最初はそのフレームワークの仕様を理解するまでに時間がかかります。
このようにしてみると、フレームワークを使うのは不自由なようですが、決してそのようなことはありません。
多くの場合、フレームワークによって定められているルールの多くは、煩雑な初期設定であったり、プログラマー同士で話し合わなければならないファイルの管理ルールであったりします。
このような開発のルールがフレームワークによって定められていることにより、プログラマーはつまらない初期設定から解放され、必要な機能の開発に集中でき、プログラマー毎の開発の仕方の違いなどが発生しにくく、管理のしやすいアプリケーションが制作できます。

参考