プログラミング

プログラミング基本用語。ライブラリとフレームワークの違い

コードを書いて動かし公開するまでをたどり、ランタイム、コンパイラ、ライブラリ、フレームワーク、依存関係の違いを実例で整理します。確認問題と解説も掲載します。

「ランタイムを入れて、依存関係をインストールして、ビルドしてください」。入門記事なのに知らない言葉が続くと、その準備だけで疲れてしまいますよね。

この記事では、単語を辞書のように並べるのではなく、「短いプログラムを書き、便利な機能を使い、ほかの人へ届ける」順に整理します。今どの作業をしているのかが分かれば、全部を暗記しなくても進められます。

まずは3つだけ覚えよう

  • ソースコードは、人が読んで編集するプログラム
  • ライブラリやパッケージは、既存の機能を利用するためのもの
  • ビルドとデプロイは、実行・公開する形を作り、それを配置する作業

これらは、すべてのプログラムに同じ順で必要なわけではありません。短いPythonコードなら、別途配布用ファイルを作らず、自分のPCで実行して使うこともあります。

ソースコードとプログラミング言語

ソースコードは、人が編集できる形のプログラムです。その文の書き方や意味のルールがプログラミング言語です。

例えば、Pythonでは次のように表示できます。

message = "学習を始めます"
print(message)

JavaScriptなら、次のように書けます。

const message = "学習を始めます";
console.log(message);

どちらも表示する内容は同じですが、ルールが違うので、PythonへそのままJavaScriptのコードを渡しても動きません。

message は値を名前で扱う変数、print や console.log は表示に使う機能です。最初の一歩はPython入門など、1つの言語で実行するところから始めると迷いません。

エディターはソースコードを書く道具です。エディターを開いただけで、すべての言語の実行環境がそろうわけではない点も覚えておきましょう。

ランタイム、コンパイラ、インタプリタ

書いた文字を実際の動作につなげる

ランタイムは、プログラムを実行するための仕組みや環境を指します。Node.jsは、ブラウザーの外でJavaScriptを動かす実行環境の例です。

ブラウザーで動くJavaScriptとNode.jsのJavaScriptは、同じ言語でも使える周辺機能が違います。例えばブラウザーのページ要素を直接扱う document は、通常のNode.jsにはありません。

「JavaScriptのコードなのに動かない」場合、文法だけでなく、どの実行環境向けかも確認します。Node.jsの公式入門では、V8というJavaScriptエンジンを使う実行環境として説明されています。

変換する役割と、実行する役割

コンパイラは、ソースコードを別の表現へ変換する道具です。変換先は機械語だけとは限らず、別の言語や中間形式の場合もあります。

インタプリタは、プログラムを解釈して実行する仕組みです。「上から1行ずつそのまま動かす」とだけ覚えると、実際の動作とずれることがあります。

例えば一般的なPythonの実装であるCPythonは、コードをバイトコードという中間的な命令へコンパイルしてから実行します。「Pythonにはコンパイルが一切ない」という意味ではありません。

言葉 注目していること
コンパイラ 表現を変換する役割
インタプリタ 命令を解釈・実行する役割
ランタイム 実行を支える環境や仕組み

実際の処理系では、これらが組み合わさります。言語を完全に2種類へ分類することより、「どの道具が、どの段階を担当しているか」を考える方が実用的です。

ライブラリとフレームワーク

両方とも、よく使う機能を一から作らずに済ませるための仕組みです。ただし、使い方の主導権に違いがあります。

必要な道具を呼ぶのがライブラリ

ライブラリは、再利用できる機能をまとめたものです。Pythonの標準ライブラリにある math を使ってみます。

import math

side_squared = 81
side = math.sqrt(side_squared)

print(side)

出力は 9.0。sqrt は平方根を求める機能です。81は9×9なので、正方形の面積が81なら一辺は9です。

import で使う機能を読み込み、必要な場所で math.sqrt を呼んでいます。自分で平方根の計算方法を実装しなくても、確認された既存の機能を使えます。

これはPythonに付属する標準ライブラリなので、追加の外部パッケージをインストールせず使えます。ライブラリは「すべてネットから後で入れるもの」ではないんですね。

用意された流れへ処理を書くのがフレームワーク

フレームワークは、アプリの構成や処理の流れを支える土台です。Webアプリなら、URLごとの処理や設定の置き方などを用意し、その中に自分のコードを書きます。

例えば「このURLにアクセスされたら、この処理を呼ぶ」と登録すると、呼び出すタイミングはフレームワーク側が管理します。ライブラリを自分から呼ぶ場合と比べると、主導する側が変わります。

見方 ライブラリ フレームワーク
基本の使い方 必要な機能を呼び出す 決まった流れへ自分の処理を加える
例えるなら 道具箱から工具を使う 作業場の仕組みに沿って組み立てる
注意点 組み合わせ方は自分で考える その仕組みのルールを学ぶ必要がある

境界が曖昧な製品もあります。呼び名の正解探しより、「何が用意され、何を自分で決めるか」を見ると選びやすくなります。

パッケージと依存関係

パッケージは、コードや関連ファイルを配布・利用しやすくまとめた単位です。ライブラリがパッケージとして配布されることも、開発用ツールが配布されることもあります。

つまり「ライブラリ」と「パッケージ」は完全な同義語ではありません。前者は役割、後者は配り方・まとめ方に注目した呼び方です。Pythonなどでは、言語のモジュール構造としてのpackageという意味もあるため、文脈で確認します。

依存関係を小さな例で考える

自分のプログラムAが、画像加工パッケージBを使うとします。さらにBが計算パッケージCを使っている場合は、次のつながりです。

自分のアプリA → 画像加工B → 計算用C

「AはBがないと動かない」という関係が依存関係です。直接選んでいないCも、間接的に必要になることがあります。

パッケージを導入・更新する道具をパッケージマネージャーと呼びます。Pythonのpip、JavaScript周辺のnpmやpnpmなどがあります。

必要なバージョンを記録しておくと、別のPCでも近い環境を再現しやすくなります。JavaScriptの package.json は必要なパッケージなどを書く設定、ロックファイルは実際に解決された組み合わせを記録するためのファイルです。

足せば足すほど良いわけではない

便利な機能でも、更新・互換性・安全性の確認が必要です。互換性は、組み合わせたときに正しく動くかという性質です。

知らないコマンドをそのまま実行する前に、正式な配布元と名前を確認します。名前が似ている別パッケージもありえます。プロジェクトに既存の手順があれば、それを優先し、いきなり最新版へ総入れ替えしないようにしましょう。

バグとエラー

バグは、意図しない動作の原因となる不具合です。エラーは、処理中に検出した問題や、その通知を指します。

例えば、3個分の代金を計算したいのに price + count と書いたら、プログラムは止まらなくても結果は間違います。これは計算のロジック、つまり手順のバグです。

一方、負の個数を入力した利用者へ「0以上を入力してください」と返すのは、正しい入力確認かもしれません。エラー表示があることだけで、必ずプログラムのバグとは限りません。

原因を調べる作業をデバッグ、期待する結果か確かめる作業をテストと呼びます。エラーの読み方では、小さなコードから原因を絞る方法を扱います。

ビルドとデプロイ

ビルドは、ソースコードや素材を実行・配布できる形へまとめる作業です。コード変換、複数ファイルの整理、画像などの取り込みが含まれることがあります。

デプロイは、その成果物やアプリを利用する環境へ配置・反映する作業です。公開サイトだけでなく、確認用の環境に配置する場合にも使います。

このサイトのような静的な記事サイトでは、Markdownの記事をHTMLへ変換するのがビルド、公開サービスへ反映するのがデプロイです。

状況 どこまで終わっているか
記事ファイルを保存した 編集まで
公開用HTMLを作った ビルドまで
公開先へ反映した デプロイまで

「ビルド成功なのにサイトが古い」なら、公開先に届いているかを確認します。履歴を送るGitの言葉はGit・GitHub用語入門と合わせて読むと整理できます。

確認問題:どの役割の言葉?

問題1:Pythonで平方根の機能だけを呼び出しました。ライブラリとフレームワーク、どちらの使い方に近いでしょうか。

問題2:公開用ファイルはできましたが、サーバーにはまだ置いていません。終わっていない工程は何でしょうか。

模範解答と解説

  1. ライブラリです。自分の処理から必要な計算機能を呼んでいます。アプリ全体の流れを任せているわけではありません。
  2. デプロイです。ビルドで成果物を作ることと、利用場所へ届けることは別だからです。

まとめと参考資料

用語を見かけたら「書く・動かす・機能を使う・配る」のどの段階かへ戻して考えてみてください。すべてを覚えてから作り始めなくても大丈夫です。

← 記事一覧へ戻る