はじめに
Dependabot とは、GitHubが提供するセキュリティツールです。リポジトリの依存関係を監視し、脆弱性のあるパッケージや古いバージョンを検知して自動でプルリクエストを作成してくれます。

実際に Dependabot を使って、脆弱性のあるパッケージを自動アップデートしてみましょう。 まずは、dependabot の設定ファイルを以下のように作ってみます。
version: 2
updates:
# Enable version updates for npm
- package-ecosystem: "npm"
directory: "/"
# Check the npm registry for updates at 09:00 JTC 00:00 UTC on Monday
schedule:
interval: "weekly"
day: "monday"
time: "00:00"
open-pull-requests-limit: 5
# Add labels to pull requests
labels:
- "dependencies"
- "npm"
# Enable version updates for GitHub Actions
- package-ecosystem: "github-actions"
directory: "/"
# Check for updates at 09:00 JTC (00:00 UTC) on Monday
schedule:
interval: "weekly"
day: "monday"
time: "00:00"
open-pull-requests-limit: 3
# Add labels to pull requests
labels:
- "dependencies"
- "github-actions"
# Assign Dependabot as a reviewer for consistency
assignees:
- "dependabot[bot]"
reviewers:
- "dependabot[bot]"
これで、Dependabot によって PR が自動で作成されるようになります。 この段階だと PR が作成されるだけなので、手動でPRをマージする必要があります。 これを自動化するため、GitHub Actions で自動マージされるように設定します。
name: Dependabot auto-merge
on: pull_request_target
permissions:
pull-requests: write
contents: write
jobs:
dependabot:
runs-on: ubuntu-latest
if: ${{ github.actor == 'dependabot[bot]' }}
steps:
- name: Dependabot metadata
id: metadata
uses: dependabot/fetch-metadata@v2
- name: Enable auto-merge for Dependabot PRs
if: ${{steps.metadata.outputs.update-type == 'version-update:semver-patch'}}
run: gh pr merge --auto --merge "$PR_URL"
env:
PR_URL: ${{github.event.pull_request.html_url}}
GITHUB_TOKEN: ${{secrets.GITHUB_TOKEN}}
ポイントは、
- dependabot が作成した PR のみ対象とする
if: ${{ github.actor == 'dependabot[bot]' }}
- アップデート対象が patch の場合のみ自動マージする
if: ${{steps.metadata.outputs.update-type == 'version-update:semver-patch'}}
です。アップデート対象について、他には version-update:semver-minor, version-update:semver-major が指定可能です。
なお、pull_request_target は、pull_requst イベントが PR ブランチのワークフローを実行するのに対し、こちらはベースブランチのワークフローを実行するイベントになります。PRで悪意のあるCIワークフローが実行されないよう、public リポジトリではこちらのイベントを利用するべきでしょう。

このままだとバージョンアップによってビルドやテストがコケても自動マージしてしまいます。
対象のリポジトリのページから、 Settings > Rules > Rulesets > New ruleset から新規のルールを作成します。 以下の Require status checks to pass にチェックをつけましょう。

- Require branches to be up to date before merging
- マージする前にブランチを最新化します。
- このチェックがない場合、「PRが作成された時点のコードではテストが通るが、デフォルトブランチの最新コードではテストが通らない」ケースを検知できません。チェックしておくべきでしょう。
- Do not require status checks on creation
- ブランチ(や PR)が作られた時点では、ステータスチェックを必須にしない、というものです。
- push 後にしか CI が動かないケースなど、ステータスチェックの制限によってPRがマージができないことを防ぐためのオプションです。
おわりに
Dependabot は、非常に便利なツールです。脆弱性の早期発見とパッケージの定期的なアップデートを自動化することで、セキュリティと保守性を大幅に向上させることができます。
無料で簡単に使えるツールなので、ぜひ積極的にご利用ください。