コンテンツにスキップ

購入共起レコメンドプラグイン

商品詳細ページなどで「関連商品」を提供するための、購入共起ベースのレコメンドプラグインです。

目的

  • 注文内の同時購入データから関連商品を自動で抽出する
  • 任意の画面(商品詳細以外も含む)で再利用できる取得APIを提供する
  • データが少ない場合は空配列を返し、表示側でのフォールバックを可能にする

表示文言

  • 商品詳細ページの見出しは「関連商品」

仕組み(概要)

  • 注文確定イベントをフックし、同一注文内の商品の組み合わせを集計する
  • 集計結果は専用テーブルに累積し、関連商品の候補を返す
  • Shop API に取得クエリを追加し、表示側から任意の件数で取得する

データモデル

  • テーブル: ritsubi_co_purchase_recommendation
  • カラム:
  • productId: 基準商品ID
  • relatedProductId: 関連商品ID
  • count: 共起カウント

productId + relatedProductId の組をユニーク制約で管理します。

イベントと集計

  • OrderPlacedEvent を購読し、注文内の重複商品IDを除外して組み合わせを作成
  • 同一注文内の全組み合わせを、基準商品 → 関連商品 の方向で加算

API

Shop API クエリ

coPurchaseRecommendations(productId: ID!, take: Int): [Product!]!
  • take 未指定時はプラグイン設定のデフォルト値を使用
  • take は上限設定を超えない範囲で正規化

実装ファイル

  • プラグイン: packages/plugins/co-purchase-recommendation/src/index.ts
  • エンティティ: packages/plugins/co-purchase-recommendation/src/entities/co-purchase-recommendation.entity.ts
  • サービス: packages/plugins/co-purchase-recommendation/src/services/co-purchase-recommendation.service.ts
  • リスナー: packages/plugins/co-purchase-recommendation/src/listeners/co-purchase-order.listener.ts
  • リゾルバ: packages/plugins/co-purchase-recommendation/src/api/co-purchase-recommendation.resolver.ts

運用・注意点

  • 新規エンティティ追加のため、マイグレーション生成・実行が必要
  • packages/plugins はビルド前提運用のため、Vendure 起動前に pnpm -C packages/plugins build を実行する
  • 取得結果が空の場合は表示側で非表示・代替ロジックなどの扱いを決める

設定

  • CoPurchaseRecommendationPlugin.init({...}) で件数のデフォルト値や上限を指定できる
  • 設定値は packages/plugins/co-purchase-recommendation/src/types.ts を参照