Dependabotの複数Bundlerディレクトリを1つのPRにまとめる設定
Active Adminのリポジトリで、各Gemfileディレクトリごとに個別に生成されていたDependabotのPRを、multi-ecosystem-groups機能を使って1つのPRに統合しました。これにより、複数のRailsバージョン向けGemfile更新を一括で確認・マージできるようになります。
背景
従来の .github/dependabot.yml では、ルートディレクトリ(/)と各Railsバージョン用のGemfileディレクトリ(/gemfiles/rails_70、/gemfiles/rails_71など)がそれぞれ独立した package-ecosystem: bundler エントリとして定義されていました。この構成では、各ディレクトリのGemfile更新ごとに別々のPRが作成され、レビュー・マージ作業が煩雑になっていました。
GitHubが提供する multi-ecosystem-groups 機能は、複数の package-ecosystem エントリを論理的にグループ化し、1つのPRにまとめる仕組みです。#8948 がこの機能をActive Adminに適用しています。
技術的な変更
.github/dependabot.yml にトップレベルの multi-ecosystem-groups セクションが追加され、bundlerという名前のグループが定義されました。
変更後の構成:
version: 2
multi-ecosystem-groups:
bundler:
schedule:
interval: weekly
updates:
- package-ecosystem: bundler
directory: /
versioning-strategy: lockfile-only
patterns:
- "*"
multi-ecosystem-group: bundler
- package-ecosystem: bundler
directory: /gemfiles/rails_72
versioning-strategy: lockfile-only
multi-ecosystem-group: bundler
ignore:
- dependency-name: rails
versions: ">= 7.3.0"
- dependency-name: railties
versions: ">= 7.3.0"
- package-ecosystem: bundler
directory: /gemfiles/rails_80
versioning-strategy: lockfile-only
multi-ecosystem-group: bundler
各Bundlerエントリには multi-ecosystem-group: bundler が追加され、グループへの所属が指定されました。これにより、3つのディレクトリ(/、/gemfiles/rails_72、/gemfiles/rails_80)の更新が1つのPRにまとめられます。
個別エントリから schedule と groups キーが削除されました。これらはグループレベルで定義された設定(週次スケジュール)が継承されます。一方、versioning-strategy や ignore ルールはエントリごとに保持され、各Railsバージョンの制約が維持されています。
存在しなくなった /gemfiles/rails_70 と /gemfiles/rails_71 のエントリも削除されました。現在のリポジトリ構成と設定ファイルの同期が図られています。
設計判断
グループレベルでのスケジュール一元管理 という方針が採用されました。
従来は各エントリで interval: monthly を個別に指定していましたが、グループ定義で interval: weekly に統一されました。これにより、Bundlerの更新頻度を一箇所で制御できるようになり、設定の重複が排除されています。
patterns: ["*"] の配置がルートエントリでトップレベルに移動していますが、これは記述の簡略化であり、機能的な変更ではありません。multi-ecosystem-group による統合が主目的であり、パターンマッチングのロジック自体は変わっていません。
各Railsバージョン向けの ignore ルールは個別エントリに残されました。Rails 7.2環境では7.3以降を、Rails 8.0環境では将来バージョンをブロックするという、バージョン固有の制約を保持する必要があるためです。グループ化によって失われる柔軟性を、エントリレベルの設定で補完する設計といえます。
まとめ
本PRは、Dependabotの設定をリファクタリングし、複数のBundlerディレクトリ更新を1つのPRに集約しました。multi-ecosystem-groups によるグループ化と、エントリレベルでのバージョン制約の保持を組み合わせることで、保守作業の効率化と各環境の要件維持を両立しています。存在しないディレクトリのエントリ削除も含め、設定ファイルの実態との整合性が高まりました。