定期パッケージアップデートで Renovate をよく使っています。 柔軟なスケジュール管理やアップデート対象をグルーピングできたりするので便利です。が、設定がちょっと色々できるので、推奨設定や運用方法をまとめておきます。
設定例ベースで紹介していきます。
{
$schema: "https://docs.renovatebot.com/renovate-schema.json",
extends: ["config:recommended", "helpers:pinGitHubActionDigests"],
timezone: "Asia/Tokyo",
schedule: ["before 9am on Monday"],
minimumReleaseAge: "3 days",
rangeStrategy: "pin",
packageRules: [
// Python / uv
{
matchUpdateTypes: ["minor", "patch"],
matchDepTypes: ["project.dependencies"],
groupName: "python dependencies",
groupSlug: "python-dependencies",
},
{
matchUpdateTypes: ["minor", "patch"],
matchDepTypes: ["dependency-groups"],
groupName: "python dev dependencies",
groupSlug: "python-dev-dependencies",
},
// Node.js / NPM
{
matchManagers: ["npm"],
matchUpdateTypes: ["patch", "minor"],
matchDepTypes: ["devDependencies"],
groupName: "NPM dev dependencies",
groupSlug: "npm-dev-dependencies",
},
// PHP / Composer
{
matchManagers: ["composer"],
matchUpdateTypes: ["patch", "minor"],
matchDepTypes: ["require"],
groupName: "Composer dependencies",
groupSlug: "composer-dependencies",
},
{
matchManagers: ["composer"],
matchUpdateTypes: ["patch", "minor", "major"],
matchDepTypes: ["require-dev"],
groupName: "Composer dev dependencies",
groupSlug: "composer-dev-dependencies",
},
// PHP/MySQLのメジャー・マイナーバージョンのPRは作成しない
{
matchPackageNames: ["php", "mysql"],
matchUpdateTypes: ["major", "minor"],
enabled: false,
},
// LaravelのメジャーバージョンのPRは作成しない
{
matchUpdateTypes: ["major"],
enabled: false,
matchPackageNames: ["/laravel/framework/"],
},
],
}
json5を使う
初っ端から設定項目の話じゃないんですが、設定ファイルとしてjsonではなくjson5 ( renovate.json5
)を使いましょう。
コメントが書けたり色々使い勝手が良いです。
一応Renovateの仕様上は .json
でもコメントが書けるようなのですが、json5の拡張子にしておいたほうがIDEのサポートも受けられるため明示的に指定したほうが良いです。
共通系と開発系は分ける
共通系( require
dependencies
など)は本番影響があり、開発系( require-dev
devDependencies
など)は開発ツールなど本番影響がないのでマージしたときのリスクやPRの検証レベル感が変わります。ということで、PRを分けておくと運用しやすいです。開発系は automerge
を有効にしても良いんですが、個人的には何の機能追加・不具合修正がされていたかを確認したい気持ちもあるのであえて有効にしてなかったりします。
minimumReleaseAge を設定する
ゼロデイな脆弱性もあるため必ず設定しておきます。3日が妥当かわからないので、様子を見つつ。
こういう運用してます例
週1回RenovateにPRを作ってもらってそれをチーム内で担当をランダムにdispatchして各自PRのレビュー・マージ・リリースしてます。
頻度を高くするとPRが多くなってコンテキストスイッチもかかってしまうのと、週1回程度であれば忘れない範囲で各自運用し続けられたり、アップデートされるパッケージの量もレビューできる範囲に収まることが多いので、この頻度にしています。