コンテンツにスキップ

キャンペーン対象商品の選定・指定ルール

目的

キャンペーン作成時に「どの商品を対象にするか」を判断するための業務ルールと、Vendure 実装上の指定方法を整理する。

本書は キャンペーン.xlsxキャンペーン-価格制御責務分離.md を補足し、原資料を改変せずに運用判断を明文化する。

参照元

  • docs/specifications/キャンペーン.xlsx
  • docs/specifications/キャンペーン-価格制御責務分離.md
  • docs/01-requirements/consolidated/requirements-specification.md
  • docs/03-implementation/vendure-plugins/campaign-engine.md

基本方針

  • キャンペーン対象商品の正本は ProductVariant(SKU)単位とする。
  • 対象商品を「商品名」「ブランド」「Collection 名」だけで確定した扱いにしない。最終的に対象 ProductVariant の一覧へ落とし込む。
  • バンドル商品は構成品ではなく、顧客が購入する親 ProductVariant を対象にする。
  • 商品の表示可否、購入可否、決済可否はキャンペーン対象指定では代替しない。必要に応じて access policy、購入可能期間、在庫・同意・配送制御と併用する。
  • 対象商品の追加・除外は、販促意図と対象 SKU の根拠を残してから反映する。

選定手順

  1. キャンペーン目的を確認する。
  2. 新商品導入、在庫消化、セミナー連動、ブランド横断施策、特定顧客向け施策など、なぜ対象にするかを明確にする。
  3. 目的が恒常的な価格変更なら campaign ではなく pricing rule を検討する。

  4. 対象範囲の起点を決める。

  5. SKU 単体を指定する場合は、該当 ProductVariant を直接対象にする。
  6. ブランド・カテゴリ・Collection から選ぶ場合も、最終的には対象 ProductVariant の一覧を確認する。
  7. セミナー限定や個別顧客向けの場合は、対象商品だけでなく顧客条件・URL条件・可視性条件も別途確認する。

  8. 除外条件を先に洗い出す。

  9. 販売停止、購入可能期間外、在庫不足、同意必須なのに導線未整備の商品は対象から外すか、関連制御を整備してから対象にする。
  10. 決済方法や配送方法の制約が販促条件に影響する場合は、campaign 条件ではなく policy / shipping / payment 側の責務も確認する。
  11. 価格レンジ・ギフト・注文調整が同時にある場合は、対象 SKU ごとの意図しない二重適用がないか確認する。

  12. 対象 ProductVariant を確定する。

  13. 通常商品は SKU ごとの ProductVariant を対象にする。
  14. バンドル商品は customFields.setComponents を持つ親 ProductVariant を対象にする。
  15. バリエーション違いをまとめて対象にする場合も、対象に含める SKU と含めない SKU を明示する。

  16. 適用条件と特典を分けて記録する。

  17. conditions.targets.productVariantIds は「どの商品を判定対象にするか」を表す。
  18. 数量・金額しきい値、顧客グループ、配送方法、顧客フィールド条件は対象商品リストとは分けて記録する。
  19. ギフト商品は benefits.giftItems[] に記録し、対象商品リストへ混ぜない。

  20. シミュレーションで確認する。

  21. 対象 SKU がカートにある場合にだけ適用されることを確認する。
  22. 対象外 SKU、非表示 SKU、購入不可 SKU、バンドル親 SKU、構成品 SKU を含む代表ケースを確認する。
  23. 複数キャンペーンが重なる場合は、優先度・排他/併用設定・価格遷移を確認する。

対象に含める商品

判断軸 含める条件 指定方法
通常商品 販促目的に合致し、販売・表示・購入制御が整っている SKU ProductVariant ID を targets.productVariantIds に入れる
バリエーション商品 同一商品でも販促対象にしたいバリエーションのみ 対象バリエーションの ProductVariant ID だけを入れる
バンドル商品 顧客がバンドルとして購入する商品を対象にしたい 親 ProductVariant ID を入れる
Collection 起点の商品 Collection 内の商品を販促対象にしたい Collection から候補を抽出し、最終対象 ProductVariant ID として確定する
セミナー・限定URL商品 専用導線から購入させたい商品 ProductVariant ID と、別途顧客/URL/可視性条件を組み合わせる

対象に含めない商品

判断軸 除外する条件 理由
バンドル構成品 親バンドルではなく内部構成品として扱う SKU 顧客の購入単位とキャンペーン判定単位がずれるため
ギフト商品 無償付与されるおまけ商品 benefits.giftItems[] の責務であり、購入対象判定と混ぜると二重適用になりやすいため。Variant は product-type=gift + customerAddable=false を基本にする
非表示商品 対象顧客から見えない商品 キャンペーン表示と購入導線が矛盾するため
購入不可商品 購入可能期間外、在庫切れ、同意未整備などで購入できない商品 適用判定だけ成立して注文不能になるため
恒常価格変更だけの商品 期間販促ではなく常設単価変更が目的の商品 pricing rule の責務であるため

指定データ

Campaign の対象商品指定は次を正本にする。

{
  "conditions": {
    "targets": {
      "productVariantIds": ["123", "456"]
    }
  }
}
  • targets.productVariantIds には通常 SKU とバンドル親 ProductVariant の両方を入れてよい。
  • targetBundleProductVariantIds は過去 migration で targets.productVariantIds へ統合済みであり、新規入力・保存・評価では使用しない。
  • 商品コードや SKU 文字列は運用確認用の表示・検索キーとして扱い、保存時は ProductVariant ID に正規化する。
  • ギフト商品は次のように benefits.giftItems[] へ分ける。
  • ギフト商品 SKU は通常の商品対象リストへ混ぜず、ProductVariant の用途分類と通常カート追加可否 に従って product-type=gift と内部投入 marker で扱う。
{
  "benefits": {
    "giftItems": [{ "productCode": "GIFT-SKU-001", "quantity": 1 }]
  }
}

Collection 起点で選ぶ場合

Collection は候補抽出・運用導線として利用してよいが、キャンペーン判定の最終正本は ProductVariant ID とする。

  • Collection に後から商品を追加しても、自動で既存キャンペーン対象へ含める前提にしない。
  • 自動追従が必要な施策は、対象 Collection と追従タイミング、除外条件、差分確認手順を別途仕様化する。
  • 期間中に Collection 構成が変わる場合は、対象 ProductVariant の差分を確認し、変更履歴に残す。

バンドル商品の扱い

  • キャンペーン対象にするのは、顧客がカートへ入れる親 ProductVariant。
  • 構成品 SKU の数量を条件にする必要がある場合は、通常の対象商品指定ではなく、バンドル分解後数量を扱う別条件として仕様化する。
  • バンドル親と単品 SKU の両方を対象にする場合は、同一構成品に対して割引やギフトが二重付与されないようにシミュレーションで確認する。

他制御との境界

制御 正本 キャンペーン対象指定との関係
表示可否 access policy / visibility 見えない商品を対象にしない。表示制御を campaign で代替しない
購入可能期間 商品購入可能期間 期間外の商品は対象から外すか、購入期間を先に整備する
決済可否 payment policy 回収方法や決済手段の制限は対象商品リストへ混ぜない
配送可否・送料 shipping policy / shipping calculator 配送条件は商品対象とは別条件で管理する
同意 consent system 同意必須商品のキャンペーンは同意導線の成立を確認する
恒常価格 pricing rule 期間販促でない単価変更は campaign にしない

変更管理

キャンペーン対象商品を作成・変更する際は、最低限次を記録する。

  • キャンペーン名、内部コード、期間
  • 対象に含める ProductVariant ID / SKU
  • 対象から除外した SKU と除外理由
  • バンドル親 ProductVariant を含めたかどうか
  • 顧客条件、URL条件、可視性条件、決済・配送条件の有無
  • シミュレーション確認日と確認した代表ケース

確認チェックリスト

  • キャンペーン目的が期間販促であり、恒常価格変更ではない。
  • 対象商品が ProductVariant 単位で確定している。
  • バンドル商品は親 ProductVariant を指定している。
  • ギフト商品を対象商品リストへ混ぜていない。
  • 非表示・購入不可・在庫不足・同意未整備の商品を対象にしていない。
  • 対象外 SKU でキャンペーンが適用されないことを確認している。
  • 複数キャンペーン重複時の優先度・排他/併用設定を確認している。
  • 変更理由と確認ケースが運用履歴に残っている。