依存管理

プロジェクトが使用する外部パッケージのバージョン管理と更新を行う仕組み

開発ツールセキュリティ

依存管理とは

依存管理 (Dependency Management) は、プロジェクトが使用する外部パッケージ (npm, pip) のバージョン管理、更新、脆弱性対応を行う仕組みである。

package.json と lockfile

// package.json: バージョン範囲を指定
{ "dependencies": { "express": "^4.18.0" } }

// package-lock.json: 正確なバージョンを固定
{ "express": { "version": "4.18.2", "resolved": "https://..." } }
ファイル 役割
package.json バージョン範囲の宣言
package-lock.json 正確なバージョンの固定
node_modules/ 実際のパッケージ (Git に含めない)

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

MAJOR.MINOR.PATCH
  2.    1.    3

^2.1.32.x.x (MINOR, PATCH の更新を許可)
~2.1.32.1.x (PATCH の更新のみ許可)
2.1.32.1.3 (完全固定)

npm ci vs npm install

コマンド 用途
npm install 開発時 (lockfile を更新する場合がある)
npm ci CI/CD (lockfile と完全一致、高速)

脆弱性の管理

# 脆弱性のチェック
npm audit

# 自動修正
npm audit fix

# Dependabot で自動 PR
# .github/dependabot.yml

依存の更新戦略

Dependabot や Renovate で自動的に更新 PR を作成するのが効率的だ。手動で npm update を定期的に実行する方法もあるが、自動化が推奨される。ロックファイルの更新は npm update --save で行う。

依存の最小化

1 行の関数のためにパッケージを追加
   npm install left-pad  (有名な事件)

✅ 標準ライブラリで代替できないか確認
   "hello".padStart(10)  // left-pad 不要

Lambda での依存管理

# SAM: esbuild でバンドル (node_modules を含めない)
Metadata:
  BuildMethod: esbuild
  BuildProperties:
    Minify: true
    External: ['@aws-sdk/*']  # Lambda に含まれる SDK は除外

Lambda Layer で共通の依存パッケージを共有し、デプロイサイズを削減する。

現場での応用を知るには関連書籍も役立つ。

関連用語