Libraries vs. Frameworks – What’s the Difference?

Wikipedia のコード ライブラリのページでは、次のように定義されています:

「コンピューター サイエンスにおいて、ライブラリとはコンピューター プログラムが使用する不揮発性のリソースのコレクションであり、しばしばソフトウェア開発のために使用されるものです。 これには、設定データ、ドキュメント、ヘルプ データ、メッセージ テンプレート、あらかじめ書かれたコードやサブルーチン、クラス、値、または型仕様が含まれます。

これをフレームワークの定義と比較すると、

コンピューター プログラムでは、ソフトウェア フレームワークは汎用機能を備えたソフトウェアをユーザーが書いた追加のコードによって選択的に変更できる抽象概念で、アプリケーション固有のソフトウェアを提供します。

アプリケーションを構築して展開する標準的な方法を提供し、ソフトウェア アプリケーション、製品、およびソリューションの開発を促進する、より大きなソフトウェア プラットフォームの一部として特定の機能を提供する、普遍的で再利用可能なソフトウェア環境でもあります。「

紐解くべきことはたくさんありますが、もしあなたが両方を扱ったことがあるなら、一般的に、コードライブラリは特定の問題を解決したりプログラムに特定の機能を追加するために使われるということがすでにお分かりかと思います。

一方、フレームワークは、はるかに汎用的で再利用可能なものを提供します。

コントロールの逆転

Libraries plug into your code, Your code plugs into a framework.The Frameworkはライブラリからフレームワークへ、コードからフレームワークへ接続します。

フレームワークとライブラリの最初の大きな違いは、誰が開発プロセスを制御しているかです。

コード ライブラリでは、開発者は一般に、適切だと思うときにいつでもライブラリを呼び出しますが、フレームワークでは、一般に、開発者がそのワークフローに完全に没頭することが必要です。 これは、コントロールの逆転です!

  • Library:
  • フレームワーク: 仕事を成し遂げるために私たちを呼び出す。

    不思議に思うかもしれませんが、フレームワークは、コードがどのように書かれるか、ファイルの場所、および、おそらくは前述のファイルの名前に関して多くの決定をしていることを意味します。

    Making these assumptions allows for the usage of the paradigm of convention over configuration which allows developers to skip the process of app configuration in exchange for following certain conventions (such as putting certain files in certain folders, etc.).

    Ruby on Rails is a popular framework for developing web applications.

    Look at a framework like Ruby on Rails. It is often considered highly opinionated.

    開発者の作業のほとんどは、おそらく app フォルダ (これはモデル、ビュー、コントローラのサブフォルダの場所です) で行われますが、その Rails プロジェクトには、アプリケーションを実行するための他のコードがたくさんあります。

    さらに Ruby on Rails には、従うことを求められる特定のワークフローがあります。 Rails で UserUsersController に結びつけられていると想定されるのです。

    Railsはこれらのファイルに特定の名前 (モデルはuser.rbusers_controller.rb) を付けて、それぞれのフォルダに配置します。

    Railsのワークフローから離れると、コードが機能しない方法と理由についてイライラしてしまうでしょう。 Work with it and everything just seems to magically work.

    A large part of that magic (some do refer to it as Rails magic) is just all of that pre-written code working in the background. You fill in the models, views, controllers, and draw some routes, and Rails will take care of linking everything up correctly.

    ChartJS lets you make some really beautiful charts.

    Compare this to Chart.js which is a JavaScript library for creating really beautiful charts.

    あなたはいつ、どこで Chart.js を呼び出すかを選択し、新しいチャートを作成するときにフィールドに入力する必要があるのは事実ですが (チャートの種類、ラベル、色などを指定する必要があります)、ワークフローは制御できません。

    Chart.js はチャートを描くために必要な情報のみを扱い、コードの残りの部分はあまり気にしません。

    拡張性

    オブジェクト指向プログラミングにおける重要な概念としてオープン/クローズの原理があります。

    この簡単な例はクラスの継承で、親クラスのコードを直接変更する必要なしに、サブクラスに必要な機能と特徴を追加できます。

    拡張性は、開発者がフレームワークに新しい機能を追加したり、ソースコードを変更せずに既存の機能の動作を自分のニーズに合わせて調整することを可能にします。

    フレームワークが拡張可能でない場合、その機能はかなり制限され、学習する魅力がなくなります。

    上記の例と同様に、Ruby on Rails フレームワークには、ユーザー認証などの追加機能を追加するための拡張機能がいくつか存在します。

    もし Rails にこのような拡張機能がなかったら、Rails を使って作るものに大きな支障が出るでしょう。

    ここでの違いはあまり目立ちませんが、フレームワークは一般的な機能を提供するので、アプリ固有の機能を実装できるように、拡張性を念頭に置いて構築されるべきです。

    ライブラリは必ずしも拡張性を念頭に置いて構築する必要はなく、その主目的は特定のタスクを達成することです。

    変更不可のコード

    この概念は、幸いにも、はるかに簡単でシンプルに説明できます。

    前に説明したように、Rails に戻ると、一般に、開発者はアプリのフォルダーで作業する時間の大半を過ごします。

    先に説明したように、Rails に戻ると、一般に、開発者はアプリ フォルダでの作業にほとんどの時間を費やします。

コメントする