Skip to content

docs(skills): eccube-asset を esbuild ベースで再追加し pre-push ゲート・PHPUnit の 500 切り分けを追記 - #7022

Open
ttokoro20240902 wants to merge 4 commits into
4.4from
docs/skill-followup
Open

docs(skills): eccube-asset を esbuild ベースで再追加し pre-push ゲート・PHPUnit の 500 切り分けを追記#7022
ttokoro20240902 wants to merge 4 commits into
4.4from
docs/skill-followup

Conversation

@ttokoro20240902

@ttokoro20240902 ttokoro20240902 commented Aug 5, 2026

Copy link
Copy Markdown
Contributor

概要

Skill の知見追加のうち、先行 PR のマージを待つ必要があるものをまとめた追随 PR です。Draft で置いています。

内容は 2 系統あります。

1. eccube-asset を esbuild ベースで再追加

eccube-asset は当初 #7008 に含めていましたが、#7013(esbuild への移行)で gulpfile.js / webpack.config.js が削除されるため、そのままでは内容が古くなります。#7008 に残すと esbuild とは無関係な他 9 Skill の知見も一緒に足止めされるので、eccube-asset だけを #7008 から外し、本 PR で #7013esbuild.config.mjs に合わせて書き直したものを再追加します。

gulp 版から変わった点を反映しています。

  • ビルドは npm run build(= node esbuild.config.mjs)の 1 コマンドで SCSS と JS バンドルの両方が通る。監視は npm start
  • SCSS のエントリは自動検出html/template 配下の _ 始まりでない .scss)。部分ファイルに _ を付け忘れると単独の CSS として出力されてしまう
  • CSS は JS から <style> として注入される(style-loader 相当)ため、テンプレート側の読み込み方は変わらない
  • ace エディタのモード / theme / worker は allowlist で静的配置される。テンプレートで新しいモードを使うときは aceFiles にも追加が必要で、足し忘れはビルドでは検出されず実行時に壊れる
  • source map の sources は相対パスへ正規化される。生成物をコミットする運用でビルドマシンのパスが焼き込まれるのを避けるため

あわせて、生成物(css / min.css / map / html/bundle)が git 管理下であるという前提と、Bootstrap の dist CSS に対する lint 誤検知(:not(:-moz-placeholder) は Bootstrap が意図的に分割出力しているもので、そもそもビルド生成物なので手編集不可)も「よくある間違い」に入れています。

2. pre-push ゲートと PHPUnit の 500 切り分け

  • eccube-contributing: .husky/pre-push の存在が Skill に書かれておらず、CI ゲートの表も 4 つしか挙げていませんでした。push のたびに rector(全体走査)と phpstan analyze src/ が走ることを追記し、変更していないファイルで落ちたときは vendor/composer.lock のずれを疑うという切り分けも入れています(依存のバージョンずれと、ファイル移動後のクラスマップ陳腐化の 2 パターン)。判断の拠り所は「CI が同じゲートで緑か」です。
  • eccube-phpunit: createFormData() がキー自体を送っていないフィールドがあると、DataMapper が非 nullable な setter に null を渡して 500 になります。DataMapper は送信値が現在値と同じならセットをスキップするため、その列が NULL の CI では再現せず、値が入っているローカルだけで落ちるという紛らわしい形になります。自分の変更に帰属させる前に catchExceptions(false) で実際の例外を見る、という切り分けを追記しました。

ready にする条件(すべて充足)

このブランチは base を 4.4 にしています(スタック PR にしていません)。先行 PR は両方マージされたため、4.4 を取り込んで解決しました。

取り込み時の対応

eccube-phpunit の「よくある間違い」が衝突しました。 本 PR 側の 1 項(ローカルだけ 500 になるテスト)と
#6937 側の 3 項(未宣言プロパティ / 非 nullable プロパティ / HTML パート無しメール)が同じ位置への追加同士でした。
両側の情報を残したうえで、AGENTS.md の歯止め(1 Skill 10 項・1 項 120 字程度、超過分は追記ではなく統合)に沿って統合しています。
AGENTS.md が「既存の超過は次にその節へ手を入れるときに統合・短縮する」と定めており、衝突解消でこの節に触るためあわせて実施しました。

  • 原因が同じもの同士を 1 項へ: 未宣言プロパティ+非 nullable プロパティ / HTTP クライアント・URL・Entity の自前生成 /
    ID・ステータス値の直書き / 回帰テストのゲート未確認+PHP Warning
  • 結果: 13 項・最大 411 字 → 9 項・最大 143 字(情報の削除はなく、固有名を落として一般則に寄せています)

esbuild.config.mjs との突き合わせで、記述が実体と合っていない点が見つかったので直しました。

  • eccube-asset の「対象」で SCSS ソースに install を挙げていましたが、html/template/installscss は無く JS エントリだけです(SCSS は default / admin の 2 つ)
  • 「生成物」を html/template/*/assets/css/*.css と広く書いていましたが、scss から生成されるのは style.* / app.* / bootstrap.* のみで、
    install/assets/css/dashboard.cssadmin/assets/css/tempusdominus-bootstrap-4*.css は対応する scss を持たない手管理ファイルです(再ビルドしても更新されない)。書き分けたうえで「よくある間違い」にも 1 項追加しました
  • eccube-contributing: .husky/pre-push は dev コンテナ XML が無いとき先に bin/console cache:clear --env=dev を実行します。初回 push が長い理由が分からないと異常と誤認するため追記しました
  • eccube-phpunit: 依存ライブラリの例外メッセージを全文アサートしない、を追加しました。twig/twig 3.28.0 の
    「Report the column number in syntax errors」(Track the source offset of each token and expose it in syntax errors twigphp/Twig#4834)で at line N.at line N column M. に変わり、
    composer.lock の更新だけで PHPUnit の全マトリクスが落ちた実例があります(chore(deps): bump the php-production group across 1 directory with 7 updates #7024 / chore(deps): bump the symfony group across 1 directory with 47 updates #7026)。
    composer.json の制約は ^3.21 で 3.28 も許容するため、版差で変わらない部分だけを含有判定します。
    なお TwigLintValidatorTest 自体の修正は chore(deps): bump the php-production group across 1 directory with 7 updates #7024 に含まれるため本 PR では触っていません

テスト

Markdown のみの変更でコードの変更はありません(git diff origin/4.4...HEAD は Skill 3 ファイル+AGENTS.md の索引 1 行)。
記述内容は 4.4 の実コードで裏取りしています。

  • esbuild.config.mjsnpm run build / npm start、SCSS エントリの自動検出、style-injectaceFiles の allowlist、source map の相対パス正規化)
  • .husky/pre-push(rector 全体走査+phpstan analyze src/ECCUBE_HOOK_RUNNERHUSKY=0、cold 状態の cache:clear
  • git ls-files による生成物の追跡状態とパーミッション(.css は 100755 / .map は 100644)、installscss が無いこと

ローカルで CI と同じゲートを実行済み(vendor は composer install で lock に同期)。

  • vendor/bin/phpstan analyse src[OK] No errors
  • vendor/bin/rector process --dry-run[OK] Rector is done!
  • .husky/pre-push(push 時に実走)→ pre-push: all checks passed

関連

Summary by CodeRabbit

  • ドキュメント
    • SCSS・JavaScriptアセットのビルド、生成物管理、確認手順をまとめたガイドを追加しました。
    • コントリビューション時の自動チェック、実行環境の選択、失敗時の切り分け方法を追記しました。
    • PHPUnitテスト作成時の注意点や、よくあるエラーへの対処方法を整理しました。
    • 開発ガイドの索引に、アセット管理に関する新しいガイドを追加しました。

先行 PR のマージ待ちになる知見をまとめた追随 PR(Draft)。

- eccube-asset: #7008 から外したものを #7013 の esbuild.config.mjs に合わせて
  書き直して再追加。SCSS エントリの自動検出(_ 始まりでない .scss が対象)、
  CSS の <style> 注入、ace の allowlist 配置、source map の相対パス正規化を反映。
  Bootstrap dist CSS への lint 誤検知も「よくある間違い」に追加。
- eccube-contributing: .husky/pre-push が push のたびに rector 全体走査と
  phpstan analyze src/ を実行することを追記。変更外ファイルで落ちたときは
  vendor と composer.lock のずれ(依存のバージョンずれ/クラスマップ陳腐化)を
  疑う切り分けを追加。
- eccube-phpunit: createFormData がキーを送らないフィールドで非 nullable setter に
  null が渡り 500 になる件。DataMapper は現在値と同じならスキップするため
  CI では再現せずローカルだけ落ちる。
- AGENTS.md: Skill 索引表に eccube-asset の行を戻す。
@coderabbitai

coderabbitai Bot commented Aug 5, 2026

Copy link
Copy Markdown

Review Change Stack

No actionable comments were generated in the recent review. 🎉

ℹ️ Recent review info
⚙️ Run configuration

Configuration used: Organization UI

Review profile: CHILL

Plan: Pro Plus

Run ID: 59df3d8c-94d4-4ce5-93f1-f21a2b0bb411

📥 Commits

Reviewing files that changed from the base of the PR and between 895e396 and 6b7b639.

📒 Files selected for processing (1)
  • .claude/skills/eccube-asset/SKILL.md
🚧 Files skipped from review as they are similar to previous changes (1)
  • .claude/skills/eccube-asset/SKILL.md

📝 Walkthrough

Walkthrough

EC-CUBE 4.4 のアセットビルド、push フック、PHPUnit テストに関する開発 Skill 文書を更新しました。AGENTS.md の Skill 索引に eccube-asset を追加しました。

Changes

開発ガイダンス

Layer / File(s) Summary
アセットビルド手順
.claude/skills/eccube-asset/SKILL.md
SCSS・JS・Ace の対象範囲、生成物、ビルド規約、allowlist、source map、確認手順を定義しました。
貢献とテストの注意事項
.claude/skills/eccube-contributing/SKILL.md, .claude/skills/eccube-phpunit/SKILL.md
push フックの実行方式と依存状態の確認方法を追加しました。HTTP テスト、型宣言、回帰テスト、メール検証などの注意事項を整理しました。
Skill 索引への登録
AGENTS.md
アセットビルド向けの eccube-asset Skill をレイヤ別索引に追加しました。

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

Possibly related PRs

Suggested reviewers: nanasess, dotani1111

Poem

うさぎが SCSS を束ね
JS と生成物を並べ
push の手順を書き留め
テストの注意を耳で確認し
Skill の索引に葉を添えた

🚥 Pre-merge checks | ✅ 5
✅ Passed checks (5 passed)
Check name Status Explanation
Description Check ✅ Passed Check skipped - CodeRabbit’s high-level summary is enabled.
Title check ✅ Passed タイトルは、eccube-asset の再追加、pre-push ゲート、PHPUnit の 500 エラー切り分けという主要変更を明確に示しています。
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.
✨ Finishing Touches
🧪 Generate unit tests (beta)
  • Create PR with unit tests
  • Commit unit tests in branch docs/skill-followup

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 Aug 5, 2026

Copy link
Copy Markdown

Codecov Report

✅ All modified and coverable lines are covered by tests.
✅ Project coverage is 77.20%. Comparing base (b85d7dd) to head (6b7b639).

Additional details and impacted files
@@            Coverage Diff             @@
##              4.4    #7022      +/-   ##
==========================================
+ Coverage   77.17%   77.20%   +0.03%     
==========================================
  Files         564      564              
  Lines       28082    28082              
==========================================
+ Hits        21671    21680       +9     
+ Misses       6411     6402       -9     
Flag Coverage Δ
Unit 77.20% <ø> (+0.03%) ⬆️

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.

先行 PR (#6937 / #7013) のマージを取り込む。

.claude/skills/eccube-phpunit/SKILL.md の「よくある間違い」で衝突したため、
両側の項目を残したうえで AGENTS.md の歯止め(1 Skill 10 項・1 項 120 字程度、
超過分は追記ではなく統合)に沿って統合した。

- 4.4 側 3 項(未宣言プロパティ / 非 nullable プロパティ / HTML パート無しメール)と
  本ブランチ側 1 項(ローカルだけ 500 になるテスト)はいずれも情報を保持している。
- 未宣言プロパティと非 nullable プロパティは原因が同じ「プロパティ宣言」なので 1 項に統合。
- HTTP クライアント / URL / Entity の自前生成、ID・ステータス値の直書き、
  回帰テストのゲート未確認と PHP Warning も同種のため統合した。
- 結果として 13 項・最大 411 字 → 8 項・最大 143 字。

AGENTS.md では「既存の超過は次にその節へ手を入れるときに統合・短縮する」と
定めており、衝突解消でこの節に触るため、あわせて実施した。
#7013 のマージで esbuild が入ったので、eccube-asset の記述を
esbuild.config.mjs とリポジトリの実体で 1 項目ずつ照合した。
実体と合っていなかった点、および実装にあって書かれていなかった点を直す。

eccube-asset

- 「対象」の SCSS ソースに install を挙げていたが、
  html/template/install に scss ディレクトリは存在せず JS エントリだけ。
  SCSS は default / admin の 2 つに訂正する。
- 「生成物」を html/template/*/assets/css/*.css と広く書いていたが、
  実際に scss から生成されるのは style.* / app.* / bootstrap.* の 3 系統のみ。
  install/assets/css/dashboard.css と
  admin/assets/css/tempusdominus-bootstrap-4*.css は対応する scss が無い
  手管理ファイルで、再ビルドしても更新されない。両者を書き分ける。
- 上記を踏まえ「css/ 配下すべてを生成物と決めつける」を「よくある間違い」に追加。

eccube-contributing

- .husky/pre-push は dev コンテナ XML が無いとき先に
  bin/console cache:clear --env=dev を実行する(無いと rector が全ファイル
  read error で落ちるため)。初回 push が長い理由が分からないと
  異常と誤認するので追記する。

eccube-phpunit

- 依存ライブラリの例外メッセージを全文アサートしない、を追加。
  twig/twig 3.28.0 の「Report the column number in syntax errors」
  (twigphp/Twig#4834) で `at line N.` が `at line N column M.` に変わり、
  composer.lock の更新だけで PHPUnit の全マトリクスが落ちた実例がある。
  composer.json の制約は ^3.21 で 3.28 も許容するため、版差で変わらない
  部分だけを含有判定する。

なお TwigLintValidatorTest 自体の修正は #7024 に含まれるため本 PR では触らない。
@ttokoro20240902
ttokoro20240902 marked this pull request as ready for review August 6, 2026 00:41

@coderabbitai coderabbitai Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Actionable comments posted: 1

🤖 Prompt for all review comments with AI agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

Inline comments:
In @.claude/skills/eccube-asset/SKILL.md:
- Around line 20-23: SKILL.md の css/ 編集方針を、生成された CSS
のみに適用されるよう更新してください。dashboard.css と tempusdominus-bootstrap-4*.css
は手管理ファイルとして編集禁止の対象外であることを明記し、生成物のみが次回ビルドで上書きされる説明に修正してください。
🪄 Autofix

Fix all unresolved CodeRabbit comments on this PR:

  • Push a commit to this branch (recommended)
  • Create a new PR with the fixes

ℹ️ Review info
⚙️ Run configuration

Configuration used: Organization UI

Review profile: CHILL

Plan: Pro Plus

Run ID: 3138f2d3-429a-4dfe-bf18-2a70db3da70d

📥 Commits

Reviewing files that changed from the base of the PR and between b85d7dd and 895e396.

📒 Files selected for processing (4)
  • .claude/skills/eccube-asset/SKILL.md
  • .claude/skills/eccube-contributing/SKILL.md
  • .claude/skills/eccube-phpunit/SKILL.md
  • AGENTS.md

Comment thread .claude/skills/eccube-asset/SKILL.md
CodeRabbit の指摘に対応する。

本 PR で「css/ に混在する非生成物」(install/assets/css/dashboard.css と
admin/assets/css/tempusdominus-bootstrap-4*.css は対応する scss を持たない
手管理ファイル)を追記した結果、既存の「css/ 配下を直接編集しない。次のビルドで
上書きされて消える」と矛盾していた。手管理ファイルは scss が無いため直接編集する
しかなく、ビルドで上書きもされない。

編集禁止の対象を「生成された css/」に限定し、手管理ファイルが例外である旨を
明記する。css/ に言及する他 11 箇所は「生成物」と限定済みで矛盾しないことを
確認した。
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