Skip to content

4.2系をphp8.1 ~ 8.3へ対応#6736

Open
dotani1111 wants to merge 7 commits into
EC-CUBE:4.2-php83from
dotani1111:maintenance/4.2-php8.3
Open

4.2系をphp8.1 ~ 8.3へ対応#6736
dotani1111 wants to merge 7 commits into
EC-CUBE:4.2-php83from
dotani1111:maintenance/4.2-php8.3

Conversation

@dotani1111
Copy link
Copy Markdown
Contributor

概要(Overview・Refs Issue)

EC-CUBE 4.2 ブランチにおいて、PHP 8.3 対応および PHP 7.4 サポート廃止を行う。
PHP 7.4 は 2022年11月に公式サポートが終了しており、ec-cube.co でもサポート外となっているため、4.2 メンテナンスブランチでも対応を廃止する。

方針(Policy)

  • PHP の最低要件を ^8.1 に引き上げ、PHP 8.3 までの動作を保証する
  • PHP 8.2+ で非推奨となった構文や挙動の変更に追随し、言語レベルでの互換性を担保する
  • Twig 3.24・新しい DoctrineBundle・Symfony の変更点にも追随して安定稼働させる
  • CI(GitHub Actions)上で PHP 8.3 環境を含むテストが安定して通過することを確認する

実装に関する補足(Appendix)

  • composer.jsonrequire.php^8.1config.platform.php8.1.0 に更新。laminas/laminas-code が 4.7.1 → 4.16.0 に更新され、PHP 8.3 環境でのプラグインインストールテストが composer の platform 制約に引っかからなくなる
  • PHP 8.2 で非推奨となった ${var} 形式の文字列補間を {$var} に一括置換(Command / Controller / Service / Util / Doctrine Query)
  • Eccube\Twig\Environment を追加し、Twig 3.24 の抽象クラスとの戻り値型整合・テンプレートキャッシュ周辺を修正。TwigExtensionPass でカスタム Environment を DI に差し替え
  • Kernel::loadEntityProxies() および ReloadSafeAnnotationDriver に、同一プロセス内でエンティティクラスが複数回ロードされた際のプロキシ二重定義 Fatal error を防ぐガードを追加
  • EccubeExtension::prepend() で DoctrineBundle の default_connection が未設定のケースへのフォールバック解決を追加(新しい DoctrineBundle バージョンで補完タイミングが変わったことへの対応)
  • chromeOptions を W3C 対応の goog:chromeOptions に変更
  • behat/gherkin の PSR-4 レイアウト変更により Codeception 4 が i18n.php を解決できなくなる問題を codeception-gherkin-i18n-path.patch で補正

テスト(Test)

ローカル / CI での動作確認

  • GitHub Actions 上で PHP 8.1 / 8.2 / 8.3 × MySQL / PostgreSQL の全組み合わせでユニットテストがパスすることを確認
  • Codeception による E2E(受け入れ)テストを PHP 8.3 + Chrome 環境で実行し、主要な管理画面操作(受注CSV・会員CSV・ファイルマネージャー等)が正常に動作することを確認

テストコードの変更内容

  • 既存ユニットテストの PHP 8.x / Symfony 新バージョン互換対応(シグネチャ修正、動的プロパティ削除等)
  • カテゴリ登録テスト用フィクスチャ(categories.csv)を追加
  • UpdateSchemaDoctrineCommandTest にて Kernel reboot によるテスト間の状態分離を追加

未確認・レビュワーに確認をお願いしたい範囲

  • プラグインインストールを伴う結合テストは CI 上でのみ確認しており、実機での動作は未確認
  • Twig 3.24 の Sandbox 挙動変更がサードパーティ製プラグインに影響しないか

相談(Discussion)

  • Twig 3.24 の Sandbox 挙動変更に伴う IgnoreTwigSandboxErrorExtensionTest の修正内容がプラグインの互換性に影響しないか確認をお願いしたい

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

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

レビュワー確認項目

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

PHP 7.4 は 2022/11 に公式サポートが終了しており、ec-cube.co でも
サポート外となっているため、4.2 メンテナンスブランチでも 7.4
サポートを廃止する。

- composer.json の require.php を ^8.1 に、config.platform.php を
  8.1.0 に更新
- composer.lock を再生成
- laminas/laminas-code が 4.7.1 から 4.16.0 に更新され、PHP 8.3
  環境でのプラグインインストールテストが composer の platform
  制約に引っかからなくなる
- doctrine/migrations は ~3.5.2 のまま維持しており、Symfony 5.4 の
  土台には影響しない
PHP 8.2 で非推奨となった `${var}` 形式の文字列補間を `{$var}` に
置き換える。あわせて PHP 8.1 のイテレータ関連シグネチャ整合と
PHPStan 指摘の解消を行う。

- `${var}` → `{$var}` (Command/Controller/Service/Util/Doctrine Query)
- CsvImportService の iterator メソッドシグネチャを
  PHP 8.1 互換に揃える
- StringUtil::isBlank の array チェックを empty() から
  count() に置き換え (PHPStan 指摘)
- phpstan.neon.dist から、不要になった twig_include 用の
  ignoreErrors エントリを削除
Twig 3.24 で返り値型や Sandbox の挙動が変化した点に追随する。

- `Eccube\Twig\Template` の戻り値型を Twig 3.24 の抽象クラスと整合
- `Eccube\Twig\Environment` を追加し、テンプレートキャッシュ周辺を
  PHP 8+ のクラス生成と整合させる
- `Eccube\Twig\Sandbox\SecurityPolicyDecorator` を Twig 3 系の
  SecurityPolicyInterface に合わせて調整
- `TwigExtensionPass` でカスタム Environment を DI に差し替え
- `IgnoreTwigSandboxErrorExtensionTest` を Twig 3 Sandbox の
  新しい例外挙動に合わせて修正
- twig.yaml / twig_extensions.yaml / admin/index.twig の
  付随する設定・テンプレート調整
同一プロセス内でエンティティクラスが複数回ロードされる状況
(テスト中の Kernel 再起動、サブプロセス経由の schema 更新等) で
プロキシの二重定義 Fatal error が発生するのを防ぐ。

- `Kernel::loadEntityProxies()` で、既にロード済みのクラスは
  require をスキップするガードを追加。プロキシファイルパスから
  FQCN を逆引きして `class_exists($fqcn, false)` で判定する
- `ReloadSafeAnnotationDriver` に同等の二重定義ガードを追加し、
  `AnnotationDriver` 側は upstream のまま据え置く
- `UpdateSchemaDoctrineCommandTest` で、console サブプロセス
  実行後に Kernel を reboot してテスト間の状態を分離
- `EccubeExtension::prepend()` で DoctrineBundle の
  `default_connection` が未設定のケースをフォールバック解決
  (新しい DoctrineBundle バージョンで補完タイミングが変わった
  ことへの対応)
PHP 8.3 環境を含めた CI の安定化と、Docker ビルド周辺の調整を行う。

- PHP 7.4 をワークフローと Dockerfile から除去
- `.github/workflows/main.yml` を追加し、`workflow_call` で
  各種ワークフローをオーケストレーションする構成に変更
- テストアーティファクト名に php / db / method を含めて
  並列ジョブ間のアップロード衝突を回避
- `dockerbuild.yml` を release published 時のみ実行に限定
- `plugin-test.yml` で apt-fast ではなく apt-get を使い
  postgresql-client を安定的にインストール
- `chromedriver` の起動ポートを `--port=9515` に固定
- Dockerfile の Node.js インストール手順を新しい NodeSource
  セットアップスクリプトに更新
新しい PHP / Chrome / 依存パッケージ環境で Codeception の受け入れ
テストが安定して走るように調整する。

- `chromeOptions` を `goog:chromeOptions` に変更し、ダウンロード
  設定を有効化 (WebDriver の W3C 対応)
- 受注 CSV / 会員 CSV / ファイルマネージャー等のダウンロード待機を
  CI 向けに延長
- カテゴリ登録テストでルートカテゴリの削除復元処理を追加
- 管理画面 Throttling テストから分単位の期待値を除去し、
  login_throttling の時間ゆらぎに耐えるよう修正
- Bundle プラグイン用 composer 依存を修正し、
  HttplugFactory 解決エラーを回避
- dockerbuild 向けアクセプタンススイートの安定化 (4.3 最小ポート)
- `codeception-gherkin-i18n-path.patch` を追加。新しい
  `behat/gherkin` の PSR-4 レイアウトで Codeception 4 が
  `i18n.php` を解決できなくなる問題を composer-patches で補正
- `patches/README.md` にパッチの目的と適用方針を記述
新しい PHP / Symfony / Faker 依存下でユニットテストが壊れていた
箇所を個別に修正する。

- `CsrfTokenManagerMock` を `CsrfTokenManagerInterface` の
  新シグネチャ (引数・戻り値型宣言) に合わせて更新
- `SameSiteNoneCompatSessionHandlerTest` で Set-Cookie ヘッダの
  expires 表記ゆれ (`01-Jan-1970` / `01 Jan 1970`) を吸収する
  正規化ヘルパを導入
- `tests/Fixtures/session/common.php` で PHP バージョン差異を
  吸収する調整
- `Fixture\Generator` から PHP 8.2 で deprecation 警告となる
  動的プロパティ代入 (`$Product->extendedParameter`) を削除
- `RateLimiterListenerTest` に `@group rate-limiter-listener` を
  付与し、並列実行時のアーティファクト分離を可能にする
- `tests/Eccube/Tests/Web/Admin/Product/categories.csv` を追加
  (カテゴリ登録テストの新フィクスチャ)
@coderabbitai
Copy link
Copy Markdown

coderabbitai Bot commented Apr 21, 2026

Important

Review skipped

Auto reviews are disabled on base/target branches other than the default branch.

Please check the settings in the CodeRabbit UI or the .coderabbit.yaml file in this repository. To trigger a single review, invoke the @coderabbitai review command.

⚙️ Run configuration

Configuration used: Organization UI

Review profile: CHILL

Plan: Pro

Run ID: a413a4a2-666c-4c64-9cb8-93e759acc343

You can disable this status message by setting the reviews.review_status to false in the CodeRabbit configuration file.

Use the checkbox below for a quick retry:

  • 🔍 Trigger review
✨ 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 and usage tips.

@dotani1111 dotani1111 changed the title Maintenance/4.2 php8.3 4.2系をphp8.1 ~ 8.3へ対応させる。 Apr 21, 2026
@dotani1111 dotani1111 changed the title 4.2系をphp8.1 ~ 8.3へ対応させる。 4.2系をphp8.1 ~ 8.3へ対応させる Apr 21, 2026
@codecov
Copy link
Copy Markdown

codecov Bot commented Apr 21, 2026

Codecov Report

❌ Patch coverage is 44.73684% with 42 lines in your changes missing coverage. Please review.
⚠️ Please upload report for BASE (4.2-php83@f012858). Learn more about missing BASE report.

Files with missing lines Patch % Lines
...e/Doctrine/ORM/Mapping/Driver/AnnotationDriver.php 0.00% 14 Missing ⚠️
src/Eccube/Kernel.php 0.00% 12 Missing ⚠️
src/Eccube/Twig/Template.php 53.84% 6 Missing ⚠️
src/Eccube/Service/PluginService.php 40.00% 3 Missing ⚠️
.../ORM/Mapping/Driver/ReloadSafeAnnotationDriver.php 0.00% 2 Missing ⚠️
src/Eccube/Service/PluginContext.php 0.00% 2 Missing ⚠️
...Eccube/Controller/Admin/Store/PluginController.php 0.00% 1 Missing ⚠️
src/Eccube/DependencyInjection/EccubeExtension.php 80.00% 1 Missing ⚠️
src/Eccube/Doctrine/ORM/Query/Extract.php 0.00% 1 Missing ⚠️
Additional details and impacted files
@@             Coverage Diff              @@
##             4.2-php83    #6736   +/-   ##
============================================
  Coverage             ?   82.73%           
============================================
  Files                ?      477           
  Lines                ?    26007           
  Branches             ?        0           
============================================
  Hits                 ?    21518           
  Misses               ?     4489           
  Partials             ?        0           
Flag Coverage Δ
E2E 82.73% <44.73%> (?)
Unit 82.73% <44.73%> (?)

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

☔ View full report in Codecov by Sentry.
📢 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.

@dotani1111 dotani1111 changed the title 4.2系をphp8.1 ~ 8.3へ対応させる 4.2系をphp8.1 ~ 8.3へ対応 Apr 24, 2026
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