⚙️

Renovateで依存ライブラリを自動更新する

に公開

この文章を書く動機

RenovateをGitHubのリポジトリに導入する手順を備忘録として残すこと。

この文章のゴール

Renovateを利用して依存ライブラリを管理する手間を減らすこと。

Renovateとは

依存ライブラリを自動で更新するためのツールである。GitHub Appsとしてリポジトリにインストールして利用することができる。オープンソースであり、無料で利用することができる。

PHP, Go, Java,Docker等複数の言語の依存ライブラリに対応している。更新の頻度や更新対象のライブラリを自由にカスタマイズすることも可能である。

導入手順

1. GitHub AppsにRenovateを追加する

  1. GitHub MarketplaceのページでInstallボタンをクリックする。
  2. Install Renovate画面でインストール先リポジトリを選択してInstallボタンをクリックする。自分のアカウントと紐づく全リポジトリにインストールすることもできるが今回は特定のリポジトリだけを選択する。
  3. 以下のような画面が表示されれば成功

2. Renovateの設定ファイルをリポジトリに組み込む

Renovateをインストールするとセットアップ用のPRが作成される。このPRをマージしてrenovate.jsonがデフォルトブランチに入るとRenovateを使う準備が完了する。

設定

デフォルト設定

デフォルトのrenovate.jsonでもよしなに依存ライブラリをアップデートしてくれる。

{
  "$schema": "https://docs.renovatebot.com/renovate-schema.json",
  "extends": [
    "config:recommended"
  ]
}
  • "$schema": "https://docs.renovatebot.com/renovate-schema.json": このJSONファイルがRenovateのスキーマに従うことを示す。編集時に構文や設定項目が正しいかIDEがチェックしてくれる。
  • "extends": ["config:recommended"]: Renovateの推奨設定を継承する。(設定項目の詳細は後述)

カスタマイズする

デフォルト設定でもおおむね問題ないが、今回は少し設定をカスタマイズしてみる。
以下のように設定ファイルを編集した。

{
  "$schema": "https://docs.renovatebot.com/renovate-schema.json",
  "extends": [
    "config:recommended"
  ],
  "ignorePresets": [
    ":prHourlyLimit2"
  ],
  "timezone": "Asia/Tokyo",
  "automerge": false,
  "branchConcurrentLimit": 0,
  "enabledManagers": [
    "github-actions",
    "dockerfile"
  ],
  "packageRules": [
    {
      "groupName": "github-actions",
      "matchManagers": ["github-actions"],
      "commitMessagePrefix": "chore(deps): ",
      "schedule": ["on saturday"]
    },
    {
      "groupName": "Dockerfile",
      "matchManagers": ["dockerfile"],
      "matchUpdateTypes": ["minor", "patch"],
      "commitMessagePrefix": "chore(deps): ",
      "schedule": ["on saturday"]
    }
  ]
}

共通設定
  • "ignorePresets": [":prHourlyLimit2"]: 1時間に2PRに制限する設定を無効化
  • timezone": "Asia/Tokyo": タイムゾーンをAsia/Tokyoに設定
  • "automerge": false,: 自動マージを無効化
  • "branchConcurrentLimit": 0: 同時に作成されるブランチ数の制限を無効化
    • 無制限にしていると、Renovateの処理時間が長くなる恐れがある。必要に応じて値を減らす。(公式ドキュメントでは3~5が推奨されている。)
  • "enabledManagers": ["github-actions", "dockerfile"],: 依存関係自動更新を有効化するパッケージマネージャを指定する。
依存ライブラリ毎の設定
  • commitMessagePrefix": "chore(deps): ": コミットメッセージのprefixをchore(deps): とする
  • "schedule": ["on saturday"]: 毎週土曜日にRenovateを実行する

真面目にやればもっと凝った設定にできるが、依存関係の自動更新さえできればよいのでToo muchにならないようにしておく。

余談

config:recommendedは以下のような設定になっている。

{
  "extends": [
    ":dependencyDashboard",
    ":semanticPrefixFixDepsChoreOthers",
    ":ignoreModulesAndTests",
    "group:monorepos",
    "group:recommended",
    "mergeConfidence:age-confidence-badges",
    "replacements:all",
    "workarounds:all"
  ]
}

Discussion