ユーニックス総合研究所

  • home
  • archives
  • programming-lib

魔法の壺、プログラミングのライブラリ(Library)とは

ライブラリとはなんなのか?

プログラミングでよく聞く「ライブラリ(Library)」、これは一体何なのか?
結論から言うと、ライブラリとは便利な関数やモジュールを集めたパッケージのことです。

いわば便利なツールが詰め込まれた魔法の壷と表現することもできます。

筆者もWeb開発者で、ライブラリを利用したり自分で作ったりすることは多いですが、ライブラリがあるとないとじゃアプリの開発効率がぜんぜん違います。
この記事ではライブラリについて具体的に解説していきたいと思います。
具体的には↓を見ていきます。

  • ライブラリとは便利なツールを集めた「魔法の壷」
  • ライブラリはコストを減らしてソフトウェアを作りたいときに使う
  • ライブラリには標準ライブラリと外部ライブラリがある
  • ライブラリはインクルードまたはインポートして使う
  • ライブラリは自分で作ることができる

ライブラリとは便利なツールを集めた「魔法の壷」

先程も述べましたが、ライブラリとは便利な関数やモジュールが集まったパッケージ、いわば魔法の壷です。
プログラミングをする開発者、プログラマーやエンジニアは、ソフトウェアを開発する時によくこの魔法の壷を使います。
魔法の壷、つまりライブラリを使うと複雑な処理を一発でノックアウトできるからです。

ライブラリは開発者のスキルの底上げをします。
平凡な開発者もライブラリを使えばものすごく高度な処理が書けるようになります。
現代の開発者はライブラリ・ジャンキーです。
もはやライブラリ無しでは生きてはいけない体になっています。

その昔、OSSという世界に開かれた開発形態が主流でなかった時代は、ソフトウェア会社はライブラリを自社で作るのが普通でした。
ゲーム会社などは自社製のライブラリを資産として扱い、会社ごとにフォントの表示に使っているライブラリが違うなど普通にあることだったらしいです。

いまではライブラリは共通化され、世界に広く開かれるのが普通になっています。
コマンド一発で昔なら開発者がよだれを垂らして欲しがったであろうライブラリが簡単に手に入る時代です。
今はライブラリ全盛期の時代です。
ライブラリを使わない開発などありえません。

ライブラリは便利なモジュールの集合

ライブラリとはいったいなんなのか?

まず、関数という小さな機能を複数集めたものをモジュールといいます。
そしてパッケージとははそのモジュールを複数集めたものです。
このパッケージをライブラリと表現することがあります。

つまり

  • 関数、クラス
  • モジュール
  • パッケージ

というものがあり、これらを総称してライブラリと呼ぶわけです。

モジュールは便利な関数やクラスの集合

モジュールには便利に使える関数やクラスたくさん入っています。
これらの関数は汎用的なものが多く、いろいろなシーンで使うことができます。

関数にはわかりやすい名前が付けられ、その引数から入力を受け取って返り値として出力を出します。
クラスもオブジェクトにして、そのメソッドを駆使して使います。
モジュールはこういった便利な関数やクラスの集合体です。

そしてそのモジュールが複数詰め込まれたものがパッケージです。
パッケージの中にはそういったモジュールがたくさんあり、開発者が好きに使うことができます。
まさに魔法の壷と言ってもいい快適さをライブラリは提供します。

ドラえもんの4次元ポケットと表現してもいいでしょう。
とにかく便利で、ライブラリについて学べば学ぶほど、それなしでは生きてはいけない体になります。
それはまるで麻薬のような魅力を持っています。
あなたもジャンキーになりましょう。

ライブラリはコストを減らしてソフトウェアを作りたいときに使う

ライブラリはいつ使うのでしょうか?
ライブラリはプロジェクトの開発コストを減らしたい時に使われます。

「1から全部自分で作りたい」

↑のような精神は大事です。開発者ソウルとして誰もが持っているべき崇高な思想です。
しかし現実は、時間は有限です。
全部を自分で作るという贅沢な時間はわれわれには与えられていません。

そのためわれわれは時間を節約する必要があります。
そういった時にライブラリを使えば、大幅に時間を節約することができます。

ライブラリにはライブラリ開発者のものすごい時間がコミットされています。
そのライブラリ開発者の時間を、人生を使うことが出来るのがライブラリです。

ライブラリを使う開発と使わない開発

ライブラリを使う開発と使わない開発を比べると、その差は歴然たるものです。
ライブラリを使ったプロジェクトの開発は爆速に進みますが、使わないプロジェクトは寝てる牛が歩いているようなものです。

ライブラリを使った開発は特急電車です。あっという間に目的地に付きます。
ライブラリを使わない開発は杖をついた老人です。日が暮れても家に帰ってきません。
しかしそんな老人でも爆速に開発できるのがライブラリを使った開発です。

もしあなたが懸命な開発者であり、尊敬されるべき人間であるなら、新しいプロジェクトにはライブラリを導入するべきでしょう。
もしあなたがライブラリをぜんぶ自作すると言い出したら、あなたの周りの開発者はあなたに中指を立て、陰口を言い、にらみつけるようになるかもしれません。

それほどライブラリというのは開発者からのリスペクトを得ているプロダクトです。
これがないと開発なんてやってらんない! という開発者はたくさんいるわけです。

ライブラリは生産性を爆上げする

ライブラリは生産性を爆上げします。
生産性を上げたいならライブラリを使うのが普通です。
現代的なプログラミングでは、もはやライブラリを使わない開発はありえないと言ってもいいかもしれません。

あなたがビギナーの開発者であっても、ライブラリを使えば往年の開発者のような成果物を生み出すことができます。
それはまるで魔法のようです。
ライブラリという膨大な時間の蓄積が、それを可能にするのです。

生産性の向上は資本主義社会では必須です。これがないとお金持ちになれません。
もしあなたがお金持ちになりたいなら、あなたはライブラリを使いこなせるようになるべきでしょう。
ライブラリを使いこなせない開発者は生産性が落ち、未来がありません。

ライブラリには標準ライブラリと外部ライブラリ、自作ライブリがある

ライブラリの種類はどんなものがあるのでしょうか?
ライブラリの種類は大きく分けて2つあげられます。

1つが「標準ライブラリ」というプログラミング言語に最初からそなわっているライブラリです。
もう1つが「外部ライブラリ」という標準ライブラリ以外のライブラリです。
外部ライブラリはOSSなどで世界中の有志によって作成されていることが多いです。

そして最後の1つが「自作ライブラリ」とよばれる自作のライブラリです。
これはいわゆる開発者のお手製ライブラリです。ハンドメイドです。
パッケージマネージャなどでダウンロードできないことが多く、ひっそりと開発されています。

言語にそなわっている標準ライブラリ

先ほども述べましたが、標準ライブラリとはプログラミング言語に最初かそなわっているライブラリです。
これはプログラミング言語の動作環境があれば最初から利用できるライブラリです。
そのため、開発者にとってもっとも身近なライブラリと言っていいでしょう。

標準ライブラリが豊富なプログラミング言語はいわゆる「パワフル」と評されます。
プログラミング言語の生産性は標準ライブラリの充実度で変わるからです。
標準ライブラリがチープだとその言語は見向きもされません。生産性が低いからです。

開発者は自分の生産性を上げるためにつねにパワフルな言語を探しています。
そのパワフルさは標準ライブラリで決まるわけです。

もしあなたが新しくプログラミング言語を作るなら、標準ライブラリの充実に力を入れるべきでしょう。
仲間を募り、ライブラリの開発を加速させるのです。
世界はもはやそれが当然のことのように思っています。贅沢などとは思いません。

パッケージマネージャと外部ライブラリ

外部ライブラリを使う場合は「パッケージマネージャ」というソフトウェアを使うことが多いです。
これは外部ライブラリを管理するためのツールです。
たとえばPythonならpipというパッケージマネージャがあります。
PHPならcomposerです。
プログラミング言語によってこれらのパッケージマネージャは違うことが多く、それぞれ言語ごとに覚える必要があります。
C/C++のライブラリはCentOSならyum、Ubuntuならaptなどのツールを使ってインストールすることが一般的です。

またパッケージマネージャを使わずに、ソースコードから直接ライブラリをビルドすることもあります。
こちらはパッケージマネージャでインストールするのに比べてハードルが高く、バグが発生した場合は開発者自身で解決する必要があります。

ライブラリはインクルードまたはインポートして使う

ライブラリはどのようにして使うのでしょうか?
ライブラリは、コードの中でインクルードまたはインポートして使うのが普通です。
言語によってこのインクルードとかインポートとかいう呼び方は変わるんですが、やってることはパッケージの読み込みという点で同じです。

プロジェクト、コードの中でライブラリを利用するにはこのインクルードやインポートを行わないといけません。
ビルトイン関数など、インポートせずに使える関数などはありますが、基本的にはライブラリはインポートして使います。

なぜインポートするのかと言うと、ライブラリは論理的にファイルとして分割されていることが多いからです。
そのためファイル(モジュール)から別のファイル(モジュール)を利用するために、このインポートという作業を行います。

C言語のライブラリのインクルード

プログラミング言語のC言語ではライブラリの読み込みを「インクルード」と呼びます。
動作的にはこれはコンパイル前にライブラリのファイル内容をインクルード先に展開する処理です。
たとえばstdio.hという標準入出力を扱う標準ライブラリをインクルードする場合は↓のようにします。

#include <stdio.h>  

int main(void) {  
    printf("Hello, World!\n");  
    return 0;  
}  

↑のように#includeと書き、その横に<>で囲ったライブラリ名を書きます。
こうすることでライブラリをインクルードして展開できます。

printf()関数はstdio.hで宣言されている関数で、stdio.hをインクルードすることで↑のコードから使えるようになります。

*厳密にはprintf()はstdio.hをインクルードしなくても使うことが出来ますが、その場合はコンパイラの警告が表示されます。
*また、この関数が使えるようになるのはコンパイル時に標準ライブラリをリンクしているからですが、ここでは解説を省略しています。

printf()関数はC言語において「Hello, World!」プログラムからお世話になる関数です。
このように標準ライブラリには基本的な便利関数がたくさん定義されています。

Pythonのライブラリのインポート

プログラミング言語のPythonではライブラリの読み込みを「インポート」と呼びます。
これは動作的には動的にファイルの内容を読み込み、それをオブジェクトにして現在のコンテキストから利用できるようにする処理のことです。
たとえばsysという標準ライブラリをインポートするには↓のようにします。

import sys  
sys.exit(0)  

↑のようにimportと書き、その横にライブラリ名を書きます。
sys.exit()関数はsysに定義されている関数で、引数の値に応じてプログラムを終了させる関数です。
これも基本的な関数で、よく使われます。

ライブラリは自分で作ることができる

ライブラリは基本的には他の人が作ったものを利用するのが一般的ですが、そうではなく自分で作ることも可能です。
ライブラリもいわば人の手で作られたものです。
そのため自作することができます。

こういった自作のライブラリのことを俗に「自作ライブラリ」と呼びます。

自作ライブラリとは

先ほども述べましたが、自作ライブラリとは開発者が自分で作ったライブラリのことです。
これは他人には公開してないけど、自分のプロジェクトやプロダクトではよく使い回す……といったたぐいのものです。
プログラマーの人はこの自分だけの自作ライブラリを持っていることが多く、観葉植物のようにコツコツと育てている人もいます。
それは趣味であり楽しみでもあります。

また、そういった自作ライブラリを他人が利用できるようにパッケージマネージャなどに公開することもあります。
そうするとそのライブラリは世界中に公開され、よくあるOSSのライブラリのいち員として加えられるわけです。

いま世界中でメジャーになっているライブラリのほとんどは、その出発がこういった自作ライブラリであったことが推測できます。
コツコツと作ってライブラリを育てていくうちに便利になり、世の中に公開したらいいねが沢山つくようになった、というのがよくあるパターンでしょう。

おわりに

今回はライブラリについて解説しました。
ライブラリがどんな魔法の壷なのかわかっていただけたかと思います。
みなさんのプロジェクトでもおおいにライブラリを活用し、生産性を向上していきましょう。

🦝 < ライブラリは人類の英知