chore(dependabot): symfony/* の major を ignore しグループ漏れを解消 - #7006
Conversation
PR EC-CUBE#6981 のグループ化後、実際の更新幅が patch であるにもかかわらず symfony グループから漏れて個別 PR になるものがあった。 EC-CUBE#6998 symfony/clock 7.4.0 -> 7.4.8 (patch) EC-CUBE#6997 symfony/error-handler 7.4.8 -> 7.4.14 (patch) EC-CUBE#6996 symfony/security-http 7.4.13 -> 7.4.14 (patch) いずれも composer.json に制約を持たない間接依存で、Symfony 8.x が リリース済み (8.1.2 / 2026-07-22) のため update-type が制約外の 8.x を 基準に major と判定され、update-types: [minor, patch] のグループから 外れていた。直接依存は composer.json の制約が効くため latest 判定も 制約内に収まり、symfony/flex (2.10.0 -> 2.11.0) は正しくグループに入る。 EC-CUBE 4.4 は Symfony 7.4 系に固定しており 8.x への更新は受け付けない ため、symfony/* の major を ignore することで判定を制約内に戻す。 副作用として、独自バージョニングの symfony/flex (2.x) / symfony/monolog-bundle (3.x) / symfony/polyfill-* (1.x) / symfony/*-contracts (3.x) の major も止まる。個別に上げたいときは PR 上で `@dependabot unignore <name>` を使う。 Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
|
No actionable comments were generated in the recent review. 🎉 ℹ️ Recent review info⚙️ Run configurationConfiguration used: Organization UI Review profile: CHILL Plan: Pro Plus Run ID: 📒 Files selected for processing (1)
🚧 Files skipped from review as they are similar to previous changes (1)
📝 WalkthroughWalkthroughDependabot の Composer 設定で、 ChangesSymfony 更新ポリシー
Estimated code review effort: 1 (Trivial) | ~2 minutes Possibly related PRs
Poem
🚥 Pre-merge checks | ✅ 5✅ Passed checks (5 passed)
✨ Finishing Touches🧪 Generate unit tests (beta)
Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out. Comment |
Codecov Report✅ All modified and coverable lines are covered by tests. Additional details and impacted files@@ Coverage Diff @@
## 4.4 #7006 +/- ##
=======================================
Coverage 77.45% 77.46%
=======================================
Files 561 561
Lines 27836 27836
=======================================
+ Hits 21561 21562 +1
+ Misses 6275 6274 -1
Flags with carried forward coverage won't be shown. Click here to find out more. ☔ View full report in Codecov by Harness. 🚀 New features to boost your workflow:
|
ttokoro20240902
left a comment
There was a problem hiding this comment.
PR #7006 レビュー — chore(dependabot): symfony/* の major を ignore しグループ漏れを解消
- 対象:
EC-CUBE/ec-cube#7006(author: nanasess、base4.4、heada6012f7fb7) - 差分:
.github/dependabot.ymlのみ / +13 -0 - レビュー時点の状況: dotani1111 が APPROVED(2026-07-30 01:38)。CodeRabbit のレビューは なし(インライン指摘も 0 件)。
reviewDecisionは承認 2 件必須のためREVIEW_REQUIRED - auto-merge が有効で CI は全 pass のため、2 件目の承認が入った時点で即マージされます。指摘②③は
dependabot.ymlのコメント文言にも関わり、マージ後は別 PR が必要になるので、文言を直すかどうかのご判断をいただいてから承認します(承認を保留する目的の COMMENT で、修正リクエストではありません) - 結論: 変更内容そのものは妥当。マージ可。 ただし PR 本文の記述に事実誤りが 2 件(うち 1 件は原因説明の中核)あり、修正を提案する(コード変更は不要)
裏取りできた点(変更の妥当性)
| 検証項目 | 結果 |
|---|---|
| YAML の妥当性 | yaml.safe_load でパース成功 |
ignore の適用範囲 |
composer エントリのみ。github-actions / npm(/) / npm(/e2e) には付かないことをパース結果で確認 |
update-types の値の体系 |
version-update:semver-major(ignore 用の形式)で正しい。グループ側の major/minor/patch と混同していない |
dependency-name のワイルドカード |
symfony/* は Dependabot の dependency-name で許容される形式 |
| 本文が挙げる事例の実在 | #6996 (security-http 7.4.13→7.4.14) / #6997 (error-handler 7.4.8→7.4.14) / #6998 (clock 7.4.0→7.4.8) / #6994 (monolog-bundle 3.11.1→4.0.2) いずれも OPEN で記載どおり |
| 副作用の対象 | lock で確認: flex v2.10.0 / monolog-bundle v3.11.1 / polyfill-* v1.33〜1.38 / *-contracts v3.7.x。本文の記載と一致 |
| 直接依存への効果 | composer.json の symfony/* は 45 件、うち 41 件が ^7.4 制約(残りは flex: ^2.7 / maker-bundle: ^1.0 / monolog-bundle: ^3.1 / phpunit-bridge: ^8.1)。ignore により 8.x 系への更新提案が止まる = 「4.4 は Symfony 7.4 系に固定」の方針と一致 |
| Symfony 8 が入り得ないことの裏取り | composer.json は php: ^8.2 かつ config.platform.php: 8.2.0。一方 symfony/http-kernel v8.1.2 は php: >=8.4.1。つまり本体 8.x はそもそも解決不能で、ignore は「入り得ないものを提案対象から外す」変更(後述) |
指摘事項
| # | 重大度 | ステータス | 指摘 | 該当 | 内容(実証) | 提案 |
|---|---|---|---|---|---|---|
| 1 | 中 | 要修正(本文のみ) | 「効果の確認は次回の Dependabot 実行(月曜 07:00 JST)が必要」は誤り | PR 本文「未検証の点」 | config 変更のマージは即時再実行を起こす。 前回の #6981 は 2026-07-29(水) 07:24:39Z マージで、直後の dependabot PR は #6986 が +1分03秒(07:25:42Z)、最後の #7005 が +9分01秒(07:33:40Z)。この間に 21 本が連続作成されている。schedule は Monday 07:00 JST(= 日曜 22:00 UTC)なので、明らかに定時実行ではない | 「マージ直後に再実行されるため、数分後に結果を確認できる」に改める。確認は月曜まで待つ必要がない |
| 2 | 中 | 原因を特定(本文の因果を修正) | 「直接依存は制約が効くため latest 判定も制約内に収まる」が成立していない。本体 40+ 件が出ていない原因はこれ | PR 本文「原因」表と「相談」+**dependabot.yml の追加コメント(「composer.json に制約を持たない間接依存…」の行)** |
下記「② の調査結果」に詳述。 直接依存も update-type が major と判定されており、symfony グループ(minor/patch)に入らず個別 PR 扱いになるため、上限 10 に入りきらず全滅している。決定的な証拠は #6986(php-dev-tools グループ)に symfony/polyfill-iconv が入る一方 symfony/browser-kit(直接 require-dev・^7.4・lock v7.4.4)が入っていないこと。なお提案されるバージョン自体は 7.4.x で、8.x は config.platform.php: 8.2.0 の下では解決不能(本体 8.1.2 は php >=8.4.1)。判定だけが制約外の 8.x を基準にしている |
原因表の「直接/間接」の切り分けを「その依存の真の latest が別メジャー線かどうか」に修正する。上限引き上げは不要(本 PR の ignore で 41 件がグループ 1 本に収まるため)。「相談」は本 PR 自体で解消する見込み |
| 3 | 低 | 記述の完全性 | 副作用テーブルに symfony/maker-bundle と symfony/phpunit-bridge が漏れている |
PR 本文「副作用」表+**dependabot.yml の追加コメント(「独自バージョニングの…の major も止める」の行)** |
origin/4.4:composer.json で 7.4 系でない symfony/* 制約は flex: ^2.7 / maker-bundle: ^1.0 / monolog-bundle: ^3.1 / phpunit-bridge: ^8.1 の 4 件。lock は maker-bundle: v1.67.0 / phpunit-bridge: v8.1.1。phpunit-bridge は #6971(07-29 マージ)で 8.x に上がったばかりで、既存の dependabot.yml コメントは「本体 7.4 系に対し 8.x」であることを意図した挙動と明記している。本 ignore は今後の 9.x を止める |
表に 2 行追加。特に phpunit-bridge は「本体と系列を揃えない」方針が既にコメントで宣言されているため、major を止めてよいかを明示的に判断したい |
| 4 | 低 | 確認事項 | 既存 #6994 が ignore 適用後にどうなるかが未記載 | PR 本文「副作用」 | 「マージ前に #6994 をマージするか、後から @dependabot unignore を使う」と書かれているが、ignore 対象になった既存 PR が Dependabot に自動 close されるかは本文に記載がない。自動 close されるなら「後から unignore」は PR の再作成を依頼する手順になる |
自動 close される想定なのかを一言添える(挙動が不明なら「close される可能性がある」と留保付きで) |
| 5 | — | 誤検知(棄却) | 「#6981 で解除した ignore を再導入しているのでは」 | .github/dependabot.yml |
#6981 が削除したのは twig/twig robthree/twofactorauth doctrine/lexer psr/log sort-css-media-queries の versions: による上限指定(インストール済みが上限を超えて実効性を失っていたもの)。本 PR が追加するのは update-types による major 抑止で、種類が異なり矛盾しない |
対応不要 |
② の調査結果 — 本体 40+ 件が出ていない原因
観測事実(すべて origin/4.4 と gh で確認)
| # | 事実 | 出典 |
|---|---|---|
| 1 | Symfony 本体(7.4 系)は 51 パッケージが v7.4.0〜v7.4.14 に散在。48 件が最新(7.4.14)より古い | origin/4.4:composer.lock |
| 2 | symfony グループ PR #6988 の 8 件は flex / contracts / polyfill のみ。本体は 1 件も無い | #6988 本文 |
| 3 | php-dev-tools グループ PR #6986 に symfony/polyfill-iconv(1.33.0→1.37.0) は入るが、symfony/browser-kit(直接 require-dev・^7.4・lock v7.4.4)は入っていない。browser-kit は v7.4.14 が 2026-06-08 にリリース済み(真の latest は v8.1.1) で、更新余地があるのに提案されていない |
#6986 本文 / composer.lock / packagist |
| 4 | 本体 8.x は本プロジェクトでは解決不能。 composer.json は php: ^8.2 / config.platform.php: 8.2.0 に対し symfony/http-kernel v8.1.2 は php >=8.4.1。よって Dependabot が本体の制約を 8.x へ引き上げる提案を作ることはあり得ない |
origin/4.4:composer.json / packagist |
| 5 | symfony/phpunit-bridge だけは #6971 で ^7.4 → ^8.1(7.4.7 → 8.1.1)に上がってマージ済み(07-29 07:17)。これは phpunit-bridge 8.x が php >=8.1.0 で解決可能なためで、本体とは事情が異なる(本体の major 提案の証拠にはならない) |
#6971 / packagist |
| 6 | 本体の patch 更新は Symfony 8.0.0 リリース(2025-11-27)後も個別 PR として正常に出ていた(例: #6790 http-kernel 7.4.7→7.4.12、05-27、差分は composer.lock のみ)。提案対象は「解決可能な最新」= 7.4.x であり、8.x が出た後もそこは変わっていない |
PR 履歴 / packagist |
| 7 | composer エコシステムの open PR は 10/10。内訳はグループ 4 本(#6986 / #6988 / #6990 / #6993)+個別 6 本(#6967 / #6994 / #6995 / #6996 / #6997 / #6998) | gh pr list |
| 8 | 07-29 の実行時点の 7.4 系最新は 7.4.14(2026-06-27)。本文が挙げる 7.4.15 は 2026-07-29 11:40Z リリースで実行より後。cooldown: default-days: 5 があるため 7.4.15 は 08-03 頃まで提案対象にならない |
packagist / dependabot.yml |
判定
事実 3 が決定的である。browser-kit は require-dev なので specificity で php-dev-tools(スコア 500)に入るはずで、v7.4.4 → 7.4.14 は cooldown(5 日)も無関係に古い。それでもグループに入っていないのは、update-type が minor/patch と判定されていないことを意味する。同じグループに polyfill-iconv(真の latest が 1.x)が入っている対比が、パターンや dependency-type の問題でないことを示す。
事実 4・6 と合わせると、実際に起きているのはこうである。
- 提案されるバージョンと update-type の判定基準がずれている。 提案先は「解決可能な最新」= 7.4.x(事実 4・6)だが、update-type の判定だけが**制約外の真の latest(8.1.x)**を基準にしており major になる。
- major/minor/patch の分かれ目は「その依存の真の latest が別メジャー線かどうか」で、直接/間接ではない。 flex(2.x) / contracts(3.x) / polyfill(1.x) は真の latest が同じメジャー線上にあるため minor/patch となり、グループに入る。
- 本体(
^7.4の直接依存 41 件 + 間接依存): 真の latest が 8.x なので判定は major。symfonyグループ(update-types: [minor, patch])に入らず個別 PRが必要になり、上限 10 に入りきらず大半が出ていない。枠が空いていた 3 本だけが顔を出したのが #6996 / #6997 / #6998(いずれも提案先は 7.4.x で、判定だけ major)。 - 直接/間接で挙動が分かれていないことは事実 3(
browser-kitが直接 require-dev でありながら php-dev-tools グループに入っていない)が示す。この点が本文の原因説明と食い違う。 - なお事実 5 の
phpunit-bridgeは 8.x がphp >=8.1.0で解決可能なため実際に 8.x へ上がった唯一の例で、本体と同じ扱いにはできない。
PR 本文への影響
- 原因表の「直接依存は
composer.jsonの制約が効くため latest 判定も制約内に収まりますが、間接依存は制約がないため latest が真の最新(メジャー跨ぎ)として評価されます」は成立していない。 直接依存も major として評価されている(browser-kitが直接 require-dev なのに php-dev-tools グループから漏れている)。切り分けは「直接/間接」ではなく「その依存の真の latest が別メジャー線かどうか」。 - 「相談」の上限引き上げは不要と考えられる。 本 PR で
symfony/*の major を ignore すれば、本体の判定基準が 7.4.x に戻って patch/minor になり、個別 PR 多数ではなく symfony グループ PR 1 本に収まる。枠を消費しないので上限は現状の 10 で足りる。まず本 PR の効果を見てから判断するのが安全。 - 逆に言うと、本 PR の効果は本文が書いているより大きい(個別 PR 3 件の解消ではなく、本体 40+ 件の更新が動き出す)。マージ後に symfony グループ PR が一気に 40 件規模になることを想定しておくとよい。ただし
cooldown: default-days: 5があるため、7.4.15(07-29 リリース)は 08-03 頃までは含まれず、まずは 7.4.14 までの更新でまとまる見込み。
マージ後に確認すべきこと(本文の「テスト」節に対する補足)
指摘1のとおり、マージ直後(数分以内)に確認できる。
symfony/clock/symfony/error-handler/symfony/security-httpの個別 PR(#6996 / #6997 / #6998)が閉じ、symfony グループ PR に合流したか- #6994(monolog-bundle 4.0.2)が閉じたか
- Symfony 8.x への PR が出ていないか
- 空いた枠に何が入ってきたか(composer は 10/10 で張り付いていたため、解放分だけ抑制されていた更新が出る。総数は減らない想定)
期待どおりにならない場合の代替案(symfony グループから update-types を外す)は本文に記載済みで、判断材料として十分。
補足
- 本 PR は
dependabot.ymlのみの変更で、PHP・テンプレート・設定への波及なし。互換性・セキュリティ観点のチェックリストはいずれも該当しない。 ignoreが security update にも及ぶ点は本文で明示済み。7.4 が LTS でバックポート前提という判断も妥当。- 「update-type が制約外の latest を基準に判定される」という原因分析は
dependabot-coreの実装まで追えていない状況証拠だが、実例がすべて法則に合致しており、対策の方向(major を ignore して判定を制約内に戻す)は原因が違っても副作用が小さい。方針として問題ない。 - ignore で止まる本体 8.x は
config.platform.php: 8.2.0の下でそもそも解決できないため、本体に関しては「取りこぼす更新」が実質存在しない。副作用の実害は独自バージョニング組(monolog-bundle / flex / polyfill / contracts / maker-bundle / phpunit-bridge)に限られる。
グループ漏れの経緯説明を削り、意図のみを残す。 Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
|
@ttokoro20240902 詳細なパッケージ名まで指定すると頻繁に指摘されそうなので簡略化しました。 |
概要(Overview・Refs Issue)
#6981 でグループ化を導入した後、実際の更新幅が patch であるにもかかわらず
symfonyグループから漏れて個別 PR になるものがありました。その原因を解消します。symfony/clocksymfony/error-handlersymfony/security-http方針(Policy)
原因
グループから漏れたものと入ったものを並べると法則が出ます。
symfony/clocksymfony/error-handlersymfony/security-httpsymfony/flex^2.7)symfony/cache-contractssymfony/polyfill-php83直接依存は
composer.jsonの制約が効くため latest 判定も制約内に収まりますが、間接依存は制約がないため latest が真の最新(メジャー跨ぎ)として評価されます。 Symfony 8.x はリリース済み(8.1.2 / 2026-07-22)のため、実際の更新は親の制約内(7.4.x)に留まるのに update-type だけが major 扱いになり、update-types: [ "minor", "patch" ]のグループから外れていました。対応
EC-CUBE 4.4 は Symfony 7.4 系に固定しており 8.x への更新は受け付けないため、
symfony/*の major をignoreして判定を制約内に戻します。これにより間接依存の update-type が 7.4.x 基準(= patch)で評価され、
symfonyグループに入ることを期待しています。実装に関する補足(Appendix)
副作用: Symfony 製だが独自バージョニングのパッケージにも及びます
symfony/*は Symfony 本体(7.4 系)だけでなく、以下のような独自バージョニングのパッケージにもマッチします。これらの major も止まります。symfony/monolog-bundlesymfony/flexsymfony/polyfill-*symfony/*-contracts現実の影響は #6994 (
symfony/monolog-bundle4.0.2) のみです。この更新を入れる場合は、本 PR のマージ前に #6994 をマージするか、後から@dependabot unignore symfony/monolog-bundleを使ってください。ignoreにexclude相当の指定はないため、本体だけを対象にするには 40 以上のパッケージを個別に列挙する必要があり、現実的でないと判断しました。未検証の点
symfonyグループからupdate-typesを外す案に切り替える必要があります。dependabot-coreの latest 判定コードまでは追えていません。ignoreは security update にも適用されますSymfony 8 系のみで修正される脆弱性は拾えなくなります。7.4 は LTS でバックポートされる前提での判断です。
npm 側は対象外とします
npm でも同じ原因で 2 件漏れていますが、本 PR および今後の対応対象としません。
ajvua-parser-js判断材料として、composer 側と事情が異なる点を記録しておきます。
package.jsonに無い間接依存で、親パッケージが古い系列を固定しているため major に上げること自体が不可能です。composer 側のsymfony/*のように「4.4 は Symfony 7.4 系に固定」という明確な方針に対応する形にはなりません。npm-buildグループからupdate-typesを外せば間接依存は収容できますが、同じグループにいる直接依存のビルドツール(webpack/sass/gulp等)の major まで同じ PR に束ねられてしまいます。ignoreを使う場合は対象を個別に列挙する必要があり、間接依存は依存ツリーの変動で入れ替わるためメンテナンスが困難です。テスト(Test)
ignoreのキー名、update-typesの値(version-update:semver-major形式)をローカルで検証済み。グループ側のupdate-types(major/minor/patch形式)と値の体系が異なる点も確認しています。dependabot.ymlは既定ブランチにマージされて初めて有効になるため、実効の確認はマージ後の初回実行が必要です。確認すべき点:symfony/clock/symfony/error-handler/symfony/security-httpがsymfonyグループに入るか相談(Discussion)
composer の open PR が 10 本ちょうどで
open-pull-requests-limitに達しており、symfony/http-kernel7.4.13 → 7.4.15 など Symfony 本体 30 件以上の更新 PR が出ていません(composer update "symfony/*" --dry-runでは 40+ パッケージが問題なく解決するため、依存解決の問題ではなく枠不足です)。本 PR で個別 PR が 3 件減るぶん枠は空きますが、上限自体の引き上げが必要かどうかは別途ご判断ください。マイナーバージョン互換性保持のための制限事項チェックリスト
レビュワー確認項目
Summary by CodeRabbit