IT・WEB・ゲーム業界の転職に強いR-Stone

転職コラム

ライブラリとは?種類と特徴、使い方をご紹介

効率のよいコードを一から書かなくても、さまざまな機能を実現できるのがライブラリの利点です。ライブラリを活用すればソフトウェア開発工数を削減でき、洗練されたアルゴリズムや機能をアプリケーションに組み込めます。

 

ただしライブラリを使ううえではいくつか注意点があります。他に、フレームワークとの違い、実際にライブラリを使用するコード例などを通じて詳しく見ていきましょう。

あなたに合った仕事が必ず見つかる!
IT・WEB・ゲーム業界の案件が3,000件以上!!

 

  1. ライブラリとは?

ライブラリは、ソフトウェアの部品集です。

英語の辞書でライブラリを引くと、参考資料を保管する場所・資料の集まり・図版集・出版社から発行された関連書籍のシリーズ・同じ主題の出版物を集めたもの、などの意味があります。本や資料を特定の意図で集めたものをイメージするとよいでしょう。

ライブラリを使えばプログラミングの工期を短縮したり、コンピューターの使用するメモリ容量を削減できます。ライブラリは単体では動作せず、他のプログラムに組み込んで使用します。

各プログラミング言語毎にさまざまな用途向けのライブラリが存在します。GitHubやプログラミング言語の公式サイトで配布されており、使用方法の文書と一緒にダウンロードするほか、プログラミング言語に用意されたライブラリ管理ツール・パッケージ管理ツールなどを使って作成中のプログラムに組み込みます。

 

  1. 「ライブラリ」と「フレームワーク」の違い

プログラムを効率的に開発するには、ライブラリの他にもフレームワークを利用できます。

フレームワークも第三者が開発したプログラムである点は共通していますが、扱い方が異なります。

ライブラリは、比較的小さい機能が用途別にまとまっており、必要な機能を選んで作成中のプログラムから利用します。

フレームワークは作成するプログラムの骨組みとなる、半分完成したプログラムです。フレームワークを利用するプログラミングは、フレームワークの骨組みに肉付けしていくのがメインです。フレームワークのルールやガイドラインに従って、足りない部分をプログラムするだけで完成できるので、作成したいプログラムにマッチしたフレームワークが見つかれば開発を迅速化できます。

一例として、ログイン機能のあるプログラムを開発するとします。ログイン機能のあるプログラムは下記の働きをプログラミングすれば作成できそうです。

 

  • ユーザーID・パスワードを入力するフォームを表示する
  • 利用者が入力したID・パスワードを受け取る
  • ユーザー情報をデータベースと照合する
  • ログインを許可する場合、指定の画面へ移動する
  • パスワードが違うなど、ログイン不許可の場合、再入力を促す表示をする

 

ログイン機能の開発に、ライブラリを利用した場合と、フレームワークを使用した場合とでは、以下のように違いがあります。

ライブラリの場合、以下一つ一つが個別の部品として用意されており、4つすべてを使うことも1つだけライブラリから使うこともできます。

  • フォームを表示する
  • 利用者の入力した値を受け取る
  • データベースから指定ユーザーの情報を読む
  • 指定の画面へ移動する

 

フレームワークの場合は「ログイン機能」が丸ごとフレームワークに用意されており、プログラマーがおこなうのは、以下のようにアプリケーションに合わせたカスタマイズのみです。

 

  • フォームの見た目をアプリケーションに合わせてカスタマイズする
  • データベースの接続先などの環境設定
  • ログイン許可された場合の移動先を指定

 

ライブラリは細かい単位で用意されており、組み合わせて利用できます。

フレームワークは半分完成したプログラムをカスタマイズするイメージなので、用途に合っていれば大幅に工数を削減できますが、やや柔軟性に欠ける面もあります。

 

  1. ライブラリの種類

 

ライブラリには、プログラムへの組み込み方によっていくつかの方式があります。

 

  1. 動的リンクライブラリ(DLL)

DLLはWindowsで利用されるライブラリで、複数のアプリケーションから利用できるコードやデータを含んでいます。ライブラリファイルの拡張子は「.dll」です。

「動的」は、実行時に組み込むことから来ており、プログラマーは利用するDLLをプログラミング時に指名しておき、ライブラリの機能を使ったコードを記述します。

Windowsは、アプリケーションを読み込むタイミングで指名されたDLLを読み込み、プログラムのコードからDLL内のコードを利用できるようリンク(つなぎ合わせ)します。

 

  1. 静的リンクライブラリ

静的リンクは、OSを問わず利用されるライブラリの形態です。実行前の段階、言い換えればプログラムが製造される段階でアプリケーションに組み込まれるライブラリです。

プログラム言語には、C言語・Go言語・Rust・Java・Kotlin・Swift・Fortranなどのようにコンパイル(ソースコードを機械語に翻訳する段階)が必要な言語があり、静的リンクはコンパイルのあとでおこなわれます。

静的リンクは、他の方式と比べてプログラムの容量が大きくなります。メリットは、必要なライブラリを含んでいるため、一つのプログラムファイルで完結しており、アプリケーション配布先の環境に左右されにくい点です。

 

  1. 共有ライブラリ

共有ライブラリはLinux系OSで使用され、同じOSで動作している複数のアプリケーションから利用できるコードやデータを提供します。共有ライブラリファイルの拡張子は.soです。

アプリケーションを読み込むタイミングで、対応する共有ライブラリが検索され、プログラムのコードとリンクします。また、アプリケーションの実行中にロードもできるので、プラグインを提供する際に利用できます。

あなたに合った仕事が必ず見つかる!
IT・WEB・ゲーム業界の案件が3,000件以上!!
  1. ライブラリの特徴とメリット

ライブラリはプログラミングにさまざまな恩恵をもたらします。具体的に見ていきましょう。

 

  1. 短時間で効率よくプログラム開発ができる

ライブラリを利用すると、プログラムの工数を削減できます。

例えば、WEBサイトからHTMLをダウンロードする機能をプログラミングする場合、ライブラリを使用すれば、URLを指定し、受け取り方法を指定する、などの簡単な手順だけで利用できます。ライブラリを使わずに実装する場合は、HTTPプロトコルやTCP/IP、DNSサーバーなどさまざまな仕様を調べてプログラミングする必要があります。

また、作成が早まるだけでなく、エラーやミスへの対応もしやすくなります。WEBサイトからHTMLをダウンロードする例では、相手先のWEBサーバーがダウンしていて利用できない場合も考えられます。ライブラリを使えば多くの場合、あらかじめ起こりうるエラーに対して、Aのエラーの場合はa、エラーBの場合はb、のように応答が用意されているため、プログラム側ではケース別に処理を書くだけで済みます。ライブラリを使わずに実装する場合、どのようなエラーが起こりうるか調査するところから始める必要があります。

プログラミングにはミスがつきものです。ライブラリを使わずに実装すると、バグのあるコードを書いてしまうことがあります。すべてのライブラリが信頼性が高いわけではありませんが、定評のあるライブラリであればデバッグ済みの場合が多く、ライブラリの機能を利用する部分はテスト工数を削減できます。

 

  1. プログラムを軽くし動作が速くなる

実行時に読み込まれるタイプのライブラリは、同じOSで稼働する複数のアプリケーションから共有できます。10個のアプリケーションが同じライブラリを利用する場合、ライブラリは1回だけメモリに読み込まれるためメモリ容量の無駄が抑えられます。

ライブラリに含まれるコードやデータはさまざまな用途があり、複雑で応用的な処理はもちろん、例えば「文字列の中から一定のパターンに合うものを検索する」「JPEG形式の画像を読む」など多くのプログラムで必要となる汎用性の高いものもあります。こうした汎用性の高い処理を共有ライブラリの形で利用すればするほどメモリ効率は良くなります。

また、「文字列の中から一定のパターンを検索」するライブラリを例に取ると、ライブラリを利用するアプリケーション側では、「文字列とパターンをライブラリに渡す」「結果として所定の検索結果が得られる」など、やり取りのルールさえ合っていれば、ライブラリの交換が可能です。ライブラリがバージョンアップし、同じ処理をより短時間でおこなうことができ、さらにより少ないメモリ使用量でおこなえる可能性があり、アプリケーション側のコードを変更しなくてもライブラリの改善によってアプリケーションの性能がアップします。

熟練のプログラマーが効率のよいライブラリを作成すれば、多くのアプリケーション開発者が恩恵を受けられます。

 

  1. ライブラリのデメリット

 

便利な反面、使用する前に注意が必要なライブラリもあります。注意点を見ていきましょう。

 

  1. ライセンスの確認が必要

ライブラリには多くの場合ライセンス規定が定められています。

ライセンス規定には、ライブラリを利用する場合の条件が記されており、例えば、商用できるかどうか、再配布できるかどうか、再配布する場合の条件などです。万一、条件を守らずにライブラリを使用すると、法的手段に訴えられる場合もあります。

特に業務でライブラリを使ったプログラムを作成する場合や、個人でもプログラムを販売しようと考えている場合は、ライブラリの利用条件を注意深く確認する必要があります。

 

  1. 品質によってセキュリティー面のリスクがある

ライブラリは個人作成のものが多数あります。

ライブラリを利用すると便利な反面、ライブラリの品質がどのようなものかは利用する前に確認が必要です。ライブラリもソフトウェアですので、バグが含まれていることや、セキュリティ上の脆弱性が見つかることもあります。

ライブラリ作者がバグや脆弱性に対処した新しいバージョンを提供しているかどうか確認しましょう。機能追加やバグ修正が頻繁におこなわれているライブラリもあれば、まったくメンテナンスされないライブラリもあります。

ライブラリの機能だけでなく、品質面にも注意が必要です。ライブラリの更新履歴などが参照できる場合は、どの位メンテナンスされているかを確認するのもおすすめです。

 

  1. バージョンによってライブラリが使えなくなる

今まで利用していたライブラリが利用できなくなる場合もあります。

例えば、XPなど古いOSでは動作するが新しいバージョンのOSでは動作しないライブラリの場合、ライブラリのアップデート予定がない場合は、アプリケーションを新しいOSで使えるようにするために別のライブラリに乗り換える必要があるかもしれません。

OSのバージョン以外にも、プログラミング言語のバージョンにより使えなくなったり、ライブラリの機能は問題ないがライセンス規定が変更されて使えなくなる、なども考えられます。ライセンスは仕方がない面がありますが、OSやプログラミング言語のバージョンからは事前に耐用年数を想定できるので、利用前に確認をおすすめします。

ライブラリは最新バージョンが常によいとは限りません。新しいバージョンは性能がアップしたり機能が増えたりとよいこともある反面、新たなバグが発生する場合もあります。最新より少し前の安定したバージョンのほうがアプリケーションの組み込みに適している場合もあります。

利用者が多いライブラリであれば、「定番」となるバージョンがコミュニティにより支持されている場合もあるので、アプリケーションに組み込む前に検討します。

あなたに合った仕事が必ず見つかる!
IT・WEB・ゲーム業界の案件が3,000件以上!!
  1. ライブラリの使い方

 

ライブラリを使用する前に、まずはライブラリを探します。

ライブラリの作者は個人や企業団体などさまざまです。各自のWEBサイトでライブラリを配布している場合や、GitHubなどで公開される場合もあります。

プログラミング言語によっては、当該言語向けのライブラリをパッケージ化して配布できる仕組みが存在し、パッケージをコマンドラインから検索したりダウンロードできる場合もあります。公式サイトからライブラリのカタログが参照できるプログラミング言語もあります。

いずれにせよ、ある程度需要のあるライブラリなら、インターネット検索で見つけたり、当該言語の開発者のSNSなどで紹介されているので、まずは使いたいライブラリを探します。

ライブラリを入手できたら、次に付属のマニュアルを読み、使用方法を確認します。

ライブラリには、複数のコードやデータが含まれており、一つ一つに対して、使用法が文書化されています。どういう順番で機能を呼び出せばよいか、具体的に利用手順を確認しましょう。試しに小さなテスト用アプリケーションを作成し、文書どおりにライブラリを呼び出してみて、望む機能が充足できるか確認します。機能的に問題なさそうなら、用途に応じてライセンスやコード品質、メンテナンス状況や利用期間など機能以外の面も確認し、実際のアプリケーションへ組み込んでいきます。

Pythonでのライブラリ使用例

プログラミング言語Pythonでのライブラリ使用例を見ていきましょう。Pythonはコードの視覚的な読みやすさに特徴があり、WEB開発やデータ分析、人工知能の開発によく利用される人気のプログラミング言語です。

Pythonでは、再利用できるコードを「モジュール」と呼びます(モジュールは本記事のライブラリに対応します)

Pythonに標準で付属しているライブラリの中から、「random」と「urllib.request」を例として使用例を見ていきましょう。「random」は乱数を使った処理がおこなえ、「urllib.request」はインターネットからデータを取得できます。

randomを使用するコードの例

import random

print(random.choice([‘apple’, ‘pear’, ‘banana’]))    # リストから一つ選ぶ

print(random.sample(range(100), 10))   # 整数列[0,100) から10個ランダムに取り出す

print(random.random())    # ランダムな浮動小数点数を得る

print(random.randrange(6))    # 区間[0,6)内のランダムな整数

  • Pythonでは、ライブラリを使用する場合、「import」文を使いモジュール名を指定します。
  • 記号#移行はコメントとして扱われ実行に影響しません。
  • print(~)」は、括弧内の値を端末に表示します。
  • 各「print」の括弧内にある、「random.」で始まる関数は「random」ライブラリに含まれているもので、乱数関連の機能がそろっています。
  • random.choice」は与えられたリストの中から一つを無作為に返します。
  • random.sample」は与えたリストの中から、指定個数、重複せず集めたリストを返します。
  • random.random」は無作為な浮動小数点数(精度が限られた実数)を返します。
  • random.randrangeは、整数列から一つの整数を無作為に返します。

 

上記コードの実行例は以下のようになります(結果は無作為に変動します):

$ python3 library-random.py

banana

[42, 15, 43, 12, 89, 20, 87, 10, 17, 66]

0.7839388989743924

4

 

urllib.requestを使用するコードの例

from urllib.request import urlopen

with urlopen(‘http://api.open-notify.org/iss-now.json’) as response:

    for line in response:

        print(line.decode())

  • import」文の別形式で「from」を使い「urllib.request」より「urlopen」関数の利用を準備します。
  • urlopen(~)」は、括弧内の文字列で指定したURLからデータを取得します。オプションの引数によっては取得だけでなく送信もおこなえますが今回は使用しません。
  • urlopen」に成功した場合、サーバーからの応答がresponseオブジェクトに設定されます。
  • for」文により応答に含まれる各行を順に表示します。
  • .decode()」は応答を文字列に変換します。詳細は割愛します。

 

上記のコードは、ISS(国際宇宙ステーション)の現在位置を提供しているAPIサーバーと通信し、回答を表示します。

実行例は以下のようになります(実行する時期により結果は異なります):

$ python3 library-urllib.py

{“iss_position”: {“latitude”: “16.2786”, “longitude”: “45.1785”}, “message”: “success”, “timestamp”: 1680252914}

 

  1. まとめ

 

プログラミングに役立つライブラリを詳しく見てきました。

 

  • ライブラリはプログラムに組み込める再利用可能なコードやデータの部品です。
  • ライブラリには、動的リンク・静的リンク・共有などの種類があります。
  • ライブラリを使うと効率化できる反面、ライセンスや品質の確認は重要です。

 

さまざまな用途向けのライブラリを使えば、一からコードを書かずにアプリケーションに機能を実装する助けとなります。いくつか注意事項はありますが、ソフトウェア開発プロジェクトにとってライブラリは欠かせない存在であり、うまく活用して効率よくアプリケーションを実装する助けとしてください。