⚒️

【解説】フレームワークとライブラリの違い

2022/10/08に公開1

はじめに

今回の記事では、プログラマー間で見解が分かれるライブラリとフレームワークの違いを徹底解説する。我々プログラマーはアプリケーション等を開発する際にフレームワークやライブラリを駆使する。その中でも、「フレームワークとライブラリの違いがわからない」と考える人も少なくないだろう。中には混同して使う人がいるかもしれない。両者は厳密に言えば異なる意味を示す

フレームワークとは

フレームワーク(framework)はアプリケーションを開発するのに必要な機能がデフォルトで揃っているものを示す。アプリケーションとして動く骨組みが用意されているので、別途プログラムを書かなくても最低限のアプリケーションとして動作する。フレームワークがあれば、我々プログラマーはゼロからアプリケーションを開発する必要はない。フレームワークには、タスクを実行するために書かれた再利用可能なコードやプログラムが含まれていて、別途追加したいオリジナルな機能があればプログラマー自身がプログラムを書くことがある。

フレームワークは画像ファイルや参考文献などのリソースを1つのパッケージに集約している。それゆえに、特定のプロジェクトの要件に応じてそのパッケージを変更できる。フレームワークを使えば、プログラマーはアプリケーションに新しい機能を統合して新しい機能を持たせられる。

要は、フレームワークはデフォルトでアプリケーション開発に必要な機能が揃っているものだ。そこに自分の実装したい内容をカスタムで追加していくことになる。

フレームワークを使う理由

ソフトウェア開発は非常に複雑である。例えば、アプリケーション開発には要件定義、設計やテストなど様々な段階が含まれる。開発をする際に、一から認証やユーザ登録など必要な機能を実装するのは非常に困難である。そこで、開発を効率化するためにフレームワークが活躍する。

フレームワークを使う主なメリットは以下の通り。

  • 複数のプログラマーによってメンテナンスされているので、アプリケーションに堅牢性や効率性を持たせやすい
  • 重複や冗長なコードを避けられるので、バグを減らしてより一貫した開発プロセスを実現できる
  • 数多くのプログラムや機能性がフレームワークで予め提供され、かつ事前にテストされているのでアプリケーションの信頼性が向上する
  • 中身を知らなくてもテストやデバッグが簡単にできる
  • アプリケーション開発に必要な機能がデフォルトで提供、あるいは公式ドキュメントにそれを実装する方法が掲載されているので、アプリケーションの開発にかかる時間を大幅に短縮できる

ライブラリとは

一方で、ライブラリ(library)とは作業を簡略化するために使用できる予め書き込まれたプログラムの集まりである。ライブラリは簡単に言えば、繰り返して利用できるプログラムの集合体である。

基本的には、プログラマーが作業を簡略化し、開発プロセスを効率化するために利用される定義済みの関数やクラスの集まりだ。それゆえに、プログラマーはそれらの機能を実現するためのプログラムを一から書く必要がない。ライブラリにはそれらの機能を実現するためのプログラムがすでにあるからだ。標準ライブラリはほとんどのプログラミング言語で使える。更に、プログラマーは自作のライブラリを作成できる。(特にPythonやJavaScriptは自分で簡単なライブラリを作成できる)

ライブラリは便利な部品がきちんと分離されていて、そこから使いたいものを借りてくるようなイメージである。

ライブラリを使う理由

ライブラリを使う最大の理由は、すでに書かれている機能のコードを書く手間を省くためである。ライブラリを活用することで、アプリケーション開発の効率が上がってコードを書く時間を大幅に短縮できる。

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

フレームワークとライブラリはアプリケーションを開発するのに必要なコードの量を減らすことで効率化できることは共通しているものの、両者は厳密に言えば意味がまったく異なる。前者はプログラマーがアプリケーションを開発するのに必要な土台である。一方で、後者はプログラマーの作業を簡略化し、開発のプロセスを効率化するために予め定義された関数やクラスの集合体である。

前者は予め定義された枠組みや開発フローがあって必要なことをプログラマーに伝達する。そのため、プログラマーは必要に応じてコードを追加しフレームワークを補完する。フレームワークには以下のようなものがある。

  • Django:Pythonで開発されたWebフレームワーク。世界的に有名な画像共有サービスであるPinterestやInstagramのバックエンドに採用されている。
  • NestJS:TypeScriptで開発されたWebフレームワーク。フロントエンド開発で使われているTypeScriptの技術をバックエンドに応用したもの。デフォルトで画面上にHello Worldという文字列を出力するアプリケーションを開発できる。

一方で、後者はプログラマーが任意のタイミングで呼び出すことができ、かつアプリケーションの開発のプロセスを制御できる。ライブラリで実行される操作は正確かつ具体的に定義される。言い換えれば、アプリケーション開発でライブラリを使う際は、特定の機能を効率よく実装する時に使われることが多い。ライブラリの具体例としては以下のようなものがある。(ライブラリはすべてPythonで開発されている)

  • TensorFlow:Googleが開発した機械学習やニューラルネットワークの作成や学習を効率化してくれるライブラリ。
  • NumPy:Pythonの機械学習における計算を効率化するうえで必須のライブラリ。大量のデータ処理や高度な算術演算を得意とする。
  • Matplotlib:グラフの描画やデータの視覚化に利用されるPythonのライブラリ。NumPyとセットで利用される。

おわりに

今回の記事では、フレームワークとライブラリの違いについて徹底解説した。両者とも開発を効率化するために作られた。フレームワークはアプリケーションを開発するために必要な機能がデフォルトで揃っているものを示す。アプリケーションで動く骨組みが用意されているので、追加でプログラムを書かなくても最低限のアプリケーションとして動く。一方で、ライブラリは開発の作業をできるだけ簡略化するために使用できる予め書き込まれたプログラムの集まりである。ライブラリの場合、プログラムや特定の処理で必要なときに呼び出して使う。

フレームワークは予め作られている骨組みで、ライブラリは使いたいものや実装したい機能に必要な部品のようなものだ。両者ともアプリケーションの開発を効率良く進める上では必須である。

参考サイト

https://www.interviewbit.com/blog/framework-vs-library/

https://www.freecodecamp.org/news/the-difference-between-a-framework-and-a-library-bd133054023f/

https://www.baeldung.com/cs/framework-vs-library

https://kruschecompany.com/framework-vs-library

https://stackoverflow.com/questions/148747/what-is-the-difference-between-a-framework-and-a-library

https://study-z.net/100188434

GitHubで編集を提案

Discussion

n-nittan-nitta

だいたい良いのですが、アプリケーションコードを呼び出すのがフレームワークで、アプリケーションコードに呼び出されるのがライブラリという点が重要ですね。