一覧へ

フレームワークとライブラリ — 何が違うの?

フレームワークとライブラリの核心的な違いを実験室の例えで説明します。Express、React、jQueryの役割の違い。

入門
|
10
|
検証済み (2026-06)
フレームワークライブラリExpressReactソフトウェア構造制御の逆転
進捗0/8 (0%)

フレームワークとライブラリ — 何が違うの?

コーディングを学んでいると「フレームワーク」と「ライブラリ」という言葉が繰り返し出てきます。Expressは「Webフレームワーク」で、jQueryは「ライブラリ」で、Reactは…実は「ライブラリ」なのに「フレームワークのように」使われるとか。

一体何が違うのでしょうか?

実験室の例え:キット vs 試薬

ライブラリ = 個別の試薬

Bradford assay試薬を思い浮かべてください。タンパク質定量が必要な時に取り出して使い、使わない時は冷蔵庫にしまいます。実験のフローは自分が設計し、試薬はその中の1ステップにだけ登場します。

コードでのライブラリも同じです:

javascript
const axios = require("axios");

const response = axios.get("https://api.example.com/genes");

axiosというライブラリを自分が必要な時に呼び出して使っています。プログラム全体のフローは自分が決めます。

フレームワーク = 実験キット(プロトコル付き)

ELISAキットを思い浮かべてください。キットの中に96ウェルプレート、抗体、バッファー、wash solutionが入っていて、決められたプロトコル通りに進める必要があります。ステップ1:coating → ステップ2:blocking → ステップ3:サンプル追加… 順番を変えると結果が出ません。

Expressも同じです:

javascript
const express = require("express");
const app = express();

app.get("/samples", function(req, res) {
  res.json({ message: "サンプル一覧" });
});

app.listen(3000);

Expressというフレームワークが定めた構造の中で、自分が埋めるべき部分("/samples"パスで何を返すか)だけを書きます。app.get()という枠の中に自分のコードを入れるのであって、HTTPリクエスト処理フロー全体を自分で設計するわけではありません。

核心的な違い:誰が誰を呼ぶか

ライブラリフレームワーク
主導権自分がコードを書き、必要な時にライブラリを呼ぶフレームワークが全体のフローを管理し、自分のコードを呼ぶ
例え自分が試薬を取り出して使うキットのプロトコルが自分を導く
コード形態ライブラリ.関数() 自分が呼ぶフレームワークが自分の関数を呼ぶ
自由度高い(好きなように組み合わせ)低い(定められた構造の中で作業)

この違いをソフトウェア工学では**「制御の逆転(Inversion of Control)」**と呼びます。ライブラリを使う時は自分が制御権を持ちますが、フレームワークを使う時はフレームワークが制御権を持ち、適切なタイミングで自分のコードを呼び出します。

Expressでapp.get("/samples", function(req, res) { ... })を書く時 — このコールバック関数を自分で実行するわけではありません。 誰かが/samplesにアクセスすると、Expressが自動的にこの関数を呼び出します。 これが「フレームワークが自分を呼ぶ」構造です。

学んだものの分類

名前分類理由
Expressフレームワークリクエスト-レスポンスのフローをExpressが管理。自分のコードはコールバックとして組み込む
Reactライブラリ(公式)UIレンダリングのみ担当。ルーティング/状態管理は別途選択
mysql2ライブラリDB接続が必要な時に自分が呼び出す
Next.jsフレームワークファイル構造、ルーティング、ビルドをNext.jsが管理

Reactは公式には「ライブラリ」です。しかしNext.jsと一緒に使うとフレームワークのように動作します。この境界はナイフで切るように明確ではありません。

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

「自由度が低いのに、なぜフレームワークを使うの?」

一貫性 — チームメンバー10人がそれぞれ違う構造でサーバーを作ると、メンテナンスが不可能になります。フレームワークが構造を強制すれば、誰が書いたコードでも似たパターンで読めます。

繰り返しの排除 — ルーティング、エラー処理、ミドルウェアなどを毎回自分で作ると時間の無駄です。フレームワークがすでに用意しているものを使います。

検証された設計 — 世界中の数万人の開発者が使いテストした構造です。自分一人で設計したものよりバグが少ないです。

実験でも同じです。独自のassayを作ることもできますが、検証されたキットを使えば結果の信頼性が高く、他の研究者が再現するのも容易です。

結論:一文で

ライブラリは「自分が呼ぶ道具」で、フレームワークは「自分を呼ぶシステム」です。

Expressでapp.get()にコールバックを入れた時のことを思い出してください。そのコールバックを実行したのは自分ではなくExpressでした。それがフレームワークです。

💬 質問・コメント

0件のコメント

ログインせずに投稿できます。ゲスト投稿は投稿者自身で編集・削除できません。

0/2000

読み込み中...