
目次
Renovateは、依存パッケージの更新を自動化するツールです。各依存パッケージのバージョンアップを検知し、更新用のプルリクエストを自動で作成します。
Renovateはデフォルトで以下のように動作します。
- 最大10個のプルリクエストを同時に作成する
- ベースブランチへのコミットを検知し、自動でリベースする
これらは便利な反面、プルリクエストの作成やリベースをトリガーとするCIが過剰に実行されることにも繋がります。
そこで本記事では、Renovateの設定を調整してCI実行回数を削減する方法を解説します。
実装例
実際に弊事務所のプロジェクトで使用している設定を紹介します。
{ "$schema": "https://docs.renovatebot.com/renovate-schema.json", "extends": ["config:best-practices"], "prConcurrentLimit": 1, "prHourlyLimit": 0, "rebaseWhen": "never"}
この設定により、以下の効果が得られます。
- 同時に存在するプルリクエストを1つに制限
- 自動リベースによる無駄なCI実行を防止
各設定項目について詳しく見ていきます。
設定項目の詳細
prConcurrentLimit
:同時プルリクエスト数の制限
"prConcurrentLimit": 1
Renovateが同時に作成・管理するプルリクエストの数を制限します。
1
に設定することで、同時に存在するプルリクエストを最大1つに制限します。新しい更新が検出されても、現在のプルリクエストがマージまたはクローズされるまで次のプルリクエストは作成されません。
prHourlyLimit
:時間あたりのプルリクエスト作成数
"prHourlyLimit": 0
1時間あたりに作成できるプルリクエストの上限を設定します。
0
に設定すると、時間あたりの制限が無効化されます。
時間制限を設けないことで1つのプルリクエストが完了次第すぐに次のプルリクエストを作成できるようにし、更新の遅延を防ぎます。
rebaseWhen
:リベース戦略の設定
"rebaseWhen": "never"
プルリクエストのリベース戦略を制御する設定です。
デフォルトでは、ベースブランチが更新されるたびにプルリクエストが自動的にリベースされます。リベースのたびにCIが再実行されるため、CI実行回数が増加してしまいます。
"never"
に設定することで、自動リベースを無効化します。これにより無駄なCI実行を削減できます。
ただし、コンフリクトが発生した場合やマージ前に最新化が必要な場合は手動でリベースする必要があります。
さらなる最適化:パッケージのグループ化
今回紹介した設定に加えて、関連パッケージをグループ化することでさらにCI実行を削減できます。
{ "packageRules": [ { "matchPackagePatterns": ["^eslint"], "groupName": "eslint packages" } ]}
この設定により、関連性の高いパッケージを1つのプルリクエストにまとめることができます。ESLintなど関連パッケージが複数ある場合は、設定するとさらにCI実行回数を削減できます。
まとめ
Renovateの設定を適切に調整することで、CI実行回数を大幅に削減できます。今回紹介した設定を参考に、プロジェクトに合うよう調整してみてください。