Storefront / Dashboard 画像配信補足仕様¶
背景¶
Storefront の商品画像と CMS 画像は、これまで Vendure の preset 変換・raw asset 参照・各画面の個別画像実装 指定が混在していた。表示面ごとに配信方針が分散すると、画質・転送量・責務分離を一貫して判断できないため、Storefront の画像配信方針を Cloudflare-first に統一する。
一方、Vendure の React
Dashboard は管理者限定 UI であり、Storefront と同じ edge 配信最適化を優先する必要は薄い。画像アップロード直後の確認を確実に行えることを優先し、Dashboard
/ admin API の asset 配信は same-server /assets/ を正本にする。
仕様¶
- Storefront の商品画像と CMS 画像は、Cloudflare-first の配信方針を正本とする。
- production では Cloudflare
Transformations(
/cdn-cgi/image)を使用し、表示面に応じた幅・品質・形式最適化を行う。 - local / staging / preview / mock では Cloudflare Transformations を使用せず、raw asset をそのまま配信する。
- 非本番環境の fallback は Vendure 画像変換ではなく raw delivery とし、Storefront 表示のために Vendure 側へ追加変換負荷を載せない。
- Storefront の商品詳細メイン画像は商品全体が欠けにくい表示を優先し、
contain相当の表示を正本とする。 - 商品カード、カート、注文履歴、キャンペーンバナー、ホーム導線など一覧・バナー系の画像は、枠を埋める表示を正本とする。
- Storefront の商品系 UI で表示する代表画像は、Product の
featuredAsset/assetsを正本とする。 Variant のfeaturedAsset/assetsは、商品代表画像の切替条件として使わない。 - 商品詳細のメイン画像、variant 選択カード、クイックオーダー、カート、注文履歴、注文詳細で表示する画像は、同じ Product に属する代表画像を使う。 variant を切り替えても、代表画像は Variant 固有画像へ自動で差し替えない。
- OGP / Twitter Card を含む metadata 画像も、画面表示と同じ Cloudflare-first 方針に従う。
SafeHtml経由で描画する CMS 本文・商品説明内の<img>も、production では Cloudflare-first の配信方針に従う。- SVG / GIF / 動画 / PDF など Cloudflare 変換に向かないアセットは pass-through とする。
- shop API が返す Vendure asset URL は、
VENDURE_ASSET_URLで指定する R2 custom domain を正本とする。 - admin API / React Dashboard が返す Vendure asset URL は、 Vendure
Server 同居の
/assets/を正本とし、R2 custom domain / Cloudflare edge cache を経由させない。 - Dashboard の画像表示では、Cloudflare cache rule の調整だけで整合性を担保しようとせず、admin / shop の配信経路自体を分けることを正本とする。
対象範囲¶
- 商品一覧・商品カルーセル・関連商品・お気に入りなどの商品カード面
- 商品詳細、バンドル画像、クイックオーダー、カート、注文履歴、注文詳細
- ホームヒーロー、コレクション導線、キャンペーン一覧、キャンペーン詳細など CMS / 販促面
- WordPress 本文・静的ページ本文・商品説明など
SafeHtml経由の本文内画像 - Storefront が生成する OGP / Twitter Card 用 metadata 画像
- Vendure の React Dashboard / 管理画面
- Cloudflare 画像変換の適用対象外
- asset URL は Vendure Server 同居
/assets/を使用
運用メモ¶
- 商品カードの比率は 2026-04-storefront-product-card-square-ratio.md を正本とする。
- 商品代表画像の選定は Product 単位で固定し、Variant 画像の有無で表示面ごとに分岐させない。
- Storefront 画面から Vendure preset 名を直接組み立てない。
sharpは Vendure Server on Fly.io の asset upload / preview / Dashboard 表示用に限定し、Cloudflare Workers 上の Storefront 画像最適化には使わない。pnpm why sharpでwrangler -> miniflare -> sharpが見える場合、それは Cloudflare 開発ツールの間接依存であり、Storefront runtime の画像処理責務とは扱わない。- Dashboard 画像アップロードの即時確認性を壊すため、
ec-assets*への cache rule 変更だけで Dashboard の不整合を解決しようとしない。 - 画像配信方針を変更する場合は、実装変更の前に本ファイルと Cloudflare 運用手順を更新して合意を残す。