tanaka101

フレームワーク

別名: Framework, Webフレームワーク, アプリケーションフレームワーク

フレームワークとは、アプリケーション開発に必要な機能があらかじめ用意された「土台」 です。
言語ごと、用途ごとに様々なフレームワークが公開されています。
開発者はゼロからすべてを作るのではなく、フレームワークが提供する土台の上にアプリ固有の処理を作成します。

なぜフレームワークを使うのか

たとえば、Webアプリケーションを作るとき、以下のような処理はほぼ毎回必要になります。

  • URLに応じて処理を振り分ける(ルーティング)
  • リクエストのデータを受け取って解析する
  • HTMLやJSONをレスポンスとして返す
  • エラーが起きたときの処理

これらを毎回ゼロから書くのは大変です。フレームワークを使えば、こうした共通処理はすでに用意されているため、アプリ固有のロジックに集中できます。

メリット

メリット説明
開発速度が上がる共通処理が用意されているため、アプリ固有のロジックに集中できる
コードが統一されるフレームワークのルールに沿って書くため、チーム開発でもコードの書き方が揃いやすい
情報が豊富広く使われているフレームワークはドキュメントやコミュニティが充実しており、困ったときに調べやすい

デメリット

デメリット説明
学習コストがかかるフレームワーク独自のルールや書き方を覚える必要がある
自由度が制限されるフレームワークの設計方針に沿う必要があり、想定外のことをやろうとすると難しい場合がある
フレームワークへの依存フレームワークに脆弱性が見つかった場合、修正版が公開されるまで自分のアプリにも影響が及ぶことがある

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

デメリットはあるものの、開発速度やコードの統一性といったメリットは非常に大きく、現在のWeb開発では何かしらのフレームワークを使うのが一般的です。
フレームワークの学習は事実上必須といえます。

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

似た概念にライブラリがありますが、役割が異なります。

ライブラリフレームワーク
関係性開発者がライブラリを呼び出すフレームワークが開発者のコードを呼び出す
主導権開発者がコードの流れを決めるフレームワークがコードの流れを決める
例え工具(必要なときに自分で使う)建物の骨組み(骨組みの中に自分の部屋を作る)

ライブラリは「道具」、フレームワークは「土台」とイメージすると分かりやすいです。

この主導権の違いは制御の反転(Inversion of Control)と呼ばれます。

ライブラリの場合、開発者が自分のコードの中でライブラリの関数を呼び出します。一方フレームワークでは、フレームワーク側がアプリの実行フローを制御し、適切なタイミングで開発者が書いたコードを呼び出します。

この仕組みのおかげで、開発者はアプリ全体の制御フローを自分で設計する必要がなくなります。

代表的なフレームワーク

フレームワークはプログラミング言語ごとに存在し、用途もさまざまです。

Web バックエンド(サーバーサイド)

言語フレームワーク特徴
JavaScript / TypeScriptExpress広く使われているNode.js用フレームワーク
PythonDjango管理画面や認証など多くの機能が組み込まれている
RubyRuby on Rails「設定より規約」の思想で素早く開発できる
PHPLaravelPHP界で最も人気があり、学習リソースが豊富
GoGin高速で軽量なGoのWebフレームワーク

Web フロントエンド

ブラウザで動く言語はJavaScriptのため、フロントエンドのフレームワークはJavaScript / TypeScriptベースのものがほとんどです。

言語フレームワーク特徴
JavaScript / TypeScriptNext.jsReactベースのフルスタックフレームワーク
JavaScript / TypeScriptNuxtVue.jsベースのフルスタックフレームワーク
JavaScript / TypeScriptAngularGoogle開発の大規模アプリ向けフレームワーク

ReactやVue.jsは厳密にはライブラリ(UIライブラリ)です。Next.jsやNuxtはそれらをベースに、ルーティングやサーバー処理などの機能を追加したフレームワークです。

Angularは最初からルーティングやフォーム管理などを含むフルパッケージのフレームワークです。

まとめ

  • フレームワークはアプリ開発に必要な共通機能が用意された土台
  • 開発者はフレームワークのルールに沿って、アプリ固有の処理を書く
  • ライブラリは「自分が呼び出す道具」、フレームワークは「自分のコードを呼び出す土台」