プログラミング言語の違いと、フレームワーク・ライブラリ

この記事は、プログラミングやバイブコーディングをする上で最低限身につけたほうがよい IT の実践的な知識を 1 から身につける「IT 基礎知識講座の一部」です。
Python と JavaScript は書き方が違うだけで、やることは同じです。ライブラリとフレームワークの呼び出しの向きの違いまで、図解で見分けられるようにします。

この記事は、プログラミング言語の違いと、フレームワーク・ライブラリを扱います。

React や Next.js のような名前が、言語なのか、言語で書かれたものなのかを見分けられるようにします。

取り上げるのは Python と JavaScript、そして React・Next.js・Django・Flutter の 4 つの名前です。

入門書に出てくる名前は、3 種類のどれか
プログラミング言語ライブラリフレームワークPythonJavaScriptReactNext.jsDjango自分で 1 行ずつ書くための決まり自分のコードから呼び出す決められた場所に自分のコードを書く実行環境と対になっているか呼び出す向きが自分から外か呼び出す向きが外から自分か
上段が呼び名、中段が代表例、下段が自分のコードとの関わり方。いちばん右の列が、その名前を見かけたときに確かめることです。

プログラミング言語とは何か — 文法が違っても、書く内容は共通

プログラミング言語(programming language。ソースコードを書くための語彙と書き方の決まり)は、実行環境と対になっています。

違うのは文法(syntax。命令をどの記号と語順で書くかの決まり)です。

同じ役割PythonJavaScript
値に名前を付けるa = 3let a = 3;
条件で分けるif a > 2:if (a > 2) {
画面に出すprint(a)console.log(a)

Python は行末の : と字下げ、JavaScript は ; と { } でまとまりを示します。

次の 4 行のうち、上の 3 行が JavaScript、最後の 1 行が Python の書き方です。

let a = 3;
let b = 4;
console.log(a + b);
console.log(len([a, b]))

3 行目で 7 が出たあと、最後の行で止まります。

同じことをしたいのに、書き方が違うと実行環境は読み取れません。

言語が違うのは書き方で、やることは同じ

プログラミング言語とは、コードを書くときの記号と語順の決まりのことです。

値に名前を付ける・条件で分ける・繰り返すという仕組みはどの言語にもあり、違うのは書き方と、それを読み取る実行環境だけです。

ライブラリとフレームワーク — 自分のコードとの呼び出しの向きが逆

ライブラリ(library)もフレームワーク(framework)も他の人が書いたプログラムの集まりで、自分で書く量を減らすために使います。

別のプログラムの機能を名前で指定して実行させることを呼び出す(call)といいます。

2 つの違いは、その呼び出しの向きです。

見るところライブラリフレームワーク
英語表記libraryframework
中身特定の機能を持つプログラムアプリ全体の処理の流れ
自分のコードとの関係自分のコードから呼び出す決まった場所に書き足す
呼び出しの向き自分のコード → ライブラリフレームワーク → 自分のコード
流れを決めるのは自分のコードフレームワーク
呼び出しの向きは、どちらが外側にあるかで決まる
ライブラリを使うとき
  • 実行環境が動かすのは、自分のコード(app.js)
自分のコード(app.js)
  • プログラム全体の流れを決める
  • 必要な場面でライブラリを呼び出す
ライブラリ
  • 呼び出されたときだけ動く
  • 終わると自分のコードに戻る
フレームワークを使うとき
  • 実行環境が動かすのは、フレームワーク
フレームワーク
  • アプリ全体の流れがあらかじめ書かれている
  • 決まった場面で自分のコードを呼び出す
自分のコード(決められたファイル)
  • 呼び出されたときだけ動く
  • 書く場所と名前が決められている
上の枠がライブラリを使うとき、下の枠がフレームワークを使うときです。外側にあるほうが全体の流れを決め、内側は呼び出されたときだけ動きます。

下の枠では内側と外側が入れ替わり、フレームワークが自分のコードを呼び出します。

外側にあるほうが、全体の流れを決めます。

ライブラリを呼び出すと、自分で何十行も書く代わりに 1 行で済みます。

違うのは、その処理を誰が書いたかだけです。

呼び出す前にインストールが要るライブラリを、入れないまま呼び出すとエラーで止まります。

手順書では「パッケージ」「モジュール」とも呼び、そのしくみは「パッケージ管理とは」の記事で扱います。

Web アプリのフレームワークは、リクエストを受け取ってレスポンスを返すまでの流れを持っています。

Web アプリで、フレームワークが受け持つ範囲
フレームワークが受け持つ範囲
  • ブラウザから届いたリクエストを受け取る
  • URL を見て、対応する処理を探す
  • 返ってきた結果からレスポンスを組み立てて返す
自分のコードを書く場所
  • 呼び出されたときだけ動く
  • データベースを読み書きして結果を作る
  • 作った結果をフレームワークに返す
外側の枠がフレームワークの受け持ちで、リクエストの受け取りからレスポンスの組み立てまでを行います。内側の枠だけが、自分のコードを書く場所です。

外側の 3 つはフレームワークが行うので、自分では書きません。

フレームワークを使う理由は、外側を自分で書かずに済ませることです。

自分のコードが動くのは 3 つ目のステップだけで、その前後はフレームワークの担当です。

どの URL でどれを動かすかも、決められた場所に書いておくだけです。

呼ぶ側か、呼ばれる側か

ライブラリもフレームワークも他の人が書いたプログラムで、違いはどちらが外側にあるかです。

ライブラリは自分のコードの内側で呼び出され、フレームワークは自分のコードを外側から呼び出して、全体の流れを決めます。

React・Next.js・Django・Flutter は何か — 名前を 3 種類に分ける

講座に出てくる名前を、言語・ライブラリ・フレームワークのどれかに分けて読みます。

Next.js は言語ではなく、JavaScript で書かれたフレームワークです。

言語の中に置いた、フレームワークとライブラリ
JavaScript で書くもの
  • ブラウザで動く画面のコード
  • node で動くサーバー側のコード
Next.js(フレームワーク)
  • URL ごとにページのファイルを分ける
  • サーバー側の処理も書ける
  • 画面は React で組み立てる
React(ライブラリ)
  • 画面の部品を組み立てる
  • Next.js を使わなくても呼び出せる
Python で書くもの
  • データ分析や自動化のコード
  • サーバー側の処理のコード
Django(フレームワーク)
  • URL と処理の対応付け
  • データベースの読み書き
  • ログインの仕組み
Dart で書くもの
  • スマホアプリのコード
Flutter(フレームワーク)
  • スマホアプリの画面と動き
  • 1 つのコードから iPhone と Android の両方へ
外側が言語、内側がその言語で書くフレームワークとライブラリです。内側にあるものは、外側の言語の文法で書きます。

React は画面の部品を組み立てるライブラリ、Next.js はその React を使ってサーバー側の処理まで持つフレームワークです。

Flutter はスマホアプリを作るフレームワークで、Dart という言語で書きます。

1 つのコードから複数の OS で動くアプリを作れることをクロスプラットフォーム(cross-platform)といいます。

どの名前も言語ではなく、自分のコードと組み合わせて使うものです。

同じ Next.js の名前が、端末の側とサーバーの側の両方に出てきます。

画面まで作るか、サーバー側の処理まで持つかで、受け持つ範囲が変わるからです。

Flutter で作ったスマホアプリからでも、つなぐ先は同じ公開サーバーです。

名前は言語か、言語で書かれたものか

Next.js も React も Django も Flutter も言語ではなく、何かの言語で書かれたものです。

書く言語を調べれば言語そのものかどうかが、呼び出しの向きを調べればライブラリかフレームワークかが分かります。

どの言語から学ぶか — 作りたいものの画面がブラウザに要るかで決める

ブラウザが読み取れる言語は JavaScript なので、画面側(フロントエンド)は JavaScript です。

処理側(バックエンド)はサーバーで動くので、どちらでも書けます。

作りたいものから、最初の言語と、そのあとに出てくる名前まで
作りたいものブラウザの中で動く画面が要るスマホの中で動く画面が要る画面は要らない集計や自動化だけJavaScriptDart などPythonReactNext.jsFlutterDjangopandas
上の 1 つから 3 つに分かれ、それぞれ下の言語に行き着きます。いちばん下の段は、その言語を選んだあとに名前を見かけるフレームワークとライブラリです。

画面がブラウザに要るなら、その部分は JavaScript で決まります。

画面が要らないなら、データ分析や自動化の外部ライブラリが多い Python から始めます。

いちばん下の段のフレームワークやライブラリは、言語を選んだあとに出てくるもので、先に選ぶものではありません。

どちらから始めても、身につく仕組みは同じです。

2 つの経路は、最後に同じところへ集まります。

どちらの言語から始めても、身につく仕組みは同じ
Python から始めた場合JavaScript から始めた場合a = 3if / whilelet a = 3;if / while値に名前を付ける条件で分ける繰り返す
左右の 2 つの経路が、下の 1 つに集まります。書き方は別々に覚えますが、行き着く仕組みは共通です。

覚え直すのは書き方と、その言語で使うライブラリの名前だけです。

作りたいものに近いほうを 1 つ選んで、先に進めてください。

作りたいものが決まれば、言語も決まる

言語は、好みではなく作りたいもので決められます。

ブラウザの中で動く画面が要るならその部分は JavaScript、要らないなら Python から始められ、2 つ目で覚え直すのは書き方とライブラリの名前だけです。

QUIZ

理解度チェック

まずは1問ずつ答えてみましょう。

Q1入門書に出てくる Next.js は、言語・ライブラリ・フレームワークのどれですか。

Q2ライブラリとフレームワークの違いとして正しいものはどれですか。

Q3Web アプリの画面側のコードを JavaScript で書く理由はどれですか。