フレームワーク
別名: Framework, Webフレームワーク, アプリケーションフレームワーク
フレームワークとは、アプリケーション開発に必要な機能があらかじめ用意された「土台」 です。
言語ごと、用途ごとに様々なフレームワークが公開されています。
開発者はゼロからすべてを作るのではなく、フレームワークが提供する土台の上にアプリ固有の処理を作成します。
なぜフレームワークを使うのか
たとえば、Webアプリケーションを作るとき、以下のような処理はほぼ毎回必要になります。
- URLに応じて処理を振り分ける(ルーティング)
- リクエストのデータを受け取って解析する
- HTMLやJSONをレスポンスとして返す
- エラーが起きたときの処理
これらを毎回ゼロから書くのは大変です。フレームワークを使えば、こうした共通処理はすでに用意されているため、アプリ固有のロジックに集中できます。
メリット
| メリット | 説明 |
|---|---|
| 開発速度が上がる | 共通処理が用意されているため、アプリ固有のロジックに集中できる |
| コードが統一される | フレームワークのルールに沿って書くため、チーム開発でもコードの書き方が揃いやすい |
| 情報が豊富 | 広く使われているフレームワークはドキュメントやコミュニティが充実しており、困ったときに調べやすい |
デメリット
| デメリット | 説明 |
|---|---|
| 学習コストがかかる | フレームワーク独自のルールや書き方を覚える必要がある |
| 自由度が制限される | フレームワークの設計方針に沿う必要があり、想定外のことをやろうとすると難しい場合がある |
| フレームワークへの依存 | フレームワークに脆弱性が見つかった場合、修正版が公開されるまで自分のアプリにも影響が及ぶことがある |
フレームワークを使う理由
デメリットはあるものの、開発速度やコードの統一性といったメリットは非常に大きく、現在のWeb開発では何かしらのフレームワークを使うのが一般的です。
フレームワークの学習は事実上必須といえます。
フレームワークとライブラリの違い
似た概念にライブラリがありますが、役割が異なります。
| ライブラリ | フレームワーク | |
|---|---|---|
| 関係性 | 開発者がライブラリを呼び出す | フレームワークが開発者のコードを呼び出す |
| 主導権 | 開発者がコードの流れを決める | フレームワークがコードの流れを決める |
| 例え | 工具(必要なときに自分で使う) | 建物の骨組み(骨組みの中に自分の部屋を作る) |
ライブラリは「道具」、フレームワークは「土台」とイメージすると分かりやすいです。
この主導権の違いは制御の反転(Inversion of Control)と呼ばれます。
ライブラリの場合、開発者が自分のコードの中でライブラリの関数を呼び出します。一方フレームワークでは、フレームワーク側がアプリの実行フローを制御し、適切なタイミングで開発者が書いたコードを呼び出します。
この仕組みのおかげで、開発者はアプリ全体の制御フローを自分で設計する必要がなくなります。
代表的なフレームワーク
フレームワークはプログラミング言語ごとに存在し、用途もさまざまです。
Web バックエンド(サーバーサイド)
| 言語 | フレームワーク | 特徴 |
|---|---|---|
| JavaScript / TypeScript | Express | 広く使われているNode.js用フレームワーク |
| Python | Django | 管理画面や認証など多くの機能が組み込まれている |
| Ruby | Ruby on Rails | 「設定より規約」の思想で素早く開発できる |
| PHP | Laravel | PHP界で最も人気があり、学習リソースが豊富 |
| Go | Gin | 高速で軽量なGoのWebフレームワーク |
Web フロントエンド
ブラウザで動く言語はJavaScriptのため、フロントエンドのフレームワークはJavaScript / TypeScriptベースのものがほとんどです。
| 言語 | フレームワーク | 特徴 |
|---|---|---|
| JavaScript / TypeScript | Next.js | Reactベースのフルスタックフレームワーク |
| JavaScript / TypeScript | Nuxt | Vue.jsベースのフルスタックフレームワーク |
| JavaScript / TypeScript | Angular | Google開発の大規模アプリ向けフレームワーク |
ReactやVue.jsは厳密にはライブラリ(UIライブラリ)です。Next.jsやNuxtはそれらをベースに、ルーティングやサーバー処理などの機能を追加したフレームワークです。
Angularは最初からルーティングやフォーム管理などを含むフルパッケージのフレームワークです。
まとめ
- ✓フレームワークはアプリ開発に必要な共通機能が用意された土台
- ✓開発者はフレームワークのルールに沿って、アプリ固有の処理を書く
- ✓ライブラリは「自分が呼び出す道具」、フレームワークは「自分のコードを呼び出す土台」