初心者
用語
エンジニア

"フレームワーク"とは一体なんなのかエンジニア視点でまとめてみる

More than 1 year has passed since last update.

"フレームワーク"が正しい意味の言葉として利用されていないときが多く見受けられるので、フレームワークとはなんなのかをエンジニアの視点からまとめてみました。

Wikipedia先生によると

曖昧さ回避のページでは

フレームワーク
framework 「枠組み」「骨組み」「構造」などと和訳できる英単語。
・ビジネスフレームワーク - 経営戦略や業務改善、問題解決などに役立つ分析ツールや思考の枠組み。MBAなどで教わることが多く、ビジネスに必要とされるロジカルシンキングや発想法などを体系的にまとめたもの。SWOT分析、ファイブフォース分析などが挙げられる。
・開発・運用・意思決定を行う際に、その基礎となる規則・構造・アイデア・思想などの集合のこと。日本語では「枠組み」などと訳されることが多い。
・ソフトウェアフレームワーク - コンピュータ・プログラミング用語。アプリケーションフレームワークなど。

つまり、フレームワークという言葉自体には(JSでいうAngularやVue.jsといった)エンジニア界隈でよく利用されるフレームワークよりももっと広い意味があるということです。

広義でのフレームワーク

テスラ・モーターズのイーロン・マスクがTEDで登壇した時に話した言葉の意訳に

新しいものを見つけるとき、私は物理学を思考のフレームワークに使います。物事を本質的な真理まで煮詰め、そこから推論するのです。既存のものから類推すること日常生活を営む上では必要ですが、何か新しいことに挑戦するときには、この物理学的なアプローチが有効です。

というものがあります。この引用の内容自体は全くこの投稿と関係ありませんが、フレームワークという言葉を使っていたので使わせてもらいました。
広義でのフレームワークを日本語にすると、多くは「枠組み」と訳されます。イーロンマスクの例をとると、「私は物理学を思考の枠組みに使います」と言われてもピンとこないので、枠組みという言葉は不十分なように感じます。私が思う広義でのフレームワークに該当する言葉は「やり方, 仕組み」の方がしっくりくるかと思います。

ソフトウェアフレームワーク

ソフトウェアフレームワークは単にフレームワークと略されることもあるので、普段使うフレームワークの意味としてはこちらになります。本質自体は広義のフレームワークと同様、「枠組み、やり方、仕組み」と考えて良さそうです。
しかし、より限定するならば、ソフトウェアフレームワークはある(広義の)フレームワークをプログラミングによって実装したものと定義できると考えています。例えば、Reduxは「(だいぶ省略すると)StateをStoreで一元管理し、Reducerで操作を行うという広義のフレームワーク」と捉えると、それをJavaScriptで実装したものが reactjs/Redux であり、Swiftで実装したものが、 ReSwift/ReSwift なのだと捉えることができるでしょう.

ライブラリとの違い

ソフトウェアフレームワークは往々にしてライブラリと混同されることがありますが、ソフトウエアのフレームワークとはなにかが違いとしてわかりやすかったです。要は、呼び出されるコードを記述するのがフレームワークで、呼び出すコードを記述するのがライブラリというと分かり易いかと思います。

余談:エンジニアが使えそうなソフトウェアフレームワーク以外のフレームワーク

  • KPT (Keep, Problem, Try) 
    • 改善を行いたい時、継続(Keep)、問題(Problem)、挑戦(Try)に分割して思考をする
  • スクラム