ライブラリ

特定の機能を提供する再利用可能なコードの集まりで、プログラムから呼び出して使う

プログラミング開発手法
ライブラリ」の技術書を見る (9 冊) →

ライブラリとは

ライブラリ (Library) は、特定の機能を提供する再利用可能なコードの集まりである。自分で一から書く代わりに、ライブラリを呼び出すことで開発を効率化できる。日付の計算、HTTP 通信、データのバリデーションなど、よくある処理はライブラリとして公開されている。

ライブラリとフレームワークの違い

ライブラリとフレームワークは混同されやすいが、制御の主体が異なる。

項目ライブラリフレームワーク
制御の主体開発者がライブラリを呼ぶフレームワークが開発者のコードを呼ぶ
自由度高い (必要な部分だけ使える)低い (規約に従う必要がある)
Lodash, Axios, date-fnsNext.js, Express, Django

この違いは「制御の反転 (Inversion of Control)」と呼ばれる。ライブラリは道具箱、フレームワークは設計図に近い。

パッケージマネージャ

ライブラリの取得と管理にはパッケージマネージャを使う。

言語パッケージマネージャレジストリ
JavaScript / TypeScriptnpm, pnpm, yarnnpmjs.com
Pythonpip, poetryPyPI
Rustcargocrates.io
Gogo modpkg.go.dev
JavaMaven, GradleMaven Central
# npm でライブラリをインストール
npm install date-fns

ライブラリの選び方

ライブラリを選ぶ際は以下の観点で評価する。

観点確認方法
メンテナンス状況最終更新日、Issue の対応速度
利用者数npm の週間ダウンロード数、GitHub のスター数
ドキュメント公式ドキュメントの充実度
バンドルサイズbundlephobia.com で確認
型定義TypeScript の型が同梱されているか
ライセンスMIT, Apache 2.0 など商用利用可能か

人気があり、活発にメンテナンスされているライブラリを選ぶのが安全である。

依存関係の管理

ライブラリは他のライブラリに依存していることがある。この依存の連鎖を依存関係 (Dependency) と呼ぶ。

自分のプロジェクト
├── ライブラリ A
│   ├── ライブラリ C
│   └── ライブラリ D
└── ライブラリ B
    └── ライブラリ C (A と同じ)

パッケージマネージャが依存関係を自動で解決するが、バージョンの競合が起きることがある。package-lock.jsonpnpm-lock.yaml でバージョンを固定し、再現性を確保する。

セマンティックバージョニング

多くのライブラリはセマンティックバージョニング (SemVer) に従う。

メジャー.マイナー.パッチ
  2      .  3   .  1
変更意味
メジャー (2.x.x)破壊的変更あり
マイナー (x.3.x)後方互換の機能追加
パッチ (x.x.1)バグ修正のみ

package.json^2.3.1 はマイナーとパッチの更新を許容し、~2.3.1 はパッチの更新のみ許容する。

ライブラリのリスク

リスク対策
メンテナンス停止代替ライブラリを事前に把握
脆弱性npm audit で定期チェック
破壊的変更ロックファイルでバージョン固定
サプライチェーン攻撃信頼できるパッケージのみ使用
バンドルサイズ肥大tree-shaking 対応のライブラリを選ぶ

自作 vs ライブラリ利用の判断

自作が適するケースライブラリが適するケース
処理が数行で済む複雑なロジック (暗号化、日付計算)
プロジェクト固有の要件汎用的な処理
依存を増やしたくない実績のある実装が必要

ライブラリの選定と依存管理の考え方は関連書籍に詳しい。

この記事は役に立ちましたか?

関連用語

関連する記事