メインコンテンツへスキップ
友田 陽大
Dependabot・依存関係の自動更新
Dependabot
GitHub Actions
依存関係管理
DevSecOps
サプライチェーンセキュリティ
設定ファイル

dependabot.yml 設定完全ガイド:schedule・groups・cooldown・ignore・registries・モノレポを実コードで使いこなす

GitHub の dependabot.yml を本番品質で書くための設定完全ガイド。公式の設定リファレンス(2026年6月時点)に忠実に、package-ecosystem の全対応リスト、directory と directories(グロブ)、schedule と cooldown、groups(applies-to / group-by)、allow と ignore の優先順位、registries とプライベートレジストリ認証、commit-message、target-branch、multi-ecosystem-groups までを、コピペできる実例で解説します。

公開日
読了時間
11分
著者
友田 陽大
シェア

dependabot.yml は「置けば動く」ファイルですが、雑に置くとPRが洪水になり、丁寧に書くと依存管理が静かに自動化される——その差がほぼ全部このファイルに詰まっています。この記事はDependabot 本番運用ガイドの各論として、dependabot.yml全オプションを実コードで解説します。手元に置いて引けるリファレンスとして書きました。

この記事のルール:キー名・既定値・対応エコシステムは GitHub 公式の設定リファレンス(2026年6月時点) に基づきます。Dependabot はオプション追加が速く、cooldowndirectories(グロブ)・multi-ecosystem-groups などは比較的新しい機能です。本番前に必ず公式リファレンスで最新を確認してください。


0. ファイルの場所と全体構造

設置場所はリポジトリ直下の .github/dependabot.yml(YAML)。トップレベルのキーは4つだけです。

version: 2          # 必須。現行スキーマは 2
updates:            # 必須。エコシステムごとの更新設定(配列)
  - package-ecosystem: "npm"
    directory: "/"
    schedule:
      interval: "weekly"
registries:         # 任意。プライベートレジストリの認証情報
  # ...
multi-ecosystem-groups:  # 任意。複数エコシステムを1PRに束ねる(新機能)
  # ...

updates 配列の各エントリが1つの更新ジョブです。最小単位は package-ecosystem(何を)× directory / directories(どこを)× schedule.interval(どの頻度で) の3つ。ここから肉付けしていきます。


1. package-ecosystem:対応エコシステム

package-ecosystem は更新対象のパッケージマネージャを指定します。2026年6月時点でサポートされるのは以下です(公式リスト)。

Bazel, Bundler, Bun, Cargo, Composer, Conda, Deno, Devcontainers, Docker, Docker Compose, Dotnet SDK, Elm, GitHub Actions, Gitsubmodule, Gomod, Gradle, Helm, Hex, Julia, Maven, Nix flakes, NPM and Yarn, NuGet, OpenTofu, Pip, pre-commit, Pub, Rust toolchain, sbt, Swift, Terraform, UV, vcpkg

設定ファイルに書く識別子は表記が決まっています。よく使うものを挙げます。

エコシステムpackage-ecosystem の値対象になる主なファイル
npm / yarn / pnpmnpmpackage.json, package-lock.json, yarn.lock, pnpm-lock.yaml
Python (pip/uv)pip / uvrequirements.txt, pyproject.toml, uv.lock
Go modulesgomodgo.mod, go.sum
DockerdockerDockerfile
GitHub Actionsgithub-actions.github/workflows/*.yml
Terraformterraform*.tf
RubybundlerGemfile, Gemfile.lock
RustcargoCargo.toml, Cargo.lock
Javamaven / gradlepom.xml / build.gradle

github-actions は必ず入れる:ワークフローで uses: するアクションのバージョン(特に SHA 固定)も依存です。ここを更新対象にしないと、CI に紛れ込んだ古い・侵害されたアクションに気づけません。サプライチェーン防御の観点で最優先級です。


2. directory / directories:どこを見るか

2.1 単一ディレクトリ

  - package-ecosystem: "npm"
    directory: "/"          # リポジトリ直下の package.json
    schedule:
      interval: "weekly"

2.2 複数ディレクトリ・グロブ(モノレポの主役)

directories(複数形)は配列で、しかもグロブ(* / **が使えます。モノレポで packages/a, packages/b, ... を1エントリに集約できるのが強力です。

  - package-ecosystem: "npm"
    directories:
      - "/"
      - "/apps/*"        # apps 配下の各アプリ
      - "/packages/**"   # packages 配下を再帰的に
    schedule:
      interval: "weekly"

これがない時代は、ディレクトリの数だけ updates エントリを書いていました。グロブ1行で済むのは DRY そのものです。


3. schedule:いつ動かすか

    schedule:
      interval: "weekly"      # daily / weekly / monthly / quarterly / semiannually / yearly / cron
      day: "monday"           # interval が weekly のとき
      time: "06:00"           # HH:MM(24時間制)
      timezone: "Asia/Tokyo"  # IANA タイムゾーン
  • intervaldaily / weekly / monthly に加え、quarterly / semiannually / yearly / cron も指定できます(更新頻度の柔軟化)。
  • time + timezone業務時間外に寄せると、朝イチでPRが並ぶのを避けられます。
  • セキュリティ更新はスケジュールに関わらず脆弱性検知時に動く点に注意(schedule はバージョン更新の頻度)。

実務のコツ:daily は活発なリポジトリでは多すぎることが多い。weekly + 後述の groups / cooldown から始め、滞留が出るなら頻度を上げるのが安全です。


4. groups:複数の更新を1つのPRにまとめる

PR洪水対策の本命。groups関連する更新を1本のPRに束ねます。

  - package-ecosystem: "npm"
    directory: "/"
    schedule:
      interval: "weekly"
    groups:
      # 型定義はまとめて
      types:
        patterns: ["@types/*"]
      # テスト系をまとめて
      testing:
        patterns: ["jest", "vitest", "@testing-library/*", "playwright"]
      # 上記以外の patch / minor をまとめる(major は個別PRのまま残す)
      minor-and-patch:
        update-types: ["minor", "patch"]
        exclude-patterns: ["@types/*", "jest", "vitest"]

groups 配下の各グループで使えるキー:

キー意味
patternsグループに含める依存名のパターン(* ワイルドカード可)
exclude-patternsグループから除外するパターン
applies-toversion-updates(既定)or security-updatesセキュリティ更新にもグループを効かせられる
dependency-typedevelopment or production
update-typespatch / minor / major のどれを含めるか
group-bydependency-nameモノレポでディレクトリ横断に同じ依存をまとめる

4.1 セキュリティ更新もまとめる

    groups:
      security-all:
        applies-to: security-updates   # セキュリティ更新を1PRに束ねる
        patterns: ["*"]

ただし公式の制約として、異なるエコシステムをまたいだグループ化はできず、セキュリティ更新とバージョン更新を同一PRに混ぜることもできません

4.2 モノレポでディレクトリ横断にまとめる

  - package-ecosystem: "npm"
    directories: ["/apps/*"]
    schedule:
      interval: "weekly"
    groups:
      react-across-apps:
        patterns: ["react", "react-dom"]
        group-by: "dependency-name"   # 全 app の react 更新を1PRに

5. cooldown:リリース直後を寝かせる

cooldown(新しめのオプション)は、新バージョン公開から一定日数経つまでPRを開かない緩衝材です。公開直後にyankされる版や出たての回帰を踏みにくくなります。

    cooldown:
      default-days: 7         # 既定で7日待つ
      semver-major-days: 30   # major は30日
      semver-minor-days: 14   # minor は14日
      semver-patch-days: 3    # patch は3日
      include: ["next", "react"]   # 対象を限定(最大150)
      exclude: ["@types/*"]        # 対象から除外(最大150)
  • SemVer レベルごとに待機日数を変えられます(major ほど慎重に)。
  • cooldownバージョン更新に適用され、セキュリティ更新(=急ぐ修正)には適用されません。これは合理的で、「鮮度維持は急がない、脆弱性修正は急ぐ」という運用思想と一致します。

6. allow / ignore:対象の絞り込みと除外

6.1 allow:明示的に対象にする

    allow:
      - dependency-type: "direct"      # direct / indirect / all / production / development
      - dependency-name: "express"
        # update-types で粒度も指定可

6.2 ignore:対象から外す

    ignore:
      # この依存は完全に無視
      - dependency-name: "aws-sdk"
      # major だけ無視(patch/minorは追従する)— 実務で最も使う形
      - dependency-name: "react"
        update-types: ["version-update:semver-major"]
      # 特定バージョン範囲を無視
      - dependency-name: "lodash"
        versions: [">= 5.0.0"]

優先順位(重要):ある依存が allowignore両方にマッチした場合、ignore が勝ちます(=無視される)。公式は「まず allow で対象を絞り、次に ignore で除外する。両方に該当したら ignore」と明記しています。

ignore の塩漬けに注意:「今は major を上げたくない」で ignore するのは妥当ですが、そのまま忘れると脆弱性が出たとき逃げ場がなくなりますupdate-types: ["version-update:semver-major"] のように範囲を限定し、四半期の棚卸しで見直す運用にしてください。ignore は技術的負債の隠れ家になりがちです。


7. PR の見た目と取り回し

    open-pull-requests-limit: 10        # 同時に開くPRの上限(バージョン更新の既定は5)
    target-branch: "develop"            # 既定ブランチ以外を対象にする
    labels: ["dependencies", "automerge"]   # PRに付けるラベル(既定を置き換える)
    assignees: ["your-team-lead"]       # アサイン先
    milestone: 4                        # マイルストーン番号
    commit-message:
      prefix: "chore(deps)"             # 通常依存のコミット接頭辞(最大50文字)
      prefix-development: "chore(deps-dev)"  # 開発依存用
      include: "scope"                  # スコープ(依存名)を件名に含める
    pull-request-branch-name:
      separator: "-"                    # Dependable のブランチ名の区切り文字
    rebase-strategy: "auto"             # auto / disabled / in-range
    versioning-strategy: "increase"     # エコシステム依存(lockfile-only 等も)
  • open-pull-requests-limit:バージョン更新の既定は 5。チームのレビュー処理能力に合わせる。セキュリティ更新は 10 固定(変更不可)。
  • commit-message.prefix:Conventional Commits(chore(deps):)に揃えると、semantic-release 等の自動化と相性が良い。
  • labels:既定ラベルを置き換える点に注意(追加ではない)。automerge ラベルで auto-merge ワークフローを駆動する設計も定番。
  • reviewers は非推奨化しています。レビュアー指定は CODEOWNERS やブランチ保護の必須レビューに寄せるのが現行の推奨です。

8. registries:プライベートレジストリ認証

社内レジストリ(Artifactory, GitHub Packages, npm Enterprise, プライベート PyPI など)の依存も更新できます。認証情報は絶対にハードコードせず、Dependabot シークレットで渡します

version: 2
registries:
  npm-private:
    type: npm-registry
    url: https://npm.pkg.github.com
    token: ${{secrets.DEPENDABOT_NPM_TOKEN}}   # Dependabot シークレットを参照
  python-artifactory:
    type: python-index
    url: https://artifactory.example.com/api/pypi/pypi/simple
    username: ${{secrets.ARTIFACTORY_USER}}
    password: ${{secrets.ARTIFACTORY_PASSWORD}}

updates:
  - package-ecosystem: "npm"
    directory: "/"
    schedule:
      interval: "weekly"
    registries:
      - npm-private        # この更新ジョブで使うレジストリを紐づける

ポイント:

  • ${{secrets.NAME}} で参照するのは Dependabot 専用のシークレットストアSettings → Secrets and variables → Dependabot)です。通常の Actions シークレットとは別物——侵害された依存が秘密情報を盗めないよう、Dependabot のワークフローは通常 Actions シークレットにアクセスできない設計だからです。
  • 外部から到達できないネットワーク内のレジストリは、self-hosted ランナーで Dependabot を走らせて到達します。

9. multi-ecosystem-groups:複数エコシステムを1PRに

multi-ecosystem-groups(新機能)は、異なるエコシステムの更新を横断して1つのPRにまとめる仕組みです。例えば「Docker のベースイメージと、その上で動く npm 依存を一括で上げたい」ようなケースに使います。

version: 2
multi-ecosystem-groups:
  app-stack:
    schedule:
      interval: "weekly"

updates:
  - package-ecosystem: "npm"
    directory: "/"
    multi-ecosystem-group: "app-stack"   # このジョブをグループに所属させる
  - package-ecosystem: "docker"
    directory: "/"
    multi-ecosystem-group: "app-stack"

通常の groups1エコシステム内のまとめなのに対し、multi-ecosystem-groupsエコシステムをまたぐ点が違います。乱用するとPRが巨大化してレビュー困難になるため、関連が強い組み合わせに限定するのが KISS です。


10. 完成形:実戦的な dependabot.yml(Next.js × Docker × Actions)

ここまでを束ねた、そのまま使える本番テンプレートです。

version: 2

updates:
  # ── アプリ依存(npm) ───────────────────────────
  - package-ecosystem: "npm"
    directory: "/"
    schedule:
      interval: "weekly"
      day: "monday"
      time: "06:00"
      timezone: "Asia/Tokyo"
    open-pull-requests-limit: 10
    commit-message:
      prefix: "chore(deps)"
      prefix-development: "chore(deps-dev)"
      include: "scope"
    cooldown:
      default-days: 7
      semver-major-days: 30
    groups:
      types:
        patterns: ["@types/*"]
      minor-and-patch:
        update-types: ["minor", "patch"]
        exclude-patterns: ["@types/*"]
    ignore:
      # major は人間が棚卸しで判断(patch/minor は自動追従)
      - dependency-name: "*"
        update-types: ["version-update:semver-major"]
    labels: ["dependencies"]

  # ── Docker ベースイメージ ───────────────────────
  - package-ecosystem: "docker"
    directory: "/"
    schedule:
      interval: "weekly"
    commit-message:
      prefix: "chore(docker)"

  # ── GitHub Actions(サプライチェーン防御の要) ──
  - package-ecosystem: "github-actions"
    directory: "/"
    schedule:
      interval: "weekly"
    commit-message:
      prefix: "ci"

この構成の意図:

  • patch/minor は groups でまとめて自動追従major は ignore で止めて人間が棚卸し——レビュー負荷を「中身のある変更」に集中させる。
  • cooldown で出たての回帰を回避。
  • Docker と GitHub Actions も対象に入れ、ベースイメージと CI のサプライチェーンを同時に守る。
  • コミット接頭辞を Conventional Commits に揃え、リリース自動化と整合させる。

この ignore で止めた major と groups で流す patch/minor をどう自動マージするかは、auto-merge × GitHub Actions 自動化ガイドへ。脆弱性対応の設定(grouped security updates / auto-triage)はアラート・セキュリティ更新ガイドで扱います。


11. FAQ

Q. directorydirectories はどう使い分けますか? A. 単一なら directory: "/"、複数やモノレポなら directories: ["/apps/*", "/packages/**"](グロブ可)。後者でエントリの重複を避けられます。

Q. major だけ自動更新を止めたい。 A. ignoreupdate-types: ["version-update:semver-major"] を指定します。patch/minor は追従しつつ major だけ止まります。塩漬け防止に棚卸し対象にしてください。

Q. allow と ignore が衝突したら? A. ignore が優先されます(無視される)。

Q. プライベートレジストリのトークンはどこに置きますか? A. Dependabot シークレット(Settings → Secrets and variables → Dependabot)に置き、${{secrets.NAME}} で参照します。Actions シークレットとは別ストアです。

Q. 設定が効いているか確認したい。 A. リポジトリの Insights → Dependency graph → Dependabot タブで、各エコシステムの最終実行とログを確認できます。

友田

友田 陽大

経済産業大臣賞 受賞プロダクト開発者。TypeScript + Python + AWS で、SaaS・業界DX・ 実用レベルの生成AI(RAG)を、要件定義からインフラ・運用まで一人で完遂します。

この記事の実装を、案件として承ります

依存関係の自動更新・サプライチェーン防御を、設計から本番運用まで承ります

アラート/セキュリティ更新/バージョン更新の有効化から、dependabot.yml の設計(groups・cooldown・モノレポの directories・プライベートレジストリ)、GitHub Actions と fetch-metadata による安全な auto-merge(patch/minorだけ自動・majorは人間レビュー)、深刻度別SLAを持った脆弱性対応、未対応件数の可観測化まで。CI品質ゲート(型・テスト・静的解析・セキュリティ)に依存更新を組み込んできた知見で、PR洪水を起こさず技術的負債を増やさない自動化を実装します。

プロジェクト単位(請負)・技術顧問のどちらにも対応可能です。まずは30分の無料技術相談から。

あわせて読みたい