Dependabot pull requests for grouped version updates で特定の依存関係をグループから独立したプルリクエストに分離する

Dependabot pull requests for grouped version updates で特定の依存関係をグループから独立したプルリクエストに分離する

Clock Icon2025.06.04

こんにちは、製造ビジネステクノロジー部の若槻です。

Dependabot pull requests for grouped version updates(Dependabot プルリクエストのグループ化されたバージョンアップデート) を活用すると、Dependabot が生成するプルリクエストを指定のアップデートタイプ(Semver)や依存関係名のパターンで依存関係をグループ化し、単一のプルリクエストにまとめることができます。これにより Dependabot により自動作成されるプルリクエストの数を減らし、管理の負担や CI のコストを軽減することが可能となります。

https://docs.github.com/en/code-security/dependabot/working-with-dependabot/managing-pull-requests-for-dependency-updates#managing-dependabot-pull-requests-for-grouped-updates-with-comment-commands

今回は、Dependabot pull requests for grouped version updates で特定の依存関係をグループから独立したプルリクエストに分離したいケースがあったので、その方法を確認してみました。

一部の依存関係のアップデートが原因で Dependabot のプルリクエストの CI が失敗する

下記のように npm パッケージの minor および patch バージョンのアップデートをグループ化して、単一のプルリクエストにまとめる Depenabot のグループ化設定を行っていました。

.github/dependabot.yml
version: 2
updates:
  - package-ecosystem: npm
    directory: /
    schedule:
      # MEMO: daily だとアクティブに開発をしていない期間に PR の作成頻度が過剰となるため、weekly を指定している。
      interval: weekly
    groups:
      # MEMO: 多数のプルリクエストを管理せずに済むように、メジャーバージョン以外のパッケージバージョンアップデートを単一の PR にまとめる。
      minor-and-patch:
        patterns:
          - "*"
        update-types:
          - minor
          - patch

上記設定により、minor および patch バージョンのアップデートがグループ化されたプルリクエストと、単一のパッケージのメジャーバージョンアップデートのプルリクエストが作成されています。

前者のプルリクエストでは複数の依存関係のアップデートが含まれています。

しかし、aws-cdk-lib の minor バージョンアップデートが原因でそのプルリクエストの CI(CDK スナップショットテスト)が失敗してしまいました。

一部の依存関係だけ独立したプルリクエストにする

前述のように CI 失敗の原因となる依存関係のアップデートがある場合、Dependabot のグループ化設定を下記のように変更して、その依存関係だけを独立したプルリクエストにすることができます。

設定としては、グループ化設定の exclude-patterns で特定の依存関係を除外し、さらにその除外した依存関係を独立したグループとして定義します。

.github/dependabot.yml
version: 2
updates:
  - package-ecosystem: npm
    directory: /
    schedule:
      # MEMO: daily だとアクティブに開発をしていない期間に PR の作成頻度が過剰となるため、weekly を指定している。
      interval: weekly
    groups:
      # MEMO: 多数のプルリクエストを管理せずに済むように、メジャーバージョン以外のパッケージバージョンアップデートを単一の PR にまとめる。
      minor-and-patch:
        patterns:
          - "*"
        update-types:
          - minor
          - patch
        exclude-patterns:
          # CI エラーの原因となる aws-cdk-lib のバージョンアップデートを一時的にグループから除外する。
          - "aws-cdk-lib"
      # MEMO: CI エラーの原因となる aws-cdk-lib のバージョンアップデートを一時的に単独の PR として管理する。
      temp-aws-cdk-lib:
        patterns:
          - "aws-cdk-lib"
        update-types:
          - minor
          - patch

Dependabot の設定をリポジトリに反映させるために、上記をデフォルトブランチにコミットします。

すると元々あったすべての依存関係の minor および patch バージョンアップデートをグループ化したプルリクエストはクローズされました。

そして、新しいグループ化されたバージョンアップデートのプルリクエストに加え、aws-cdk-lib の minor および patch バージョンアップデートを含む独立したプルリクエストが作成されました。

前者のプルリクエストでは、aws-cdk-lib のアップデートが除外されていることが確認できます。

そして、後者のプルリクエストでは、aws-cdk-lib のアップデートのみが含まれています。

期待通りの挙動が確認できました。除外したパッケージに起因したエラーが解決できたら、Dependabot の設定を忘れずに元に戻すようにしましょう。

上手くいかなかったパターン

次のように既存のグループ化設定の exclude-patterns で特定の依存関係を除外するだけの設定を行った場合は、期待通りの挙動になりませんでした。

.github/dependabot.yml(上手くいかないパターン)
version: 2
updates:
  - package-ecosystem: npm
    directory: /
    schedule:
      # MEMO: daily だとアクティブに開発をしていない期間に PR の作成頻度が過剰となるため、weekly を指定している。
      interval: weekly
    groups:
      # MEMO: 多数のプルリクエストを管理せずに済むように、メジャーバージョン以外のパッケージバージョンアップデートを単一の PR にまとめる。
      minor-and-patch:
        patterns:
          - "*"
        update-types:
          - minor
          - patch
        exclude-patterns:
          # CI エラーが解決できるまで一時的にグループから除外する
          - "aws-cdk-lib"

下記のようにグループ化されたバージョンアップデートのプルリクエストは作成され、aws-cdk-lib のアップデートはそこから除外されていますが、aws-cdk-lib のアップデートを含む独立したプルリクエストは作成されませんでした。


よって明示的に除外した依存関係を独立したグループとして定義する必要があるようですね。

おわりに

Dependabot pull requests for grouped version updates で特定の依存関係をグループから独立したプルリクエストに分離する方法を確認しました。

今回の対応により、例えばエラーの原因を調査している間に他の依存関係のアップデートを滞留させたくない場合などに役に立つと思います。

以上

Share this article

facebook logohatena logotwitter logo

© Classmethod, Inc. All rights reserved.