★★ 中級

11. Dependabot / Renovate

provider・module・GitHub Actions の バージョンアップを自動 PR 化。手動更新の漏れと「気づいたら 2 メジャーバージョン落ち」を防ぎます。

なぜ自動更新するか

Dependabot vs Renovate

DependabotRenovate
提供元GitHub NativeMend Renovate(外部、無料)
セットアップファイル 1 つRenovate App をインストール + 設定
Terraform provider対応対応 + より細かい制御
module(Git URL)限定的柔軟
group 化限定的強力(同一系統の更新を 1 PR に)
スケジューリングdaily / weekly自由(cron 式)
初学者向けこちら慣れたらこちら

Dependabot 設定

.github/dependabot.yml を置くだけ。

version: 2
updates:
  # Terraform provider と module
  - package-ecosystem: "terraform"
    directory: "/"        # ルート(複数なら別エントリで)
    schedule:
      interval: "weekly"
      day: "monday"
      time: "09:00"
      timezone: "Asia/Tokyo"
    open-pull-requests-limit: 5
    commit-message:
      prefix: "chore(deps)"
      include: "scope"
    labels:
      - "dependencies"
      - "terraform"

  # 各環境ディレクトリも個別に
  - package-ecosystem: "terraform"
    directory: "/envs/dev"
    schedule: { interval: "weekly" }

  - package-ecosystem: "terraform"
    directory: "/envs/stg"
    schedule: { interval: "weekly" }

  - package-ecosystem: "terraform"
    directory: "/envs/prd"
    schedule: { interval: "weekly" }

  # GitHub Actions のバージョン
  - package-ecosystem: "github-actions"
    directory: "/"
    schedule:
      interval: "weekly"
    commit-message:
      prefix: "chore(ci)"

これを置くと、毎週月曜 09:00 (JST) に provider / module / actions の更新 PR が自動で立つ。

Renovate 設定

Renovate は Renovate Bot を GitHub App としてリポジトリに権限付与。renovate.json を root に。

{
  "$schema": "https://docs.renovatebot.com/renovate-schema.json",
  "extends": [
    "config:recommended",
    ":dependencyDashboard",
    ":timezone(Asia/Tokyo)"
  ],
  "schedule": ["before 9am on monday"],
  "labels": ["dependencies"],
  "terraform": {
    "fileMatch": ["\\.tf$", "\\.tofu$"]
  },
  "packageRules": [
    {
      "description": "AWS provider はパッチだけ自動マージ",
      "matchManagers": ["terraform"],
      "matchPackagePatterns": ["hashicorp/aws"],
      "matchUpdateTypes": ["patch"],
      "automerge": true
    },
    {
      "description": "minor 以上は人間レビュー",
      "matchManagers": ["terraform"],
      "matchUpdateTypes": ["minor", "major"],
      "automerge": false,
      "reviewers": ["your-org/sre"]
    },
    {
      "description": "GitHub Actions の minor / patch は自動マージ",
      "matchManagers": ["github-actions"],
      "matchUpdateTypes": ["minor", "patch"],
      "automerge": true
    }
  ]
}

Dependency Dashboard

Renovate は「保留中の更新一覧」を Issue として自動作成し、進捗を可視化してくれる。便利。

自動 merge とテスト

パッチアップデートは安全性が高いので「CI 通れば自動で merge」も検討。GitHub Actions と組み合わせて:

name: Auto-merge dependabot PRs

on:
  pull_request:
    branches: [main]

permissions:
  contents: write
  pull-requests: write

jobs:
  automerge:
    runs-on: ubuntu-latest
    if: github.actor == 'dependabot[bot]'
    steps:
      - uses: dependabot/fetch-metadata@v2
        id: meta

      # patch / minor のみ自動 merge
      - run: gh pr merge --auto --squash "$PR_URL"
        if: contains(fromJSON('["version-update:semver-patch","version-update:semver-minor"]'), steps.meta.outputs.update-type)
        env:
          PR_URL: ${{ github.event.pull_request.html_url }}
          GH_TOKEN: ${{ secrets.GITHUB_TOKEN }}
本番直結リポジトリでは慎重に Auto-merge を本番 IaC リポジトリに入れる場合、必ず CI で terraform plan を通し、destroy が出ないことを 機械的に確認 する仕組み(plan diff チェッカー等)を併設する。