ライブラリ
特定の機能を提供する再利用可能なコードの集まりで、プログラムから呼び出して使う
ライブラリとは
ライブラリ (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.json や pnpm-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 ライブラリ利用の判断
| 自作が適するケース | ライブラリが適するケース |
|---|---|
| 処理が数行で済む | 複雑なロジック (暗号化、日付計算) |
| プロジェクト固有の要件 | 汎用的な処理 |
| 依存を増やしたくない | 実績のある実装が必要 |
ライブラリの選定と依存管理の考え方は関連書籍に詳しい。
この記事は役に立ちましたか?
関連用語
依存関係
モジュールやサービスが他のモジュールやサービスに依存する関係で、結合度と変更の影響範囲を決定する
npm
Node.js のデフォルトパッケージマネージャーで、200 万以上の JavaScript パッケージの公開・インストール・管理を行う
依存管理
プロジェクトが使用する外部パッケージのバージョン管理と更新を行う仕組み
Lambda Layer
Lambda 関数間で共有ライブラリやカスタムランタイムを再利用する仕組み
サプライチェーンセキュリティ
ソフトウェアの依存関係やビルドパイプラインを通じた攻撃を防ぐセキュリティ対策
ORM
オブジェクト指向のコードとリレーショナル DB のテーブルをマッピングするライブラリ