chore(composer): 本体が使用する PHP 拡張を composer.json に宣言する (refs #6940) - #7081
Draft
ttokoro20240902 wants to merge 1 commit into
Draft
chore(composer): 本体が使用する PHP 拡張を composer.json に宣言する (refs #6940)#7081ttokoro20240902 wants to merge 1 commit into
ttokoro20240902 wants to merge 1 commit into
Conversation
|
Important Draft PR not reviewedDraft PRs are not automatically reviewed by default.
To automatically review draft PRs, update your CodeRabbit configuration: reviews:
auto_review:
drafts: trueThanks 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 #7081 +/- ##
==========================================
+ Coverage 77.67% 77.75% +0.07%
==========================================
Files 597 597
Lines 29333 29333
==========================================
+ Hits 22785 22808 +23
+ Misses 6548 6525 -23
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
force-pushed
the
fix/issue-6940-declare-php-extensions
branch
from
August 26, 2026 02:10
9bb2f48 to
dc139e9
Compare
本体が使っているのに composer.json に無く、直接依存として宣言されていない 拡張を宣言する。 - ext-pdo … TransactionListener / PluginService が getNativeConnection() の 戻りを \PDO として inTransaction() を呼ぶ。無ければ EC-CUBE が動かない - ext-session … framework.yaml が session.handler.native_file を指定する。 同様に無ければ動かない - ext-ctype … ctype_digit / ctype_xdigit を使用。symfony/polyfill-ctype が provide するため非搭載環境でも依存解決は通る - ext-fileinfo … UploadedFile::getMimeType() が finfo を使う。現状は symfony/mcp-bundle -> mcp/sdk 経由で本番側の要求が入っているが、いずれも 0.x で担保が第三者頼みなので直接依存として宣言する ext-phar は本番の要求元が無く(dev の phar-io/manifest のみ)、宣言すると これまで導入できていた環境のプラグイン導入を止める。#6827 の sodium と同じ 「CLI を持たない共有レンタルサーバーでは利用者が回避できない」問題を 作るため宣言しない。ext-libxml も直接使用が無いため見送る。 制約は polyfill の provide を満たせるよう "*" とする。composer.lock は platform セクションと content-hash のみ更新し、パッケージ版は変更しない。 Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
ttokoro20240902
force-pushed
the
fix/issue-6940-declare-php-extensions
branch
from
August 26, 2026 02:20
dc139e9 to
8281936
Compare
ttokoro20240902
added a commit
that referenced
this pull request
Sep 1, 2026
レビューでのご提案 (#7052) に対応する。sodium とは分類の理由が逆なので コメントで書き分けた。 - sodium … コアが一切使わない。 一部プラグインのみが要求する - bcmath … コアが 127 箇所 / 29 ファイルで使う (Order.php 17 / PurchaseFlow.php 9 / StockDiffProcessor.php 8 / TaxRuleService.php 6 等の 金額計算) が, nanasess/bcmath-polyfill が同名関数を提供するため 拡張が無くても動作する polyfill は関数を定義するだけで拡張は登録しないので, 正常に動作する環境でも extension_loaded('bcmath') は false を返す。必須にすると polyfill で動いている 環境に danger が出てしまうため推奨に置く。 composer.json への ext-bcmath の宣言は #6940 の項目 2 の範囲なので #7081 で扱う。 Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
概要(Overview・Refs Issue)
refs #6940(項目 2「PHP 拡張の宣言漏れ」の一部を対応します。項目 1・3・4・5 が残るため Issue は閉じません)
本体が使用しているのに
composer.jsonに無く、直接依存として宣言されていない PHP 拡張のうち、宣言しても既存環境を弾かない 4 件を宣言します。draft で出している理由
#7052(同じ #6940 の項目 3)が 8/10 から未レビューで止まっています。 同一 Issue に PR を積むよりそちらを先に進めたいので、レビュー待ちには載せていません。内容は検証済みなので、ご判断があればすぐ Ready にできます。
方針(Policy)
ext-pdoTransactionListener.php:93-95,116-119/PluginService.php:635-637,801-809がgetNativeConnection()の戻りを\PDOとしてinTransaction()を呼ぶext-sessionapp/config/eccube/packages/framework.yaml:12のhandler_id: 'session.handler.native_file'ext-ctypectype_digit()/ctype_xdigit()(UcpCatalogController.php:304/ScopeFilteringRegistry.php:104/AcpMessageSigner.php:90,92)ext-fileinfoUploadedFile::getMimeType()(ProductController.php:300/PaymentController.php:181/RefundRequestService.php:73)。symfony/mime は finfo を優先して使う制約はいずれも
"*"です(ext-ctypeはsymfony/polyfill-ctypeのprovide: {"ext-ctype": "..."}を満たす必要があるため)。#6940 が挙げた 4 件のうち
ext-pharだけ入れていない理由Issue の項目 2 は
ext-pdo/ext-session/ext-phar/ext-fileinfoの 4 件を挙げています。本 PR はext-pharを外し、代わりに Issue 本文が「polyfill が provide するので追加可能」と書いているext-ctypeを入れています。requireへの宣言は「拡張が無い環境を弾く」効果を持ちます。 宣言済みのext-zipを conf.d から外して実測しました。弾かれる場面は composer が動くときで、管理画面からのプラグイン導入も含みます。
ComposerApiService::execRequire()(:86-98)は--ignore-platform-reqsを渡していません(削除のexecRemove()(:122-125)は渡しています)。そして #6827 / #6874 が、まさにこれで踏んだ前例です。
ext-sodiumをハード要求する推移的依存のせいで sodium 非搭載の共有レンタルサーバーが API プラグインを導入できず、config.platformで緩める対処が入りました。#6827 の指摘のとおり、この層の利用者は SSH / CLI を持たないため自力で回避できません。そのうえで拡張ごとに整理すると次のとおりです。
ext-pdoext-sessionext-ctypesymfony/polyfill-ctypeが provide し、非搭載環境でも解決が通るext-pharext-pharを require するのは dev のphar-io/manifestのみ)。宣言すると、これまで導入できていた環境のプラグイン導入が止まるext-fileinfomcp/sdkv0.7.0 が本番側でext-fileinfoをハード要求済み(symfony/mcp-bundle ^0.12 → mcp/sdk ^0.7)。fileinfo 非搭載環境は現状の 4.4 をそもそも導入できないので、宣言しても弾かれる環境は増えませんext-fileinfoについては Issue 本文の「現在の要求元: なし」が古くなっています。symfony/mcp-bundleの追加後は本番依存として要求済みです。それでも直接依存として宣言するのは、担保が第三者の 0.x 頼みだからです。
symfony/mcp-bundle ^0.12とmcp/sdk ^0.7はいずれも 0.x で、composer のキャレットはマイナーを拾いません。次に上げるときにmcp/sdkがext-fileinfoの要求をやめても、本体はUploadedFile::getMimeType()で finfo を使い続けているのに担保だけ消えます。エラーメッセージがmcp/sdk v0.7.0 requires ext-fileinfoになり原因が第三者パッケージのように読める点も同じ理由です。これは #6939 が
phpseclib/phpseclib(nanasess/bcmath-polyfill経由)・justinrainbow/json-schema(composer/composer経由)・ezyang/htmlpurifier(exercise/htmlpurifier-bundle経由)を、推移的に入っていたにもかかわらず明示化したのと同じ判断です。スコープ外
ext-phar… 上記のとおり、本番で要求されていない拡張を新たに必須化するため見送り。composer.json の残課題: 拡張の宣言漏れ・システム要件の三者不一致・メジャーバージョン遅れ #6940 に判断を残しますext-libxml… 本体にlibxml_*の直接使用が無いため見送り(InstallController::$requiredModulesには載っています)ext-sodium… composer.json の残課題: 拡張の宣言漏れ・システム要件の三者不一致・メジャーバージョン遅れ #6940 項目 3 の論点で、fix(install): sodium を必須から推奨へ移し config.platform の緩和と整合させる (refs #6940) #7052 で$requiredModulesから推奨へ移す提案を出しているため触りません(同一ファイルの衝突回避も兼ねます)InstallController側の整合(項目 3)。filter/tokenizerがcomposer.jsonにあって$requiredModulesに無い逆向きの不一致も残りますdoctrine/common)・5(メジャー遅れ)は未対応テスト(Test)
宣言の追加のみで、実行時の挙動は変わりません。composer 側の検証を実測しました。
composer validate --no-check-publish./composer.json is valid(lock 警告なし)composer install --no-scripts --no-interaction --optimize-autoloader --dry-run(CI と同じ)Nothing to install, update or removecomposer check-platform-reqssuccess(ext-ctypeはprovided by symfony/polyfill-ctype)ComposerApiServiceTestcomposer.lockはplatformセクションとcontent-hashのみを更新し、パッケージのバージョンは 1 つも変えていません。これがないとcomposer installが hash 不一致の警告を出し、かつ 追加した宣言が検証されません(composer installは composer.json ではなく lock のplatformを検証します)。実装に関する補足(Appendix)
conf.dに ini が無い状態で有効)。ext-zipのように別パッケージの導入を要するものとは性質が異なりますshivammathur/setup-phpはextensions: :xdebug, redis指定のみですが、既に宣言済みでコンパイル既定に含まれないext-zipが現状の CI で通っていることから、既定で組み込まれる 4 件は問題にならない見込みです。最終確認は本 PR の CI に委ねます4.3へのバックポートは想定していませんマイナーバージョン互換性保持のための制限事項チェックリスト
4 件はいずれも「無ければ EC-CUBE が動かない」「polyfill が代替する」「既に推移的に必須」のいずれかなので、実際に弾かれる環境は想定していません。
レビュワー確認項目
🤖 Generated with Claude Code