Skip to main content

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

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

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

People with write permissions to a repository can configure Dependabot for the repository.

注: この機能を使用するには、サイト管理者が お使いの 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 ファイルから継承されます。

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

注: グループ化されたセキュリティ アップデートを使用する場合、グループ化された pull request は dependabot.yml ファイルから非グループ構成設定も継承し、applies-to: security-updates で指定されたグループ ルールが適用されます。 詳しくは、「Dependabot のセキュリティ アップデート」を参照してください。

スケジュールを変更する

アップデート スケジュールを 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 への変更はセキュリティアップデートのプルリクエストには影響しません。

注: 新しい 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 に従っている場合、マイナー更新プログラムとパッチ更新プログラムが下位互換性を持つ可能性が高くなります (ただし、保証はありません)。

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

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

dependabot.yml ファイルを使用して、Dependabot version updates と Dependabot security updates をグループ化する個別のルールを作成できます。

注: Dependabot version updates のグループ化された pull request に脆弱なパッケージが含まれている場合でも、Dependabot security updates は、脆弱なパッケージを安全なバージョンに更新するための_個別の_ pull request の作成を試みます。 セキュリティ更新プログラムの個別の pull request を作成すると、パッケージの脆弱性を確実に把握できます。

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

groups の構成例

例 1

dependabot.yml ファイル構成では、グループに特定の依存関係を含める patterns および dependency-type オプションや、グループから依存関係 (または複数の依存関係) を除外する exclude-patterns が使用されます。グループ化ルールは、applies-to キーが存在しないため、既定でバージョン更新にのみ適用されます。

# `dependabot.yml` file using the `dependency-type` option to group updates
# in conjunction with `patterns` and `exclude-patterns`.
# Grouping rules default to applying to version updates only, since
# the `applies-to` key is absent.

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

例 2

依存関係のグループを作成するように変更された、カスタマイズされた Bundler 構成を含む dependabot.yml ファイル。 この構成では、依存関係をグループに含めるために、依存関係の名前 (または複数の依存関係) と一致する patterns (文字列) を指定します。グループ化ルールは、applies-to: version-updates が使用されているため、バージョン更新にのみ適用されます。

# `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.
# Grouping rules apply to version updates only.

version: 2
updates:
  # Keep bundler dependencies up to date
  - package-ecosystem: "bundler"
    directories:
      - "/frontend"
      - "/backend"
      - "/admin"
    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)
          applies-to: version-updates # Applies the group rule to version updates
          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 を作成します。グループ化ルールは、applies-to: version-updates が使用されているため、バージョン更新にのみ適用されます。

# `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.
# Grouping rules apply to version updates only.

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

例 4

dependabot.yml ファイルでは、ignore 条件を使用して、@angular* パッケージの major バージョンに対する更新を除外します。バージョン更新用とセキュリティ アップデート用の 2 つのグループ化ルールが指定されています。

# `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.
# Grouping rules for both version updates and security updates are specified.

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

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

Dependabot 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 において、すべての依存関係のすべての無視条件を無視解除する

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

その他の例

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