ライブラリ・フレームワークとは(全体像)
どちらも、他の人が作った便利なコードを借りて使うしくみ。同じことを毎回ゼロから書かずに済む。
両者の違いは「どちらが主導権を持つか(制御の向き)」だ。
- ライブラリ … 自分のプログラムが主役。使いたいときに呼ぶ。
- フレームワーク … 枠組みが主役。決められた場所に自分のコードを置いておくと、枠組みのほうが適切なタイミングで呼んでくれる。
このフレームワークの動きを「制御の反転(IoC)」、または「ハリウッドの原則(こちらから呼ばないで、こちらから呼びます)」と呼ぶ。
詳しく:制御の向きとパッケージマネージャだけ覚えれば戦える
ここが記事の心臓部。まず制御の向きの違いを見ましょう。
ライブラリとフレームワークの違い
| ライブラリ | フレームワーク | |
|---|---|---|
| 主導権 | 自分のプログラム | 枠組みのほう |
| 動き | 使いたいときに呼ぶ | 呼ばれるのを待つ(制御の反転) |
| 代表例 | NumPy・jQuery・requests | React・Django・Spring |
ここで一番のひっかけが「ライブラリとフレームワークは同じもの」という誤解。制御の向きが逆で、ライブラリは「呼ぶ」、フレームワークは「呼ばれる」。
次に、これらの部品を取り寄せて管理する道具がパッケージマネージャ。言語ごとに対応が決まっている。
代表的なパッケージマネージャ
| 言語・環境 | パッケージマネージャ |
|---|---|
| JavaScript/Node.js | npm |
| Python | pip |
| Java | Maven・Gradle |
| Rust | Cargo |
ここで2つめのひっかけが「npmはPython用」という誤解。npmはJavaScript/Node.js用で、Pythonはpip。エコシステムは別なので取り違えない。
わかりやすく言い換えると
要するに、道具のたとえでイメージするとラクです。
①ライブラリ … 工具箱。必要なときに自分で取り出して使う(主導権は自分)
②フレームワーク … 設備のそろったキッチン。配管やコンセントの位置が決まっていて、その決まりに従って料理する(主導権は台所側)
③パッケージマネージャ … 部品の取り寄せ係。JavaScriptはnpm、Pythonはpip
つまり、「ライブラリは呼ぶ・フレームワークは呼ばれる」「npmはJS・pipはPython」、この2点が試験の急所です。
試験のツボ
🔴 一番出る:制御の向きの違い
①ライブラリ=自分のプログラムが使いたいときに呼ぶ
②フレームワーク=枠組みが主導権を持ち、自分のコードは呼ばれるのを待つ(制御の反転・IoC)
🔴 次に出る:代表例とパッケージマネージャ
①フレームワークの代表はReact・Django・Spring
②JavaScriptはnpm、Pythonはpip(エコシステムは別)
🟡 押さえると安定:制御の反転の呼び名
①フレームワークの動きを「制御の反転(IoC)」と呼ぶ
②別名「ハリウッドの原則」(こちらから呼ばないで、こちらから呼びます)
よくある間違い
①「ライブラリとフレームワークはまったく同じものである」→ ✗ 制御の向きが逆。ライブラリは「呼ぶ」、フレームワークは「呼ばれる」。
②「npmはPython用のパッケージマネージャである」→ ✗ npmはJavaScript/Node.js用。Pythonはpip。
③「フレームワークは自分の好きなタイミングで呼び出して使う」→ ✗ 逆で、枠組みが主導権を持ち、自分のコードは呼ばれるのを待つ(制御の反転)。
試験での出題パターン
実際の問題でたしかめてみよう。
オリジナル問題1(制御の向きの違い)
ライブラリとフレームワークの違いに関する次の記述のうち、正しいものはどれか。
- ライブラリは自分が呼んで使い、フレームワークは枠組みが自分のコードを呼ぶという点が違う
- ライブラリもフレームワークもまったく同じもので、呼び名が2つあるだけだとされているものだ
- ライブラリは画面に絵を描く道具、フレームワークは音を鳴らす道具だとされているものである
- ライブラリは枠組みが主導権を持ち、フレームワークは自分が呼ぶ点が違うものだとされている
解答は 1 ですよ。
ライブラリは自分のプログラムが使いたいときに呼ぶもの、フレームワークは枠組みのほうが主導権を持ち、自分のコードを呼んでくれるものですね。制御の向きが逆、というのが核心です。
選択肢2の「同じもの」、選択肢3の「絵を描く・音を鳴らす道具」、選択肢4の「向きが逆の説明」はどれも誤りですよ。
| 選択肢 | 判定 | 理由 |
|---|---|---|
| 1 | ✓ | ライブラリは呼ぶ・フレームワークは呼ばれる |
| 2 | ✗ | 制御の向きが違う別もの |
| 3 | ✗ | 絵や音の道具ではない |
| 4 | ✗ | 主導権の説明が逆 |
オリジナル問題2(制御の反転)
制御の反転(IoC)に関する次の記述のうち、正しいものはどれか。
- 制御の反転は画面の色を反転させる機能のことで、プログラムの流れとは無関係だとされている
- 制御の反転はプログラムを必ず逆順に実行する決まりのことだとされているものである
- 制御の反転は処理速度を必ず半分にする設定のことだとされているものである
- 制御の反転は枠組みが主導権を持ち、自分のコードを適切なときに呼ぶフレームワークの特徴だ
解答は 4 ですよ。
制御の反転(IoC)は、枠組みが主導権を持ち、自分のコードを適切なタイミングで呼ぶというフレームワークの特徴ですね。「ハリウッドの原則(こちらから呼ばないで、こちらから呼びます)」とも呼ばれます。
選択肢1の「画面の色を反転」、選択肢2の「逆順に実行」、選択肢3の「速度を半分」はどれも誤りですよ。
| 選択肢 | 判定 | 理由 |
|---|---|---|
| 1 | ✗ | 画面の色の反転ではない |
| 2 | ✗ | 逆順実行の決まりではない |
| 3 | ✗ | 速度を半分にする設定ではない |
| 4 | ✓ | 枠組みが呼ぶフレームワークの特徴 |
オリジナル問題3(パッケージマネージャ)
パッケージマネージャに関する次の記述のうち、正しいものはどれか。
- npmはPython用で、pipはJavaScript用のパッケージマネージャだとされているものである
- JavaScript/Node.jsはnpm、Pythonはpipが代表のパッケージマネージャである
- パッケージマネージャはどの言語でも完全に共通で、言語による違いはないものだとされている
- パッケージマネージャは画面を掃除する道具のことで、部品の管理とは無関係だとされている
解答は 2 ですよ。
JavaScript/Node.jsはnpm、Pythonはpipが代表のパッケージマネージャですね。言語ごとにエコシステムが分かれていて、対応を取り違えないのがポイントです。
選択肢1の「npmとpipが逆」、選択肢3の「どの言語でも共通」、選択肢4の「画面を掃除する道具」はどれも誤りですよ。
| 選択肢 | 判定 | 理由 |
|---|---|---|
| 1 | ✗ | npmはJS・pipはPythonで逆 |
| 2 | ✓ | JSはnpm・Pythonはpip |
| 3 | ✗ | 言語ごとに違う |
| 4 | ✗ | 画面を掃除する道具ではない |
まとめ
押さえどころ
- 🔴 制御の向きの違い = ライブラリは自分が呼ぶ、フレームワークは呼ばれるのを待つ(制御の反転・IoC)。
- 🔴 代表例とパッケージマネージャ = フレームワークはReact・Django・Spring。JavaScriptはnpm、Pythonはpip。
- 🟡 制御の反転の呼び名 = IoC、別名「ハリウッドの原則」(こちらから呼ばないで、こちらから呼びます)。
次に学ぶ
- 言語パラダイム ── 手続き型・オブジェクト指向など、プログラムの書き方の流派。ライブラリ選びの土台。
- Git・GitHub ── 借りてきたコードや自分のコードを管理するしくみ。開発の基礎。
執筆: SikakuQuest編集部