chore(composer): composer.json の残骸整理と暗黙依存の明示化#6939
Conversation
## 残骸の削除 - conflict の easycorp/easy-log-handler: 2018年に 1.0.4 回避のため追加されたが (4ae8ed9)、 Symfony 6 移行 (f547034) で本体が require-dev から削除された後も取り残されていた。 現在 lock 内のどのパッケージも require/suggest しておらず完全に不活性。 - skorp/detect-incompatible-samesite-useragents: 利用側の SameSiteNoneCompatSessionHandler が 3116014 で削除済み。SameSite 対応は Symfony ネイティブの cookie_samesite に移行済み。 - allow-plugins の kylekatarnls/update-helper: Carbon 2 時代の残骸。 Carbon 3 は要求せず lock にも存在しない。 - minimum-stability: RC: Symfony 3.3.0-rc1 時代 (014119a) の名残。 現在 lock 内の非 stable パッケージは 0 件。 - extra の symfony-web-dir / bin-dir / src-dir / config-dir / public-dir: リポジトリ内・vendor 内ともに読み手が存在しない Symfony Standard Edition 時代の遺物。 - symfony.lock の孤児レシピ 13 件 (composer.lock に存在しないもの)。 ## 暗黙依存の明示化 本体コードが直接使用しているにもかかわらず、他パッケージの内部都合で入っていたものを require に明示する。上流の依存変更で本番コードが壊れる状態だった。 - phpseclib/phpseclib: 供給元が nanasess/bcmath-polyfill のみだった。 UcpMessageSigner 等の ECDSA 署名が依存。 - justinrainbow/json-schema: 供給元が composer/composer のみだった。AcpFeedValidator が依存。 - ezyang/htmlpurifier: CsvImportController が \HTMLPurifier を型として直接指定。 ## PHP 拡張の宣言漏れ 本体コードが直接使用し、かつ vendor 側が既に require しているため 導入可能な環境が変化しないものに限って追加する。 - ext-filter: UcpProfileFetcher の filter_var による SSRF 対策 (php-cs-fixer が要求済み) - ext-tokenizer: TraitProxyAttributeDriver の PhpToken (php-cs-fixer/shim が要求済み) - ext-xml: symfony/framework-bundle 等が要求済み - ext-zlib: setasign/fpdi が要求済み sodium / bcmath など polyfill や config.platform で緩和している拡張は、 共有レンタルサーバーでの導入経路を維持するため追加しない。 パッケージのバージョン更新は発生しない (skorp の削除のみ)。 Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
📝 WalkthroughWalkthrough
ChangesComposer依存関係設定
Estimated code review effort: 2 (Simple) | ~10 minutes Suggested reviewers: 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 #6939 +/- ##
==========================================
- Coverage 75.79% 75.76% -0.04%
==========================================
Files 546 546
Lines 27136 27136
==========================================
- Hits 20569 20559 -10
- Misses 6567 6577 +10
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:
|
概要(Overview・Refs Issue)
composer.jsonに、既に使われていない項目や実態と乖離した宣言が残っていたため整理します。あわせて、本番コードが他パッケージの内部都合で入っている依存に乗っている状態を解消します。きっかけは
conflictのeasycorp/easy-log-handlerが残存していた点ですが、調査したところ同種の残骸が複数あり、より深刻な暗黙依存も見つかりました。共有レンタルサーバーでの導入経路には一切影響しません(後述の検証参照)。
方針(Policy)
1. 残骸の削除
いずれも git 履歴で「利用側が削除された後に取り残された」ことを確認しています。
conflict.easycorp/easy-log-handlerskorp/detect-incompatible-samesite-useragentsSameSiteNoneCompatSessionHandlerが 3116014 で削除済み。SameSite 対応は Symfony ネイティブのcookie_samesite: noneに移行済みallow-plugins.kylekatarnls/update-helperminimum-stability: RCextraのsymfony-web-dir/bin-dir/src-dir/config-dir/public-dirsymfony.lockの孤児レシピ 13 件symfony/security-guard(Symfony 6 で廃止)、symfony/polyfill-php72等、composer.lock に存在しないもの2. 暗黙依存の明示化(本 PR の主眼)
本体コードが直接
useしているのに、他パッケージの内部依存に相乗りしていたものをrequireに明示します。上流のマイナー更新で消えると本番コードが壊れる状態でした。phpseclib/phpseclibUcpMessageSigner等の ECDSA 署名 (3ファイル)nanasess/bcmath-polyfillのみjustinrainbow/json-schemaAcpFeedValidatorcomposer/composerのみezyang/htmlpurifierCsvImportController:98が\HTMLPurifierを型指定exercise/htmlpurifier-bundle3. PHP 拡張の宣言漏れ
本体が直接使用し、かつ vendor 側が既に require しているものに限定しました。そのため導入可能な環境は 1 つも変わりません。
ext-filterUcpProfileFetcherのfilter_varによる SSRF 対策friendsofphp/php-cs-fixerext-tokenizerTraitProxyAttributeDriverのPhpTokenphp-cs-fixer/shimext-xmlsymfony/framework-bundle等ext-zlibUcpCatalogControllerのgzencodesetasign/fpdi除外したもの
ext-sodium/ext-bcmath: sodium・bcmath 非搭載の共有レンタルサーバーが実在するため追加しません。sodium は 共有レンタルサーバー (sodium 拡張なし / CLI 不可) で API プラグインを導入できるよう composer.json に config.platform.ext-sodium を追加する #6827 のconfig.platformによる緩和を維持します。ext-pdo/ext-session/ext-phar/ext-fileinfo: 現状どのパッケージも要求しておらず、requireに書くと新たに導入不能な環境が生じるため見送りました。guzzlehttp/guzzle: 本体は未使用ですが、guzzle を自前宣言していないプラグインを壊す懸念があるため保留しました。保留・積み残しは #6940 にまとめました。
実装に関する補足(Appendix)
friendsofphp/php-cs-fixerがrequire(本番)にあるのは正しい状態です。EntityProxyServiceとReloadSafeAttributeDriverがプロキシ生成時にPhpCsFixer\Tokenizer\Tokensを実行時利用するため、require-devには移せません。同様に
symfony/debug-bundle/web-profiler-bundleはinstallenv で有効化されているため本番依存のままとしています。制約はいずれも lock を動かさない緩さにしたため、パッケージのバージョン更新は発生していません(skorp の削除のみ)。
テスト(Test)
config.platformで拡張を無効化して「拡張なしのレンタルサーバー」を再現し、composer update --dry-runで検証しました(composer check-platform-reqsはconfig.platformを無視するため使用していません)。composer updateが失敗します。ext-fileinfoをrequireに足すとexit=2で解決不能になることを確認。だからこそカテゴリ外の拡張は追加していません。その他:
composer validate→ validcomposer check-platform-reqs→ exit=0composer install --dry-run→Nothing to install, update or remove(孤児削除で再インストールが誘発されないことの確認)composer recipes→ 正常bin/console起動 → exit=0skorp/easy-log-handlerへの参照がゼロであることを確認tests/Eccube/Tests/Service/AgentCommerce/Acp→ OK (24 tests, 34 assertions)未検証:
tests/.../AgentCommerce/全体ではローカル環境の DB スキーマ未適用により 42 件エラーが出ます。内訳はすべてno such table: dtb_base_info等で、Class not found等の依存起因エラーは 0 件のため本変更とは無関係と判断していますが、DB を修復しての全件通過は未確認です。CI での確認をお願いします。相談(Discussion)
extraのsymfony-web-dir/src-dir/config-dir等は、リポジトリ内・vendor 内に読み手が見つからないため削除しました。ec-cube.co の自動インストーラ等、リポジトリ外のツールが参照していないかが未検証です。心当たりがあればご指摘ください。マイナーバージョン互換性保持のための制限事項チェックリスト
なお
skorp/detect-incompatible-samesite-useragentsを vendor から除去するため、同パッケージに依存するプラグインがあれば影響します(本体からの参照は 0 件を確認済み)。レビュワー確認項目
🤖 Generated with Claude Code
Summary by CodeRabbit