フレームワークってなんですか
Discussion
Closed
フレームワークとはなんですか。ライブラリとどう違うのですか。私は主にjavaでプログラミングしています。spring frameworkってウェブ関連のものですよね。jsのVue.jsやReactもウェブ関連ですよね。フレームワークってウェブ関連のライブラリのことですか。あなたの思うフレームワークについてお願いします。
Discussion
Closed
フレームワークとはなんですか。ライブラリとどう違うのですか。私は主にjavaでプログラミングしています。spring frameworkってウェブ関連のものですよね。jsのVue.jsやReactもウェブ関連ですよね。フレームワークってウェブ関連のライブラリのことですか。あなたの思うフレームワークについてお願いします。
少なくとも「フレームワーク=Web関連」ではないでしょう。例えばC++の Qt はフレームワークを名乗っていますが、これはクロスプラットフォームのネイティブアプリケーション開発のために作られています。
その上でフレームワークとライブラリの違いに関しての持論ですが、大まかに見るとフレームワークの方が大規模・多機能で、大抵のアプリケーションはその中の機能を使って作ることができるような物を目指しており、ライブラリはより小規模・単機能なものを指す、と考えています。
ただし、これは全てのフレームワーク・ライブラリに当てはまるものではなく、例えばこれまた C++ の話ですが boost はかなり規模が大きく多機能ですがライブラリを名乗っています。
究極的には何がフレームワークでライブラリなのかは、そのプロジェクトがフレームワークを名乗っているかライブラリを名乗っているかの違いくらいに思っておいて良いのではないでしょうか。少なくとも、これはフレームワークだろうかそれともライブラリだろうか、と境界線を探ることはあまり有益とは思えません。
ライブラリーは平たく言うと部品の集成ですよね。
ライブラリーとそれを利用するプログラマーの関係でいうと,
ライブラリー「いろいろ部品を用意しときましたんで使ってください」
プログラマー「おっしゃー」
で,プログラマーはその部品たちを呼び出して目的の動作をさせるプログラムを作り上げる,と。
フレームワークの場合,
フレームワーク「全体の大枠は用意しときましたんで,アプリ固有のとこだけ書いてください」
プログラマー「おっしゃー」
と。
ウェブアプリケーションフレームワークが典型的なのでこれを例に取ると,ウェブアプリケーションって,どれも基本的に
みたいなことをやっているわけですよね。
アプリケーションごとに違うのは,どんなリクエストに対してどんな処理をやるか,何をどうレンダリングするかってところ。
なので,アプリケーション間の共通性はかなりあるんですよね。それをフレームワーク側で全部面倒みてやる,と。
で,ここが重要ですが,アプリケーションのプログラマーの書くコードがフレームワークを呼び出す,というよりも,フレームワーク側がアプリケーションのプログラマーの書くコードを呼び出す,という感じになっているところ。
これを「制御の反転」と呼ぶそうです。
と,理解してますが。
なお,明確な線引きはできないことと,フレームワーク自体は多数のライブラリーで構成されていること,また,フレームワークにもアプリケーションのプログラマーから見て単なる部品として用いる部分があることなどは注意したいです。
アーカイブは圧縮ではなく1つにまとめたものであることはご存知だと思います。つまり「情報が1箇所に整頓されたもの」と言えます。NHK のアーカイブスなどは日本の映像情報の歴史を整頓したものですよね。残すことに重点を置いています。
ライブラリとは、アーカイブの1種で、用途ごとに使いやすいように1箇所にまとめたものだと思います。図書館なども英語でライブラリ(library
)と言いますよね。つまり「情報が1箇所に整頓されたもの」に加え「目的別に整理されたもの」です。使うことに重点を置いています。しかも多目的に。
プログラム業界は建築の技法や用語から学んでいるところが多くあります。パターン・ランゲージから生まれたデザイン・パターンなどがそうです。
フレーム・ワークのフレーム(frame
)は物を形作る基本的な骨の部分です。額縁の枠であったり、家の柱や骨をフレームと言います。PC の筐体も側面の壁を取ると骨だけになりますが、基本の型を形成するフレームの部分のみになります。
Framework
を英英辞書で調べると以下の説明があります。
a supporting structure around which something can be built
(framework @ Cambridge Dictionary より)(筆者訳)何かを構築できるように形成を補助する構造
ソフトウェアにおけるフレームワークとは、ソフトウェアのデザイン・パターンなどのノウハウの組み合せの1種で、用途ごとに使いやすいように1つにまとめたものだと思います。
この「使いやすいように」「1つにまとめた」というところが、ライブラリとフレームワークで共通しているため、わかりづらいのだと思います。(ました)
「A」というものを勉強するために、図書館(ライブラリ)から選抜した「この順番で勉強すると良いよ本」の組み合わせパターンが「俺様勉強フレーム・ワーク A 編」といったイメージでしょうか。
木造建築と鉄筋建築では構造の組み方や建築術が、ミクロな目でみると1つ1つの技は同じであるものの、技の組み合わせが違います。
Web でも、情報を一方的に流すのに向いたフレーム・ワーク、注文などのユーザー・レスポンスに向いたフレーム・ワーク、そもそも Web に向いた汎用フレーム・ワークと色々あります。
つまり、フレーム・ワークは先人の方々の「構築術のパターン大全集 なんとか編」みたいなものと言えるのではないでしょうか。
フレームワーク(flame work)は「炎上仕事」だ!
「ライブラリ」と「フレームワーク」は何が違うのか
https://qiita.com/baby-degu/items/7dc4548bf7befc2671f4
この記事が個人的にはとても理解しやすい記事でした
個人的には、「作者がフレームワークだと主張する」ものがフレームワークだという、技術的視点とはあまり絡まない解釈をしています。
1キロバイトのサイズでも「フレームワーク」を名乗る、jorgebucaran/hyperappのような例もあります。
ライブラリ:
自分が書いたプログラムからライブラリを呼び出し、結果を受け取る
フレームワーク:
フレームワークから自分が書いたプログラムが呼び出され、結果をフレームワークに返却する
細かい反例はいくつもありそうですが、大枠の設計思想がこういうパターンになると思います。
https://spring.io/quickstart
mainからhelloメソッドを呼び出さずに、フレームワークから呼び出される
https://jp.vuejs.org/v2/guide/
自動的にmessageと'Hello Vue!'が結合される
https://developers.google.com/closure/library/docs/gettingstarted#step2
自分でライブラリの関数を呼び出して'Hello world!'をHTMLに結びつけるコードを書く
フレームワークはライブラリとは明らかに違う性質を備え持っています。
制御の反転、ハリウッド原則について調べるのが良いと思います。
いままでお答えいただきありがとうございました。