npmのmin-release-ageに合わせてdependabotを設定してみた

npmのmin-release-ageに合わせてdependabotを設定してみた

2026.03.13

はじめに

皆様こんにちは、あかいけです。

最近npm v11.10.0でmin-release-ageという機能が追加されました。
これは公開から一定日数が経過していないパッケージのインストールを防ぐことができる、サプライチェーン攻撃対策として有効な機能です。

https://docs.npmjs.com/cli/v11/using-npm/config#min-release-age
https://dev.classmethod.jp/articles/npm-v11-min-release-age/

ただ.npmrcに設定するだけでは、Dependabotが新しいバージョンのPRを作ってしまい、インストールできないバージョンへの更新PRが飛んできます。
なので今回はmin-release-ageに合わせてDependabotのcooldown設定を組み合わせることで、整合性のある依存関係管理をしてみました。

npm v11のmin-release-ageとは

npm v11.10.0で追加されたmin-release-ageは、公開から指定した日数が経過していないパッケージバージョンのインストールを防ぐ機能です。
pnpmのminimumReleaseAgeと同等の機能ですね。

設定方法は.npmrcに記載するだけです。

.npmrc
min-release-age=21

この場合、公開から21日未満のバージョンはインストール候補から除外されます。

なおコマンドラインから指定することもできます。

npm install --min-release-age=21

min-release-ageだけでは不十分?

.npmrcmin-release-ageを設定するだけで、ローカルやCI上でのnpm installは守られます。
ただそれだけだと、Dependabotとの間で不整合が生じる可能性があります。

例えば以下のようなケースです。

  • Dependabotが公開直後の最新バージョンへの更新PRを作成する
  • PRをマージしたが、min-release-ageによってnpm install時にそのバージョンがブロックされる
  • package-lock.jsonに記載されたバージョンがインストールできず、ビルドが失敗する

こうした問題を避けるために、Dependabot側にも同等の待機期間を設定する必要があります。

Dependabotのcooldown設定

2025年にDependabotにcooldown機能が追加されました。
これはパッケージの新バージョンが公開されてから、PRを作成するまでの待機期間を設定できる機能です。

cooldown 設定例
cooldown:
  default-days: 21
  semver-major-days: 21
  semver-minor-days: 21
  semver-patch-days: 21

https://github.blog/changelog/2025-07-01-dependabot-supports-configuration-of-a-minimum-package-age/

semverの種別ごとに待機日数を指定できます。
今回は.npmrcmin-release-age=21に合わせて、すべて21日間のクールダウンに統一しました。

なおsemver-XXXXX-daysが未定義の場合はdefault-daysがフォールバックとして使われるため、全種別を同じ日数にするならdefault-daysだけで十分です。
今回は設定可能なオプションの紹介も兼ねて、明示的にすべて記載しています。

設定例

ここでは個人のポートフォリオのリポジトリを例に、実際の設定内容を紹介します。

https://github.com/Lamaglama39/About-Lamaglama39

.npmrc

min-release-ageを指定するだけです。

.npmrc
min-release-age=21

.github/dependabot.yml

.github/dependabot.yml
version: 2
updates:
  - package-ecosystem: "npm"
    directory: "/"
    schedule:
      interval: "daily"
      time: "09:00"
      timezone: "Asia/Tokyo"
    open-pull-requests-limit: 10
    reviewers:
      - "Lamaglama39"
    labels:
      - "dependencies"
    commit-message:
      prefix: "chore(deps)"
    groups:
      # React関連をまとめて更新
      react:
        patterns:
          - "react"
          - "react-dom"
          - "react-router"
          - "@react-router/*"
          - "@react-three/*"
          - "three"
          - "@types/three"
      # ビルドツール関連をまとめて更新
      build-tools:
        patterns:
          - "vite"
          - "vite-*"
          - "rollup"
          - "@rollup/*"
          - "esbuild"
          - "typescript"
          - "@tailwindcss/*"
          - "tailwindcss"
      # Cloudflare関連をまとめて更新
      cloudflare:
        patterns:
          - "wrangler"
          - "@cloudflare/*"
          - "miniflare"
      # 型定義をまとめて更新
      types:
        patterns:
          - "@types/*"
        exclude-patterns:
          - "@types/three"
    versioning-strategy: "increase"
    # .npmrcのmin-release-age=21と合わせたクールダウン設定
    # セキュリティアップデートはcooldownをバイパスする
    cooldown:
      default-days: 21
      semver-major-days: 21
      semver-minor-days: 21
      semver-patch-days: 21

設定のポイントをいくつか補足します。

cooldownとmin-release-ageの日数を揃える

min-release-age=21cooldown.default-days: 21を同じ日数にすることで、DependabotがPRを作るタイミングとnpm installで実際にインストール可能になるタイミングが一致します。

グループ化でPR管理を効率化

groupsを使って関連パッケージをまとめることで、PRの数を抑えています。
cooldownを設定すると更新が溜まりやすくなるので、グループ化との相性は良いです。

今回は以下の4グループに分けました。

グループ 対象パッケージ 理由
react react, react-dom, react-router, three等 相互依存が強いのでまとめて更新
build-tools vite, typescript, tailwindcss等 ビルド周りは一括で動作確認したい
cloudflare wrangler, @cloudflare/*等 デプロイ先関連をまとめる
types @types/*(@types/threeを除く) 型定義は影響が小さいのでまとめて更新

three@types/threeは依存関係が強いため、typesグループではなくreactグループにまとめています。
typesグループ側ではexclude-patterns@types/threeを除外することで、重複を防いでいます。

versioning-strategyにincreaseを指定

versioning-strategy: "increase"を指定することで、package.jsonのバージョン制約を必要に応じて引き上げてくれます。
例えば"^1.0.0"から"^1.2.0"のように、minバージョンを上げてくれるので、CI上で古いバージョンが入ってしまうリスクを減らせます。

実際の通知

設定後、実際にDependabotからPRが作成された様子です。

スクリーンショット 2026-03-13 1.03.14

build-toolsグループとして、vite、tailwindcss等の5パッケージがまとめて更新されるPRが作成されています。
コミットメッセージにも設定したchore(deps)プレフィックスが反映されていますね。

スクリーンショット 2026-03-13 1.05.15

tailwindcssのタグページを見ると、v4.2.0のリリースは約3週間前です。
cooldownの21日間を経過してからPRが作られていることがわかります。

さいごに

以上、npmのmin-release-ageに合わせてDependabotを設定してみました。

.npmrcとDependabotの設定を揃えるだけなので、導入自体はかなり簡単です。
サプライチェーン攻撃への対策として、個人プロジェクトでもぜひ取り入れてみてはいかがでしょうか。

この記事が誰かのお役に立てば幸いです。

この記事をシェアする

FacebookHatena blogX

関連記事