再利用できる機能(関数やクラス)をまとめた部品集。
ライブラリとは、よく使う機能(関数やクラス)を部品としてまとめ、いろいろなプログラムから再利用できるようにしたものです。関数とは「ある処理に名前を付けて呼び出せるようにしたかたまり」、クラスとは「データと処理をひとまとめにした設計図」のことです。
例えば「平方根を計算する」「日付を整形する」「インターネット通信をする」といった処理は多くのプログラムで必要になります。これらを毎回ゼロから書くのは大変なので、すでに用意された部品を呼び出して使うわけです。
身近な例で考えると、料理の市販ソースに似ています。出汁やソースを毎回一から作らなくても、できあいの製品を使えば短時間でおいしい料理が作れます。ライブラリも同じで、完成した部品を組み合わせることで開発を速く・確実にできます。
ライブラリの取り込み方には大きく2種類あります。ここでビルドとは「書いたコードを実行できるファイルに変換する作業」のことです。
・静的ライブラリ:ビルド時に部品を実行ファイルの中に組み込む方式
・動的ライブラリ:実行時に部品を外部から読み込み、複数のプログラムで共有する方式
静的は1つのファイルで完結するため配布が簡単ですが、同じ部品が複数のプログラムに重複し、ファイルが大きくなります。動的は部品を1つだけ置いて使い回せるためメモリやディスクを節約できますが、その部品ファイルが無いと動かない、という弱点もあります。
ライブラリとよく似た言葉にフレームワーク(=アプリ開発の土台となる骨組み)があります。両者の最大の違いは「どちらが主導権(制御)を握るか」です。
・ライブラリ:開発者が必要なときに呼び出して使う部品(主導権は自分側)
・フレームワーク:決められた枠組みに沿ってコードを書く(主導権はフレームワーク側)
フレームワークでは、自分のコードを「いつ呼ぶか」を決めるのはフレームワーク側です。このように主導権が逆転する仕組みを制御の反転(IoC=Inversion of Control)と呼びます。
身近な例で考えると、ライブラリは自分で具材を選んで作る手作り料理、フレームワークは穴を埋めるだけのレシピキットのようなものです。後者は決められた手順に従う代わりに、土台ができている分すばやく完成させられます。
ライブラリを使う理由は「車輪の再発明をしないため」です。車輪の再発明とは、すでに誰かが作って使えるものを、また一から作り直すことのたとえです。
たとえば「日付を〇〇年〇〇月〇〇日の形式に変換する」処理は、どのアプリでも必要になりえます。これを毎回ゼロから書くと、時間がかかるうえ、バグ(不具合)が入り込むリスクがあります。世界中の人が使い、バグを修正してきたライブラリを呼び出すほうが、はるかに速くて安心です。
・開発速度が上がる:すでに完成した部品を組み合わせるだけでよい
・信頼性が高い:多くの人が使い、長期間かけてバグが直されている
・本来の目的に集中できる:「アプリ独自の機能を作る」ことだけに時間を使える
これがライブラリを使う最大の理由です。「道具(ライブラリ)を賢く使う」こと自体が、エンジニアの大切なスキルの一つです。
ライブラリは目的ごとに無数に存在します。プログラミング言語ごとに代表的なものがあり、自分で探して組み合わせて使います。用途の例をいくつか挙げます。
| 用途 | ライブラリ名の例 | 一言メモ |
|---|---|---|
| 数学計算 | NumPy(Python) | 行列計算などを高速に処理 |
| 日付・時刻 | Day.js(JavaScript) | 日付の表示形式変換や差の計算 |
| HTTP通信 | Axios(JavaScript) | サーバにデータを送受信する |
| グラフ描画 | D3.js(JavaScript) | データを図やグラフで見せる |
| DB操作 | JDBC(Java) | データベースに接続して読み書き |
これらはほんの一例です。使いたい機能のライブラリをインターネットで探して取り込む(=インストールする)のが現代の開発スタイルです。自分でゼロから書くより、「適切な部品を見つけて使いこなす力」がとても大切になります。
Q1. ライブラリの説明として最も適切なものはどれか。
Q2. 静的ライブラリと動的ライブラリの違いの説明として正しいものはどれか。
Q3. ライブラリとフレームワークの違いの説明として最も適切なものはどれか。