Skip to main content

依存関係の更新をカスタマイズする

Dependabot が依存関係を維持する方法をカスタマイズできます。

この機能を使用できるユーザーについて

Users with write access

Note

この機能を使用するには、サイト管理者が お使いの GitHub Enterprise Server インスタンスの Dependabot updatesを設定する必要があります。 詳しくは、「エンタープライズ向けの Dependabot の有効化」を参照してください。

Enterprise 所有者が Enterprise レベルでポリシーを設定している場合、Dependabot updates を有効または無効にできない場合があります。 詳しくは、「エンタープライズのコード セキュリティと分析のためのポリシーの適用」を参照してください。

依存関係の更新のカスタマイズについて

バージョン アップデートを有効にすると、dependabot.yml ファイルにその他のオプションを追加することで、Dependabot を使って依存関係を維持する方法をカスタマイズできます。 たとえば、次のことが可能です。

  • バージョン アップデートの pull request をオープンする曜日を指定する (schedule.day)
  • 各パッケージ マネージャーのレビュー担当者、担当者、ラベルを設定する: reviewersassigneeslabels
  • 依存関係のグループを (パッケージ エコシステムごとに) 作成して、Dependabot が 1 つの pull request で依存関係のグループを更新できるようにする: groups
  • 各マニフェスト ファイルの変更に対するバージョン管理戦略を定義する (versioning-strategy)
  • バージョン アップデートの pull requests オープンする回数を、既定の 5 回から最大の回数に変更する (open-pull-requests-limit)
  • バージョン アップデートの pull request をオープンして、既定のブランチの代わりに特定のブランチをターゲットにする (target-branch)

構成オプションの詳細については「dependabot.yml ファイルの構成オプション」を参照してください。

リポジトリ内の dependabot.yml ファイルを更新すると、Dependabot によって、新しい構成で、すぐにチェックが実行されます。 数分以内に、 [Dependabot] タブに依存関係の更新済みリストが表示されます。リポジトリにある依存関係が多い場合は、時間がかかることがあります。 バージョン更新に関する新しいプルリクエストが表示されることもあります。 詳しくは、「バージョン更新用に設定された依存関係を一覧表示する」を参照してください。

設定変更によるセキュリティアップデートへの影響

dependabot.yml ファイルをカスタマイズしていると、セキュリティ アップデートに対して発行された pull request の変更点に気づくかもしれません。 これらのプルリクエストは、Dependabot スケジュールではなく、常に依存関係のセキュリティアドバイザリによってトリガーされます。 ただし、バージョン アップデートに別のターゲット ブランチを指定していなければ、関連する構成設定は dependabot.yml ファイルから継承されます。

例については、カスタム ラベルの設定に関する以下のセクションを参照してください。

スケジュールを変更する

アップデート スケジュールを daily に設定すると、既定の 05:00 (UTC) に Dependabot で新しいバージョンのチェックが行われます。 schedule.time を使うと、アップデートのチェックを別の時刻に指定できます (hh:mm 形式)。

次の dependabot.yml ファイルの例では、npm 構成を拡張して、Dependabot で依存関係のバージョン アップデートをチェックするタイミングを指定します。

# `dependabot.yml` file with
# customized schedule for version updates

version: 2
updates:
  # Keep npm dependencies up to date
  - package-ecosystem: "npm"
    directory: "/"
    # Check the npm registry for updates at 2am UTC
    schedule:
      interval: "daily"
      time: "02:00"

レビュー担当者とアサインされた人を設定する

デフォルトでは、Dependabot は、レビュー担当者やアサインされた人なしでプルリクエストを発行します。

reviewersassignees を使って、パッケージ マネージャーに対して発行されたすべての pull request のレビュー担当者と担当者を指定できます。 Team を指定する場合は、その Team (組織を含む) を @mentioning していたように、Team のフル ネームを使う必要があります。

次の dependabot.yml ファイルの例では、npm のバージョン アップデートとセキュリティ アップデートでオープンしたすべての pull request に 2 人のレビュー担当者と 1 人の担当者が存在するように、npm 構成を変更します。

# `dependabot.yml` file with
# reviews and an assignee for all npm pull requests

version: 2
updates:
  # Keep npm dependencies up to date
  - package-ecosystem: "npm"
    directory: "/"
    schedule:
      interval: "weekly"
    # Raise all npm pull requests with reviewers
    reviewers:
      - "my-org/team-name"
      - "octocat"
    # Raise all npm pull requests with an assignee
    assignees:
      - "user-name"

カスタムラベルを設定する

既定では、Dependabot ではすべての pull request を dependencies ラベル付きで発行します。 複数のパッケージマネージャが定義されている場合、DependabotはそれぞれのPull Requestに追加のラベルを含めます。 これは、その pull request によってどの言語またはエコシステムが更新されるかを示します。たとえば、Gradle の更新には java、Git サブモジュールの更新には submodules というようになります。 Dependabotは、リポジトリ中の必要に応じて自動的にこれらのデフォルトラベルを作成します。

labels を使うと、既定のラベルを上書きして、パッケージ マネージャーに対して発行されたすべての pull request に代替ラベルを指定できます。 dependabot.yml ファイルでは新しいラベルを作成できないため、リポジトリ内に代替ラベルが既に存在している必要があります。

次の dependabot.yml ファイルの例では、npm のバージョン アップデートとセキュリティ アップデートでオープンしたすべての pull request にカスタム ラベルが存在するように、npm 構成を変更します。 また、Docker 設定を変更して、カスタムブランチに対するバージョン更新を確認し、そのカスタムブランチに対するカスタムラベルを使用してプルリクエストを発行します。 セキュリティアップデートは常にデフォルトのブランチに対して行われるため、Docker への変更はセキュリティアップデートのプルリクエストには影響しません。

Note

新しい target-branch には、更新する Dockerfile が含まれている必要があります。含まれていない場合、この変更を行うと、Docker のバージョン アップデートが無効になります。

# `dependabot.yml` file with
# customized npm configuration

version: 2
updates:
  # Keep npm dependencies up to date
  - package-ecosystem: "npm"
    directory: "/"
    schedule:
      interval: "weekly"
    # Raise all npm pull requests with custom labels
    labels:
      - "npm dependencies"
      - "triage-board"

    # Keep Docker dependencies up to date
  - package-ecosystem: "docker"
    directory: "/"
    schedule:
      interval: "weekly"
    # Raise pull requests for Docker version updates
    # against the "develop" branch. The Docker configuration
    # no longer affects security update pull requests.
    target-branch: "develop"
    # Use custom labels on pull requests for Docker version updates
    labels:
      - "Docker dependencies"
      - "triage-board"

Dependabot updates を 1 つの pull request にグループ化する

既定では、Dependabot によって、新しいバージョンに更新する必要がある依存関係ごとに 1 つの pull request が生成されます。 groups を使って (パッケージ マネージャーごとに) 依存関係のセットを作成し、Dependabot が 1 つの pull request を開いて複数の依存関係を同時に更新できるようにします。

また、更新プログラムが特定のエコシステムに与える影響に基づいてグループ化設定を指定し、セマンティック バージョン管理 (SemVer) にフォローすることもできます。 つまり、たとえば、すべてのパッチ更新プログラムをグループ化できます。 このアプローチは、Dependabot が作成する pull request をできるだけ少なくすると同時に、問題点の原因となる可能性のある変更点を誤って承諾する可能性を減らすのに役立ちます。 パッケージが SemVer にフォローしている場合、マイナー更新プログラムとパッチ更新プログラムが下位互換性のある可能性が高くなります (ただし、保証されません)。

Note

SemVer は、x.y.z の形式でソフトウェア パッケージのバージョンを定義するための標準として認められています。 Dependabot では、この形式のバージョンは常に major.minor.patch.

Dependabot は、dependabot.yml ファイルに表示される順序でグループを作成します。 依存関係の更新が複数のグループに属している可能性がある場合、一致する最初のグループにのみ割り当てられます。

Dependabot version updates のグループのみを作成できます。 Dependabot security updates ではグループ化された更新はサポートされていません。 さらに、脆弱なパッケージに対してグループ化された pull request がある場合、Dependabot security updates は、既存のグループ pull request が同じバージョンまたはそれ以降のバージョンに対する更新である場合でも、常に個別の pull request の作成を試みます。

パッケージ エコシステムごとにグループを構成する必要があります。

groups の構成例

例 1

dependabot.yml ファイル構成では、グループに特定の依存関係を含める patterns および dependency-type オプションや、グループから依存関係 (または複数の依存関係) を除外する exclude-patterns が使用されます。

# `dependabot.yml` file using the `dependency-type` option to group updates
# in conjunction with `patterns` and `exclude-patterns`.

groups:
  production-dependencies:
    dependency-type: "production"
  development-dependencies:
    dependency-type: "development"
    exclude-patterns:
    - "rubocop*"
  rubocop:
    patterns:
    - "rubocop*"

例 2

依存関係のグループを作成するように変更された、カスタマイズされた Bundler 構成を含む dependabot.yml ファイル。 この構成では、依存関係をグループに含めるために、依存関係の名前 (または複数の依存関係) と一致する patterns (文字列) を指定します。

# `dependabot.yml` file with customized Bundler configuration
# In this example, the name of the group is `dev-dependencies`, and
# only the `patterns` and `exclude-patterns` options are used.

version: 2
updates:
  # Keep bundler dependencies up to date
  - package-ecosystem: "bundler"
    directory: "/"
    schedule:
      interval: "weekly"
    # Create a group of dependencies to be updated together in one pull request
    groups:
       # Specify a name for the group, which will be used in pull request titles
       # and branch names
       dev-dependencies:
          # Define patterns to include dependencies in the group (based on
          # dependency name)
          patterns:
            - "rubocop" # A single dependency name
            - "rspec*"  # A wildcard string that matches multiple dependency names
            - "*"       # A wildcard that matches all dependencies in the package
                        # ecosystem. Note: using "*" may open a large pull request
          # Define patterns to exclude dependencies from the group (based on
          # dependency name)
          exclude-patterns:
            - "gc_ruboconfig"
            - "gocardless-*"

例 3

dependabot.yml ファイルは、解決できる最高のバージョンが minor または patch であるパターン @angular* に一致するパッケージがグループ化されるように構成されています。 Dependabot は、パターンに一致しないパッケージ、あるいは minor または patch バージョンに更新されないパッケージに対して個別の pull request を作成します。

# `dependabot.yml` file using the `update-types` option to group updates.
# Any packages matching the pattern @angular* where the highest resolvable
# version is minor or patch will be grouped together.

version: 2
updates:
  - package-ecosystem: "npm"
    directory: "/"
    schedule:
      interval: "weekly"
    groups:
      angular:
        patterns:
        - "@angular*"
        update-types:
        - "minor"
        - "patch"

例 4

dependabot.yml ファイルでは、ignore 条件を使用して、@angular* パッケージの major バージョンに対する更新を除外します。

# `dependabot.yml` file using the `update-types` option to group updates
# in conjunction with an `ignore` condition. If you do not want updates
# to `major` versions of `@angular*` packages, you can specify an `ignore` condition.

groups:
  angular:
    patterns:
    - "@angular*"
    update-types:
    - "minor"
    - "patch"
ignore:
  - dependency-name: "@angular*"
    update-types: ["version-update:semver-major"]

dependabot.yml ファイルでの依存関係グループの構成の詳細については、「dependabot.yml ファイルの構成オプション」を参照してください。

Dependabot version updates の特定の依存関係を無視する

プロジェクト内の依存関係からの変更を採用する準備ができていない場合は、Dependabot を構成して、バージョン更新の pull request を開いたときにそれらの依存関係を無視できます。 次のいずれかの方法で実行できます:

  • dependabot.yml ファイル内の依存関係に ignore オプションを構成します。 これで、特定の依存関係、バージョン、更新プログラムの種類のアップデートを無視できます。 詳しくは、「dependabot.yml ファイルの構成オプション」を参照してください。
  • バージョン更新の Dependabot pull request で @dependabot ignore コメント コマンドを使用します。 これで、特定の依存関係およびバージョンの種類のアップデートを無視できます。 詳しくは、「依存関係の更新に関するPull Requestを管理する」を参照してください。

依存関係を無視解除する、または無視条件を解除する場合は、無視条件を dependabot.yml ファイルから削除するか、pull requestを再度開きます。

グループ化されたバージョンを更新するための pull request には、@dependabot unignore コメント コマンドを使用することもできます。 @dependabot unignore のコメント コマンドを使用すると、Dependabot pull requestにコメントを付けることで、次のことを行うことができます。

  • 特定の無視条件を無視解除する
  • 特定の依存関係を無視解除する
  • Dependabot の pull request において、すべての依存関係のすべての無視条件を無視解除する

Note

@dependabot unignore コメント コマンドは、グループ化されたバージョン アップデートの pull request でのみ機能します。

詳しくは、「依存関係の更新に関するPull Requestを管理する」をご覧ください。

その他の例

その他の例については「dependabot.yml ファイルの構成オプション」を参照してください。