3秒でわかる
アプリの土台と処理の呼び出し順をあらかじめ用意したコードの集まり。毎回同じになる部分を任せて、自分のアプリ固有の処理だけを書くために使います。
もう少し詳しく
どういうものか
フレームワークは、アプリケーションの土台と「どの順番で処理を呼ぶか」をあらかじめ決めて配ってあるコードの集まりです。ライブラリとの違いは呼び出しの向きにあります。ライブラリは自分のコードから部品を呼び出しますが、フレームワークは逆に、フレームワーク側が自分の書いた関数やクラスを呼び出します。この向きの逆転を制御の反転と呼び、フレームワークかどうかを見分けるいちばん確実な目印になります。
なぜ必要か
Web アプリを土台から作ると、リクエストの解析、URL とハンドラの対応付け、HTML の組み立て、データベース接続の使い回し、ログイン状態の保持といった、どのアプリでもほぼ同じ形になる処理を毎回書き直すことになります。しかもこの層は、セキュリティの穴が生まれやすい場所でもあります。フレームワークはこの共通部分を実績のある実装で埋め、開発者が触るのはアプリ固有の部分だけにします。
副次的な効果として、書き方が統一されることも大きな利点です。同じフレームワークを使ったプロジェクトなら、初めて見るコードでも「ルーティングはここ」「設定はここ」と当たりを付けられます。
具体例
Express でルートを 1 本足すコードです。サーバーの起動やリクエストの解析は書いていません。フレームワークが受け取ったリクエストを、登録しておいた関数に渡してきます。
const express = require("express");
const app = express();
app.get("/users/:id", (req, res) => {
res.json({ id: req.params.id, name: "田中" });
});
app.listen(3000);似た用語との違い
| 用語 | 呼び出しの向き | 例 |
|---|---|---|
| ライブラリ | 自分のコードが呼ぶ | lodash、pandas |
| フレームワーク | 相手が自分のコードを呼ぶ | React、Spring Boot |
| 実行環境 | コードを動かす土台そのもの | Node.js、JVM |
つまずきやすいところ
言語の勉強とフレームワークの勉強を混同すると、後で伸び悩みます。React でうまく動かないときに、原因が JavaScript の配列操作の理解不足だった、という詰まり方はよく起こります。フレームワークが用意したお作法どおりに書けても、その下で何が起きているか説明できない状態だと、想定外の挙動に出会ったとき手が止まります。土台の言語と、その上のフレームワークは、分けて理解しておく価値があります。
覚え方
自分が相手を呼べばライブラリ、相手が自分を呼べばフレームワークです。設定ファイルの置き場所やフォルダ構成まで決められている場合、それはフレームワーク側が主導権を持っている証拠だと考えてください。