言語・フレームワーク・
ライブラリを整理しよう
HTML、CSS、JavaScript、TypeScript……と、ここまでで登場人物がずいぶん増えてきました。さらに次の Lesson 12 では Vue.js も登場します。 そこで今回は、手を動かすのをひと休みして、「言語」「フレームワーク」「ライブラリ」の関係を地図のように整理します。
1. 言語・ライブラリ・フレームワークの違い
3つの言葉を、料理にたとえて整理してみましょう。
言語
コンピュータに指示を出すための「言葉」そのもの。JavaScript、Java、Python など。
料理でいうと 日本語のレシピの「言葉」。読み書きできないと何も始まらない。
ライブラリ
よく使う処理をまとめた「道具箱」。必要なときに、自分のコードから呼び出して使う。jQuery など。
料理でいうと 包丁・ピーラー・計量カップ。いつ使うかは自分が決める。
フレームワーク
アプリの「作り方の型」と便利な機能のセット。決まった型の中に、自分のコードを書き込む。Vue.js、Spring Boot など。
料理でいうと ミールキット。手順と材料がそろっていて、そのとおりに作ればおいしくできる。
ライブラリとフレームワーク、何が違うの?
どちらも「誰かが作ってくれた便利なコード」ですが、主導権がどちらにあるかが違います。
| ライブラリ | フレームワーク | |
|---|---|---|
| 主導権 | 自分のコードが、必要なときにライブラリを呼び出す | フレームワークが全体の流れを決めていて、決まった場所で自分のコードを呼び出す |
| 自由度 | 高い。使いたいところだけ使える | 型に従う必要がある。そのかわり迷わない |
| 家づくりでいうと | 電動ドリルなどの工具 | ハウスメーカーの工法 |
| 例 | jQuery、Chart.js(グラフを描く) | Vue.js、Angular、Spring Boot、Laravel |
言語にも、いくつか種類がある
| 種類 | 例 | 役割 |
|---|---|---|
| マークアップ言語 | HTML | 文章に「見出し」「段落」などの意味を付ける(Lesson 5) |
| スタイルシート言語 | CSS | 見た目を指定する(Lesson 8) |
| プログラミング言語 | JavaScript、Java、Python など | 計算や条件分岐など、処理の手順を書く(Lesson 9) |
| 拡張した言語 | TypeScript | ある言語(JavaScript)に機能(型)を足したもの(Lesson 10) |
| データベース用の言語 | SQL | データベースに「探して」「保存して」と指示する(Lesson 2) |
HTML と CSS は「処理の手順」を書くものではないので、厳密には「プログラミング言語」とは呼ばれません。でも、Web 開発に欠かせない大切な言語です。
2. IT の言葉の地図
言語ごとに、その上で使われる主なフレームワーク・ライブラリをまとめると、次のようになります。
3. 画面(フロントエンド)のフレームワーク
画面を作る分野では、次の4つの名前をよく耳にします。jQuery だけは「ライブラリ」で、少し前の時代の主役です。
| 名前 | 種類 | 開発元 | 特徴 | こんなときに |
|---|---|---|---|---|
| Vue.js | フレームワーク | Evan You 氏とコミュニティ | HTML に近い書き方で、学びやすい。日本でも人気が高い | 小〜中規模のサービス、管理画面。少しずつ導入したいとき |
| React | ライブラリ (実質フレームワーク扱い) | Meta(旧 Facebook) | 世界でいちばん使われている。情報や関連ツールがとにかく多い | 大規模な Web サービス。React Native でスマホアプリも作れる |
| Angular | フレームワーク | 必要な機能が最初から全部そろっている。ルールが厳格で、TypeScript が前提 | 大人数で長く保守する業務システム | |
| jQuery | ライブラリ | jQuery チーム | HTML の部品を「探して書き換える」を短く書ける。2010年代に大流行 | 既存のサイトの保守。新しく作るときに選ばれることは減っている |
さらに、React の上に乗る Next.js、Vue.js の上に乗る Nuxt のように、「フレームワークの上に乗るフレームワーク」もあります。 ページの切り替えやサーバー側の処理など、Web サイト全体を作るための機能を足したものです。
4. 同じものを4通りで書いてみると
「ボタンを押すと、押した回数が増える」という同じ部品を、それぞれで書いてみるとこうなります。 細かい文法は読めなくて大丈夫。雰囲気の違いを感じてみてください。
<button id="btn">押した回数:<span id="count">0</span></button>
<script>
let count = 0;
$("#btn").on("click", function () {
count = count + 1;
$("#count").text(count); // 探して、書き換える
});
</script><script setup lang="ts">
import { ref } from 'vue'
const count = ref(0)
</script>
<template>
<button @click="count++">押した回数:{{ count }}</button>
</template>import { useState } from 'react'
export function Counter() {
const [count, setCount] = useState(0)
return (
<button onClick={() => setCount(count + 1)}>
押した回数:{count}
</button>
)
}import { Component, signal } from '@angular/core';
@Component({
selector: 'app-counter',
template: `<button (click)="increment()">押した回数:{{ count() }}</button>`,
})
export class Counter {
count = signal(0);
increment() {
this.count.update((c) => c + 1);
}
}| 考え方 | |
|---|---|
| jQuery | Lesson 9 と同じく「HTML から探して、書き換える」。それを短く書けるようにした道具。 |
| Vue.js | 「データ(count)を変えれば、画面が変わる」。画面の部分は HTML とほぼ同じ見た目で書ける。 |
| React | 考え方は Vue.js と同じ。画面の部分も JavaScript の中に書く(JSX という書き方)。 |
| Angular | 考え方は同じ。クラスという型にはめて、きっちり書く。大人数でも書き方がそろいやすい。 |
Vue.js・React・Angular は、書き方こそ違いますが、「データを変えれば画面が変わる」「画面を部品に分ける」という根っこの考え方は同じです。 1つを身につければ、ほかのものも覚えやすくなります。次の Lesson 12 では、その中から Vue.js を使って、ポートフォリオを作り直します。
5. 裏側(バックエンド)のフレームワーク
Lesson 2 で学んだ「AP サーバー」で動くプログラムにも、言語ごとにフレームワークがあります。 ログイン、データベースとのやりとり、セキュリティ対策など、どのシステムでも必要になる処理を引き受けてくれます。
| フレームワーク | 言語 | 特徴 |
|---|---|---|
| Spring Boot | Java | Java の定番フレームワーク「Spring」を、すぐに使い始められるようにしたもの。日本の業務システムで特に多く使われている |
| Laravel | PHP | 書きやすさと機能の豊富さで人気。Web サービスでよく使われる |
| Django・FastAPI | Python | Django は機能がそろった大型、FastAPI は軽くて速い。AI を使うサービスとも相性がよい |
| Ruby on Rails | Ruby | 「少ないコードで素早く作れる」ことで有名。スタートアップで人気 |
| ASP.NET Core | C# | Microsoft 製。Windows や Azure との相性がよい |
| Express | JavaScript(Node.js) | シンプルで軽い。画面と同じ JavaScript でサーバーも書ける |
Spring Boot をちょっとだけのぞいてみる
Spring Boot では、たとえば「/hello にアクセスされたら Hello World! と返す」という処理が、これだけで書けます。
@RestController
public class HelloController {
@GetMapping("/hello")
public String hello() {
return "Hello World!";
}
}@RestController:「このクラスは、ブラウザなどからのリクエストを受け付ける窓口です」という目印@GetMapping("/hello"):「/helloというアドレスにアクセスされたら、下の処理を動かして」という目印return "Hello World!";:レスポンスとして「Hello World!」を返す
@ で始まる目印(アノテーション)を付けるだけで、通信の受け付けやレスポンスの作成といった面倒な部分は Spring Boot が引き受けてくれます。
Lesson 2 の「HTTP リクエスト → サーバーが処理 → HTTP レスポンス」の、「サーバーが処理」の部分を書いているわけです。
Lesson 5 の Hello World! が、今度はサーバー側から返ってくる、と思うとちょっと感慨深いですね。
6. どうやって選ぶの?
「結局どれがいちばんいいの?」という質問の答えは、残念ながら「作るもの次第」です。現場では、次のような点を考えて選びます。
何を作るか
Web サービスか、業務システムか、スマホアプリか。規模はどれくらいか。
チームが慣れているか
メンバーがすでに経験のある言語・フレームワークなら、早く確実に作れる。
長く使えるか
開発が続いていて、何年もサポートされるか。情報や経験者が多いか。
お客様・会社の方針
既存のシステムとの相性や、会社の標準として決まっている技術があるか。
このシリーズの地図
ここまでのレッスンと、次のレッスンで使うものを地図に当てはめると、こうなります。
| レッスン | 使ったもの | 種類 |
|---|---|---|
| Lesson 5・7 | HTML | 言語 |
| Lesson 8 | CSS | 言語 |
| Lesson 9 | JavaScript | 言語 |
| Lesson 10 | TypeScript / Node.js・npm | 言語 実行環境・ツール |
| Lesson 12 | Vue.js / Vite | フレームワーク 実行環境・ツール |
確認クイズ
選択肢をクリックしてください。
Q1. jQuery はどれ?
Q2. Spring Boot は、どの言語のフレームワーク?
Q3. Java と JavaScript の関係は?
Q4. TypeScript はどんな言語?
Q5. 「全体の流れが決まっていて、決まった場所に自分のコードを書き込む」のはどれ?
まとめ
- 言語はコンピュータへの指示の「言葉」、ライブラリは呼び出して使う「道具箱」、フレームワークは「作り方の型」。
- ライブラリとフレームワークの違いは主導権。ライブラリは自分が呼び出し、フレームワークは決まった流れの中で自分のコードが呼ばれる。
- JavaScript(TypeScript)の上には、Vue.js・React・Angular(フレームワーク)や jQuery(ライブラリ)がある。
- Java の上には Spring Boot、PHP には Laravel、Python には Django など、言語ごとにフレームワークがある。
- Java と JavaScript は別物。Node.js は実行環境。
- どれを選ぶかは、作るもの・チームの経験・長く使えるか・会社の方針で決める。