Skip to content

残存する @deprecated public API の棚卸しと撤去方針の決定 #6938

Description

@ttokoro20240902

背景

#6933 / #6937 で、仕様(挙動・CSV等の出力・画面・スキーマ)を変えずに削除できる未使用の @deprecated public API は撤去済み。
本 Issue は、撤去すると仕様が変わる/利用実態が不明なため #6937 で据え置いた残りの @deprecated を棚卸しし、それぞれ「撤去 / 移行設計 / 恒久維持」を裁定するためのもの。

前提として判明している事実:

  • EC-CUBE 独自の @deprecated方針を明文化したドキュメントは存在しないCONTRIBUTING.md 等になし)。撤去タイミングを強制する仕組みもない。
  • @deprecated(PHPDoc)は実行時に E_USER_DEPRECATED を発火しないため、max[direct]=0 ゲート(improvement: deprecation ゲート有効化+未使用の非推奨 public API 削除 (#6933) #6937)では捕捉されない。撤去は個別の設計判断が要る。
  • 個々の意図は git 履歴(由来コミット/PR)から復元できる。以下はその復元結果。

残存する @deprecated#6937 適用後)

グループ シンボル 由来 現役の依存 想定される扱い
税額系 Order::getTax() / setTax() / $taxItemHolderInterface::setTax()Cart::setTax() PR #3900「add-deprecated」(2018-10) 受注CSV「税金」列(dtb_csv.csv)・PurchaseFlow.php の税額集計・dtb_order.tax カラム 「明細から算出」への移行設計が必要。7年間未実現。片手間撤去は不可
値引き Order::getDiscount() / $discount 08153d0e82「Order::getDiscountをdeprecatedに変更」(2019-08) 受注CSV「値引き」列・dtb_order.discount カラム。代替 getTaxableDiscount() は別値 税額系と同様に移行設計が必要
php_path BaseInfo::getPhpPath() / setPhpPath() / $php_path de1c4028a1「php_pathは使用していないためdeprecatedに修正」(2019-10) AuthenticationTypephp_path フォーム項目(描画テンプレートなし)・base_info.php_path カラム フォーム項目除去+カラム削除マイグレーションで撤去可能(要マイグレーション)
保守停止 ComposerProcessService(クラス) f7ed93dc4f「Add @deprecated」(2019-12) Not maintained app/config/eccube/services.yaml にサービス登録あり 利用実態の調査 → 撤去可否判断
デッド断片 DeliveryController.php:109// @deprecated 使用されていないコード 遷移元チェックの fallback 分岐 到達性を確認し、真にデッドなら整理

やること

  1. 上記各グループについて、由来 PR/コミットと現役依存を確認のうえ「撤去 / 移行設計(別Issue化)/ 恒久維持」を裁定する。
  2. 撤去可能なもの(現状 php_path が最有力)は、仕様影響(フォーム・スキーマ)を明記して別 PR で撤去(要マイグレーション)。
  3. 税額系・値引きは、CSV 出力仕様と dtb_order カラムを保ったまま「明細集計へ移行」できるかの設計 Issue を別途起票(CSV 列の算出方法・後方互換・履歴データの扱いを含む)。
  4. ComposerProcessService は利用実態を調査し、未使用なら撤去、使用中なら @deprecated の妥当性を再評価。

補足(再発防止の提案・任意)

「なぜ deprecated か分からない」を将来なくすため、@deprecated には「理由・代替 API・撤去目標バージョン」を必ず書く規約を CONTRIBUTING.md に追加することを別途検討したい(素の @deprecated を禁止)。


関連: #6933 / #6937

Metadata

Metadata

Assignees

No one assigned

    Labels

    Type

    No type

    Fields

    No fields configured for issues without a type.

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions