feat: EC-CUBE 4.4への対応#67
Open
ttokoro20240902 wants to merge 14 commits into
Open
Conversation
Symfony 7.4 / Doctrine ORM 3.0 / PHP 8.2+ へ対応し、コードを Recommend44 に改名。 - composer.json: name/code/version を Recommend44・4.4.0 へ - 全 namespace と @Recommend42 エイリアスを Recommend44 へ改名 - Entity: アノテーション → PHP 属性、型付きプロパティ化、型宣言追加 - Controller: @Route/@template → 属性、戻り値型明示、Sensio 依存除去 - Form: Length 制約を名前付き引数化、戻り値型追加 - PluginManager: 全メソッドに : void、暗黙 nullable 廃止 - Doctrine ORM 3.0: flush($entity) → flush() - phpunit.xml.dist: PHPUnit 11 形式(source/extensions)へ - CI: EC-CUBE 4.4 / PHP 8.2-8.4 マトリクス、deprecated action 更新 Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
sample-payment-plugin に倣い、EC-CUBE 4.4 + 本プラグインを Docker Compose で 立ち上げて PHPUnit を実行できるようにする。 - docker-compose.yml: ベース(ghcr.io/ec-cube/ec-cube-php:8.2-apache-4.4 + mailcatcher、SQLite、APP_ENV=test) - docker-compose.dev.yml: プラグインを tar 化し eccube:plugin:install で導入・有効化 (PharData は先頭 "./" エントリで失敗するため ./* を対象に tar 化) - docker-compose.mysql.yml / docker-compose.pgsql.yml: DB 切り替え用オーバーレイ - dockerbuild/grant_to_dbuser.sql: MySQL 用権限付与 - README: 起動・テスト実行手順を追記 あわせて 4.4 移行に伴うテスト期待値を修正: - Length バリデーションメッセージを Symfony 7.4 の文言へ更新 - getVisible() の boolean 型化に合わせ testRecommendDelete の期待値を false に 動作確認: EC-CUBE 4.4 + PHP 8.2 + SQLite で全 24 テスト パス(PHPUnit 11.5) Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
APP_ENV=test ではセッションがモックストレージ(mock_file)になり、実ブラウザで ログイン状態を保持できなかった。またEC-CUBE 4.4(Symfony 7)の既定 cookie_samesite: none により HTTP では Cookie が拒否される。 - docker-compose.yml: APP_ENV を test → dev に変更(実セッションが必要なため) - dockerbuild/dev-framework.yaml: dev 環境の Cookie を cookie_secure:false / cookie_samesite:lax に上書き - docker-compose.dev.yml: 上記上書きファイルをマウント - README: PHPUnit は test 環境のキャッシュをクリアしてから実行するよう手順を更新 動作確認: ログイン POST → 302 → ダッシュボード 200(admin/password、HTTP localhost:8080) Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
sample-payment-plugin (#53) / eccube-api4 (#186) のモデルケースに倣い、 4.4 対応の保守性向上のため開発ツール設定を追加する。 - phpstan.neon.dist: PHPStan level 6(ルート、neon のため配置可) - Resource/rector.php: Symfony 7.4 / Doctrine ORM 3 への rector 設定 - Resource/.php-cs-fixer.dist.php: php-cs-fixer 設定 ※ rector.php / .php-cs-fixer.dist.php は .php のためルート直下に置くと 本体の Plugin\: サービス検出で 500 になる。Resource/ 配下が必須。 - .gitignore: /vendor/・composer.lock・.php-cs-fixer.cache を追加 - CLAUDE.md: 開発・テスト手順、アーキテクチャ、移行/配置の注意を記載 検証: 設定ファイル配置後も EC-CUBE 起動 OK(admin 302・ルート7件、500 なし) Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
追加した静的解析ツールを実際に適用・対応した。 - rector process 適用: constructor promotion / readonly プロパティ / Elvis 演算子 / PHPDoc クラス名 import(TernaryToElvis / ClassPropertyAssignToConstructorPromotion / ReadOnlyProperty) - php-cs-fixer fix 適用: 戻り値型補完・ライセンスヘッダ https 化など 11 ファイル整形 - テストクラスのプロパティを nullable 化(EccubeTestCase が tearDown で全プロパティに null 代入するため、非 null 型だと TypeError になる) - phpstan-baseline.neon を追加し level 6 を green に(既存の型注釈不足/doctrine 偽陽性を grandfather、新規コードは level 6 で検査) 検証: PHPUnit 全 24 件パス / php-cs-fixer 差分ゼロ / phpstan [OK] No errors Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
EC-CUBE 4.4 (Symfony 7.4) の symfony/cache が ext-redis <6.1 と衝突を宣言する一方、 CI ランナー(nanasess/setup-php) には古い php-redis 5.3.7 が apt で入るため本体の composer install が失敗していた。本プラグイン・本体テストは redis を使用しないため --ignore-platform-req=ext-redis で回避する。 Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
有効化したプラグインのルーティングはコンテナのコンパイル時に dtb_plugin から確定する。 phpunit プロセスでの遅延コンパイルに委ねると DB/タイミングにより有効プラグイン一覧を 取りこぼし、RouteNotFoundException で断続的に失敗していた(特に pgsql)。 - Run PHPUnit: cache:clear 後に cache:warmup を実行し、クリーンなプロセスで プラグイン込みのコンテナを確定的にビルドしてから phpunit を実行 - Setup Plugin: enable 後に cache:clear する順序へ(api4 #186 に合わせる) 検証: ローカル(EC-CUBE 4.4/test)で warmup 後にルート7件登録・phpunit 24件パス Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
baseline で grandfather していた 74 件の指摘を実際に解消し、phpstan-baseline.neon を撤廃。 - Repository に @extends AbstractRepository<RecommendProduct> を付与し、find()/findOneBy()/ QueryBuilder の戻り値型を確定(method.notFound 7・doctrine.dql 5・argument.type を解消) - 配列型に値型を明示(array<string, mixed> / RecommendProduct[] / int[] 等) - Service の $data を RecommendProduct 型に、PluginManager の @param を整理(null/不明引数除去) - Entity の visible を NOT NULL カラムに合わせ bool 型へ(doctrine.columnType 解消) - テストメソッドに : void、ヘルパ引数に型、プロパティに @var を付与 (EccubeTestCase の tearDown 対策で native 型化はせず @var + 無型に統一) - php-cs-fixer: phpdoc_to_property_type を無効化(テストプロパティの非null native 型化を防ぐ) - phpstan.neon.dist: includes(baseline) を削除 検証: phpstan No errors / php-cs-fixer 差分ゼロ / phpunit 24件パス(EC-CUBE 4.4・PHP 8.2) Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
release.yml の packaging で、本番配布物に不要な開発用ファイルを削除してから tar 化する。 - docker-compose*.yml / dockerbuild/(Docker テスト環境) - CLAUDE.md / phpstan.neon.dist / Resource/rector.php / Resource/.php-cs-fixer.dist.php(開発ツール) 検証: 上記除外後も PharData 展開 OK・composer code=Recommend44 を確認(インストール可能) Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
DB 種別に依存しない静的解析を、テストマトリクスとは別の static-analysis ジョブで SQLite・PHP 8.3 の1構成・3ツール直列で実行する(重複実行を避けつつ Checks を分離)。 - php-cs-fixer --dry-run --diff / rector process --dry-run(差分で失敗) - phpstan analyse(level 6)。phpstan は objectManagerLoader がカーネルを起動し EccubeExtension が dtb_plugin を読むため、本体インストール+DB+プラグイン有効化を前提とする Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
- static-analysis: Setup EC-CUBE に eccube:fixtures:load を追加。プラグイン有効化時に PluginManager::createDataBlock() が DeviceType マスタを参照するため、未投入だと newBlock(null) で enable が TypeError になり失敗していた - static-analysis / テストマトリクスの対象 PHP に 8.5 を追加(サポート範囲 8.2-8.5 の上端) Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
コンストラクタでのみ代入される typed プロパティのため readonly が適切。 rector の ReadOnlyPropertyRector が検出する差分(過去の rector→php-cs-fixer の 適用順で型付与後に readonly 化されず残っていた)を解消し、CI の rector --dry-run を green にする。 Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
eccube:plugin:enable 直後の 1 回の cache:clear では、プラグインのルーティング (おすすめ管理ページ plugin_recommend_list)と Nav メニューが確定せず、 docker compose up 直後の初回ロードで /admin/plugin/recommend が 404 になっていた。 enable とは別パスで cache:clear をもう一度実行すると確定するため、 docker-compose.dev.yml の entrypoint で cache:clear を 2 回流すようにした。 curl で docker compose up 直後(手動キャッシュ操作なし)から /admin/plugin/recommend が 200・おすすめ管理ページ表示・Navメニュー表示に なることを確認済み。CLAUDE.md にも挙動と対処を記載。 Co-Authored-By: Claude Opus 4.8 <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.
概要
おすすめ商品管理プラグインを EC-CUBE 4.4(Symfony 7.4 / Doctrine ORM 3.0 / PHP 8.2+) に対応させ、コードを
Recommend42→Recommend44に改名します。4.3 とは非互換(属性必須・ORM 3・PHP 8.2+)のため、新規4.4ブランチへの取り込みです。参考: 4.3→4.4 マイグレーション手順 (doc #346) / 先行対応 eccube-api4 #186 / sample-payment-plugin #53
変更内容
1. EC-CUBE 4.4 対応(コア移行)
@ORM\*→#[ORM\*]、Controller の@Route/@Template→#[Route]/#[Template](Sensio依存除去)?int/?string/bool等)、ゲッター/セッター・各メソッドの戻り値型flush($entity)→flush()Assert\Lengthを名前付き引数形式へ: void、暗黙 nullable 引数の解消phpunit.xml.distを<source>/<extensions>形式へcode/version: 4.4.0/ テンプレート参照をRecommend44に統一2. Docker Compose によるテスト環境
docker-compose.yml+dev/mysql/pgsqlオーバーレイ、dockerbuild/ghcr.io/ec-cube/ec-cube-php:8.2-apache-4.4)でプラグインを自動導入・有効化し PHPUnit を実行可能APP_ENV=dev起動+dev 用 Cookie 設定(cookie_secure:false/cookie_samesite:lax)を上書き3. 静的解析・整形ツール
phpstan.neon.dist(level 6)/Resource/rector.php/Resource/.php-cs-fixer.dist.phpを追加(.php設定は本体のPlugin\:サービス検出で 500 を避けるためResource/配下に配置)@extends AbstractRepository<RecommendProduct>を付与する等)CLAUDE.mdに開発・テスト手順、アーキテクチャ、移行・配置の注意を記載4. CI(
.github/workflows/main.ymlほか)checkout@v4・$GITHUB_OUTPUT化--ignore-platform-req=ext-redis: Symfony 7.4 のsymfony/cacheが古いphp-redisと衝突して本体 composer install が失敗するのを回避(redis は未使用)cache:warmup: 有効プラグインのルートはコンテナのコンパイル時に確定するため、phpunit プロセスの遅延コンパイルだとRouteNotFoundExceptionが断続的に発生する問題を解消release.yml: 配布パッケージから開発・テスト用ファイル(docker-compose / dockerbuild / CLAUDE.md / phpstan / rector / php-cs-fixer)を除外テスト
8.2-apache-4.4)+ SQLite で PHPUnit 全 24 テスト パス(PHPUnit 11.5 / PHP 8.2)code=Recommend44を確認🤖 Generated with Claude Code