Skip to content

chore(composer): composer.json の残骸整理と暗黙依存の明示化#6939

Open
nanasess wants to merge 1 commit into
EC-CUBE:4.4from
nanasess:fix/composer-json
Open

chore(composer): composer.json の残骸整理と暗黙依存の明示化#6939
nanasess wants to merge 1 commit into
EC-CUBE:4.4from
nanasess:fix/composer-json

Conversation

@nanasess

@nanasess nanasess commented Jul 16, 2026

Copy link
Copy Markdown
Contributor

概要(Overview・Refs Issue)

composer.json に、既に使われていない項目や実態と乖離した宣言が残っていたため整理します。あわせて、本番コードが他パッケージの内部都合で入っている依存に乗っている状態を解消します。

きっかけは conflicteasycorp/easy-log-handler が残存していた点ですが、調査したところ同種の残骸が複数あり、より深刻な暗黙依存も見つかりました。

共有レンタルサーバーでの導入経路には一切影響しません(後述の検証参照)。

方針(Policy)

1. 残骸の削除

いずれも git 履歴で「利用側が削除された後に取り残された」ことを確認しています。

項目 根拠
conflict.easycorp/easy-log-handler 2018年に 1.0.4 回避で追加 (4ae8ed9) → Symfony 6 移行 (f547034) で本体のみ削除。lock 内の誰も require/suggest しておらず不活性
skorp/detect-incompatible-samesite-useragents 利用側の SameSiteNoneCompatSessionHandler3116014 で削除済み。SameSite 対応は Symfony ネイティブの cookie_samesite: none に移行済み
allow-plugins.kylekatarnls/update-helper Carbon 2 時代の残骸。Carbon 3 は要求せず lock にも不在
minimum-stability: RC Symfony 3.3.0-rc1 時代 (014119a) の名残。現在 lock 内の非 stable は 0 件
extrasymfony-web-dir/bin-dir/src-dir/config-dir/public-dir リポジトリ内・vendor 内ともに読み手が存在しない Symfony Standard Edition 時代の遺物
symfony.lock の孤児レシピ 13 件 symfony/security-guard (Symfony 6 で廃止)、symfony/polyfill-php72 等、composer.lock に存在しないもの

2. 暗黙依存の明示化(本 PR の主眼)

本体コードが直接 use しているのに、他パッケージの内部依存に相乗りしていたものを require に明示します。上流のマイナー更新で消えると本番コードが壊れる状態でした。

パッケージ 使用箇所 これまでの供給元
phpseclib/phpseclib UcpMessageSigner 等の ECDSA 署名 (3ファイル) nanasess/bcmath-polyfill のみ
justinrainbow/json-schema AcpFeedValidator composer/composer のみ
ezyang/htmlpurifier CsvImportController:98\HTMLPurifier を型指定 exercise/htmlpurifier-bundle

3. PHP 拡張の宣言漏れ

本体が直接使用し、かつ vendor 側が既に require しているものに限定しました。そのため導入可能な環境は 1 つも変わりません。

拡張 本体での使用 既存の要求元
ext-filter UcpProfileFetcherfilter_var による SSRF 対策 friendsofphp/php-cs-fixer
ext-tokenizer TraitProxyAttributeDriverPhpToken php-cs-fixer/shim
ext-xml symfony/framework-bundle
ext-zlib UcpCatalogControllergzencode setasign/fpdi

除外したもの

保留・積み残しは #6940 にまとめました。

実装に関する補足(Appendix)

friendsofphp/php-cs-fixerrequire(本番)にあるのは正しい状態です。EntityProxyServiceReloadSafeAttributeDriver がプロキシ生成時に PhpCsFixer\Tokenizer\Tokens を実行時利用するため、require-dev には移せません。

同様に symfony/debug-bundle / web-profiler-bundleinstall env で有効化されているため本番依存のままとしています。

制約はいずれも lock を動かさない緩さにしたため、パッケージのバージョン更新は発生していません(skorp の削除のみ)。

テスト(Test)

config.platform で拡張を無効化して「拡張なしのレンタルサーバー」を再現し、composer update --dry-run で検証しました(composer check-platform-reqsconfig.platform を無視するため使用していません)。

  • 追加した 4 拡張は既に必須化済みであることを実証。無効化すると本 PR 以前から composer update が失敗します。
    - setasign/fpdi require ext-zlib * -> disabled by your platform config
    - symfony/framework-bundle require ext-xml * -> disabled by your platform config
    - friendsofphp/php-cs-fixer require ext-filter * -> disabled by your platform config
    - php-cs-fixer/shim require ext-tokenizer * -> disabled by your platform config
    
  • 対照実験: polyfill を持たない ext-fileinforequire に足すと exit=2 で解決不能になることを確認。だからこそカテゴリ外の拡張は追加していません。

その他:

  • composer validate → valid
  • composer check-platform-reqs → exit=0
  • composer install --dry-runNothing to install, update or remove(孤児削除で再インストールが誘発されないことの確認)
  • composer recipes → 正常
  • bin/console 起動 → exit=0
  • 削除した skorp / easy-log-handler への参照がゼロであることを確認
  • phpseclib を直接使う 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)

extrasymfony-web-dir / src-dir / config-dir 等は、リポジトリ内・vendor 内に読み手が見つからないため削除しました。ec-cube.co の自動インストーラ等、リポジトリ外のツールが参照していないかが未検証です。心当たりがあればご指摘ください。

マイナーバージョン互換性保持のための制限事項チェックリスト

  • 既存機能の仕様変更はありません
  • フックポイントの呼び出しタイミングの変更はありません
  • フックポイントのパラメータの削除・データ型の変更はありません
  • twigファイルに渡しているパラメータの削除・データ型の変更はありません
  • Serviceクラスの公開関数の、引数の削除・データ型の変更はありません
  • 入出力ファイル(CSVなど)のフォーマット変更はありません

なお skorp/detect-incompatible-samesite-useragents を vendor から除去するため、同パッケージに依存するプラグインがあれば影響します(本体からの参照は 0 件を確認済み)。

レビュワー確認項目

  • 動作確認
  • コードレビュー
  • E2E/Unit テスト確認(テストの追加・変更が必要かどうか)
  • 互換性が保持されているか
  • セキュリティ上の問題がないか
    • 権限を超えた操作が可能にならないか
    • 不要なファイルアップロードがないか
    • 外部へ公開されるファイルや機能の追加ではないか
    • テンプレートでのエスケープ漏れがないか

🤖 Generated with Claude Code

Summary by CodeRabbit

  • 依存関係
    • 必要なPHP拡張機能の要件を追加しました。
    • HTMLサニタイズ、JSONスキーマ検証、暗号化処理などに関するパッケージを更新しました。
    • 一部の不要な競合指定およびプラグイン許可設定を削除しました。

## 残骸の削除

- 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>
@coderabbitai

coderabbitai Bot commented Jul 16, 2026

Copy link
Copy Markdown

Review Change Stack

📝 Walkthrough

Walkthrough

composer.json の必須PHP拡張とパッケージ依存関係を更新し、競合指定およびComposerプラグイン許可設定を変更した。

Changes

Composer依存関係設定

Layer / File(s) Summary
依存関係とComposer設定の更新
composer.json
必須PHP拡張とパッケージを追加・削除し、easycorp/easy-log-handler の競合指定と kylekatarnls/update-helper のプラグイン許可設定を削除した。

Estimated code review effort: 2 (Simple) | ~10 minutes

Suggested reviewers: ttokoro20240902

Poem

うさぎが跳ねて、依存を整え
拡張の鍵をそっと加え
競合の札を取り外し
プラグイン許可も軽くして
Composerの森がすっきりぴょん 🐇

🚥 Pre-merge checks | ✅ 5
✅ Passed checks (5 passed)
Check name Status Explanation
Docstring Coverage ✅ Passed No functions found in the changed files to evaluate docstring coverage. Skipping docstring coverage check.
Linked Issues check ✅ Passed Check skipped because no linked issues were found for this pull request.
Out of Scope Changes check ✅ Passed Check skipped because no linked issues were found for this pull request.
Description Check ✅ Passed Check skipped - CodeRabbit’s high-level summary is enabled.
Title check ✅ Passed composer.json の不要設定整理と暗黙依存の明示化という変更内容を的確に要約しています。
✨ Finishing Touches
🧪 Generate unit tests (beta)
  • Create PR with unit tests

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.

❤️ Share

Comment @coderabbitai help to get the list of available commands.

@codecov

codecov Bot commented Jul 16, 2026

Copy link
Copy Markdown

Codecov Report

✅ All modified and coverable lines are covered by tests.
✅ Project coverage is 75.76%. Comparing base (c29e601) to head (1f8df68).
⚠️ Report is 1 commits behind head on 4.4.

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     
Flag Coverage Δ
Unit 75.76% <ø> (-0.04%) ⬇️

Flags with carried forward coverage won't be shown. Click here to find out more.

☔ View full report in Codecov by Harness.
📢 Have feedback on the report? Share it here.

🚀 New features to boost your workflow:
  • ❄️ Test Analytics: Detect flaky tests, report on failures, and find test suite problems.
  • 📦 JS Bundle Analysis: Save yourself from yourself by tracking and limiting bundle sizes in JS merges.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant