Q1入門書に出てくる Next.js は、言語・ライブラリ・フレームワークのどれですか。
プログラミング言語の違いと、フレームワーク・ライブラリ
この記事は、プログラミングやバイブコーディングをする上で最低限身につけたほうがよい IT の実践的な知識を 1 から身につける「IT 基礎知識講座の一部」です。
Python と JavaScript は書き方が違うだけで、やることは同じです。ライブラリとフレームワークの呼び出しの向きの違いまで、図解で見分けられるようにします。
この記事は、プログラミング言語の違いと、フレームワーク・ライブラリを扱います。
React や Next.js のような名前が、言語なのか、言語で書かれたものなのかを見分けられるようにします。
取り上げるのは Python と JavaScript、そして React・Next.js・Django・Flutter の 4 つの名前です。
プログラミング言語とは何か — 文法が違っても、書く内容は共通
プログラミング言語(programming language。ソースコードを書くための語彙と書き方の決まり)は、実行環境と対になっています。
違うのは文法(syntax。命令をどの記号と語順で書くかの決まり)です。
| 同じ役割 | Python | JavaScript |
|---|---|---|
| 値に名前を付ける | a = 3 | let 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 つの違いは、その呼び出しの向きです。
| 見るところ | ライブラリ | フレームワーク |
|---|---|---|
| 英語表記 | library | framework |
| 中身 | 特定の機能を持つプログラム | アプリ全体の処理の流れ |
| 自分のコードとの関係 | 自分のコードから呼び出す | 決まった場所に書き足す |
| 呼び出しの向き | 自分のコード → ライブラリ | フレームワーク → 自分のコード |
| 流れを決めるのは | 自分のコード | フレームワーク |
- 実行環境が動かすのは、自分のコード(app.js)
- プログラム全体の流れを決める
- 必要な場面でライブラリを呼び出す
- 呼び出されたときだけ動く
- 終わると自分のコードに戻る
- 実行環境が動かすのは、フレームワーク
- アプリ全体の流れがあらかじめ書かれている
- 決まった場面で自分のコードを呼び出す
- 呼び出されたときだけ動く
- 書く場所と名前が決められている
下の枠では内側と外側が入れ替わり、フレームワークが自分のコードを呼び出します。
外側にあるほうが、全体の流れを決めます。
ライブラリを呼び出すと、自分で何十行も書く代わりに 1 行で済みます。
違うのは、その処理を誰が書いたかだけです。
呼び出す前にインストールが要るライブラリを、入れないまま呼び出すとエラーで止まります。
手順書では「パッケージ」「モジュール」とも呼び、そのしくみは「パッケージ管理とは」の記事で扱います。
Web アプリのフレームワークは、リクエストを受け取ってレスポンスを返すまでの流れを持っています。
- ブラウザから届いたリクエストを受け取る
- URL を見て、対応する処理を探す
- 返ってきた結果からレスポンスを組み立てて返す
- 呼び出されたときだけ動く
- データベースを読み書きして結果を作る
- 作った結果をフレームワークに返す
外側の 3 つはフレームワークが行うので、自分では書きません。
フレームワークを使う理由は、外側を自分で書かずに済ませることです。
自分のコードが動くのは 3 つ目のステップだけで、その前後はフレームワークの担当です。
どの URL でどれを動かすかも、決められた場所に書いておくだけです。
呼ぶ側か、呼ばれる側か
ライブラリもフレームワークも他の人が書いたプログラムで、違いはどちらが外側にあるかです。
ライブラリは自分のコードの内側で呼び出され、フレームワークは自分のコードを外側から呼び出して、全体の流れを決めます。
React・Next.js・Django・Flutter は何か — 名前を 3 種類に分ける
講座に出てくる名前を、言語・ライブラリ・フレームワークのどれかに分けて読みます。
Next.js は言語ではなく、JavaScript で書かれたフレームワークです。
- ブラウザで動く画面のコード
- node で動くサーバー側のコード
- URL ごとにページのファイルを分ける
- サーバー側の処理も書ける
- 画面は React で組み立てる
- 画面の部品を組み立てる
- Next.js を使わなくても呼び出せる
- データ分析や自動化のコード
- サーバー側の処理のコード
- URL と処理の対応付け
- データベースの読み書き
- ログインの仕組み
- スマホアプリのコード
- スマホアプリの画面と動き
- 1 つのコードから iPhone と Android の両方へ
React は画面の部品を組み立てるライブラリ、Next.js はその React を使ってサーバー側の処理まで持つフレームワークです。
Flutter はスマホアプリを作るフレームワークで、Dart という言語で書きます。
1 つのコードから複数の OS で動くアプリを作れることをクロスプラットフォーム(cross-platform)といいます。
どの名前も言語ではなく、自分のコードと組み合わせて使うものです。
同じ Next.js の名前が、端末の側とサーバーの側の両方に出てきます。
画面まで作るか、サーバー側の処理まで持つかで、受け持つ範囲が変わるからです。
Flutter で作ったスマホアプリからでも、つなぐ先は同じ公開サーバーです。
名前は言語か、言語で書かれたものか
Next.js も React も Django も Flutter も言語ではなく、何かの言語で書かれたものです。
書く言語を調べれば言語そのものかどうかが、呼び出しの向きを調べればライブラリかフレームワークかが分かります。
どの言語から学ぶか — 作りたいものの画面がブラウザに要るかで決める
ブラウザが読み取れる言語は JavaScript なので、画面側(フロントエンド)は JavaScript です。
処理側(バックエンド)はサーバーで動くので、どちらでも書けます。
画面がブラウザに要るなら、その部分は JavaScript で決まります。
画面が要らないなら、データ分析や自動化の外部ライブラリが多い Python から始めます。
いちばん下の段のフレームワークやライブラリは、言語を選んだあとに出てくるもので、先に選ぶものではありません。
どちらから始めても、身につく仕組みは同じです。
2 つの経路は、最後に同じところへ集まります。
覚え直すのは書き方と、その言語で使うライブラリの名前だけです。
作りたいものに近いほうを 1 つ選んで、先に進めてください。
作りたいものが決まれば、言語も決まる
言語は、好みではなく作りたいもので決められます。
ブラウザの中で動く画面が要るならその部分は JavaScript、要らないなら Python から始められ、2 つ目で覚え直すのは書き方とライブラリの名前だけです。
理解度チェック
まずは1問ずつ答えてみましょう。
Q2ライブラリとフレームワークの違いとして正しいものはどれですか。
Q3Web アプリの画面側のコードを JavaScript で書く理由はどれですか。