ライブラリ

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

プログラミング開発手法

ライブラリとは

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

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

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

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

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

パッケージマネージャ

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

言語 パッケージマネージャ レジストリ
JavaScript / TypeScript npm, pnpm, yarn npmjs.com
Python pip, poetry PyPI
Rust cargo crates.io
Go go mod pkg.go.dev
Java Maven, Gradle Maven 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 ライブラリ利用の判断

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

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

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

関連用語

関連する記事