コンテンツにスキップ

Vendure B2B機能リファレンス

概要

Vendureは、B2B ECサイト構築に適した多様な機能を標準で提供しており、カスタマイズによりさらに高度な要件にも対応可能です。このドキュメントでは、リツビプロジェクトで活用可能なVendureの主要機能を詳細に解説します。

より深い技術詳細: Vendureのアーキテクチャやコアコンセプトについては Vendure開発ハンドブック を参照してください。

1. 顧客グループ管理機能

概要

VendureのCustomerGroup機能により、顧客を柔軟にセグメント化し、グループごとに異なるビジネスロジックを適用できます。

主な用途

  • 価格差別化: B2B顧客向け特別価格、VIP顧客向け優待価格
  • プロモーション適用: グループ限定のプロモーション・割引
  • 送料ルール: グループごとの送料無料条件
  • 税率制御: B2B/B2C顧客で異なる税率適用
  • 決済方法制限: グループ別の決済手段制御

リツビプロジェクトでの活用

15種類の顧客ステータス(企業会員、準会員、フレンド会員等)をCustomerGroupとして実装し、掛率制御やカタログアクセス制限に活用。

2. 権限管理システム (RBAC)

概要

きめ細かいRole-Based Access Control(RBAC)により、管理者・顧客の権限を詳細に制御。

権限タイプ

  • Create: 新規作成権限
  • Read: 閲覧権限
  • Update: 更新権限
  • Delete: 削除権限

特殊ロール

  • SuperAdmin: 全権限保持(変更不可)
  • カスタムロール: 業務要件に応じた権限組み合わせ

カスタム権限定義

const syncInventory = new PermissionDefinition({
  name: 'SyncInventory',
  description: '在庫同期権限',
});

リツビプロジェクトでの活用

  • 営業担当者向け注文管理権限
  • 倉庫担当者向け在庫管理権限
  • マーケティング向けプロモーション管理権限

3. 価格設定・通貨管理

価格戦略

  • ProductVariantPriceSelectionStrategy: 動的価格決定
  • MoneyStrategy: 通貨精度カスタマイズ
  • マルチ通貨対応: チャネルごとの通貨設定

B2B向け価格機能

  • 階層型価格: 数量による段階的価格設定
  • 顧客別価格: CustomerGroupと連携した価格制御
  • 3桁小数対応: B2B大量販売向け単価設定(例: ¥1.234/個)

実装例

// 3桁小数対応のMoneyStrategy
class ThreeDecimalMoneyStrategy implements MoneyStrategy {
  precision = 3; // 小数点以下3桁
}

リツビプロジェクトでの活用

顧客別掛率(20%〜60%割引)の実装、購入単位制御(10個、50個、100個単位)との連携。

4. プロモーション・割引機能

プロモーション構成要素

  • Conditions(条件): 適用条件の定義
  • Actions(アクション): 割引計算ロジック

制約設定

  • 期間限定
  • クーポンコード必須
  • 顧客あたり使用回数制限

プロモーションタイプ

  • 商品レベル割引: 特定商品の割引
  • 注文レベル割引: 注文全体への割引
  • 送料割引: 送料無料・割引

高度な機能

  • 依存型プロモーション: 条件とアクションの連携
  • Side Effect API: 無料ギフト追加等の副作用処理

税制との連携

割引は税抜価格に適用され、その後税額を計算(法的要件準拠)。

リツビプロジェクトでの活用

6種類のキャンペーン実装:

  1. セット販売割引
  2. 期間限定特価
  3. 新規顧客限定
  4. 大口購入割引
  5. リピーター優待
  6. 在庫処分セール

特定顧客向け選択的キャンペーン適用

リツビプロジェクトの特殊要件として、特定顧客(すでに特別価格が適用されている顧客)に対する選択的キャンペーン適用があります:

要件詳細

  • 背景: 一部の顧客はすでに特別な掛率(割引率)が設定されており、通常のキャンペーンは適用対象外
  • 例外: ただし、特定のキャンペーン(例:在庫処分、新商品導入)は特別価格顧客にも適用したい
  • 制御: キャンペーンごとに「特別価格顧客への適用可否」を設定可能にする

Vendureでの実装方法

  1. カスタムPromotionCondition実装
const specialPriceCustomerCondition = new PromotionCondition({
  code: 'special-price-customer-eligibility',
  description: '特別価格顧客へのキャンペーン適用制御',
  args: {
    applyToSpecialPriceCustomers: {
      type: 'boolean',
      label: '特別価格顧客にも適用',
      defaultValue: false,
    },
    eligibleGroupIds: {
      type: 'ID',
      list: true,
      label: '適用対象の特別価格グループID',
    },
  },
  check: async (ctx, order, args) => {
    const customer = order.customer;
    if (!customer) return false;

    // 顧客グループを確認
    const customerGroups = await getCustomerGroups(ctx, customer.id);
    const hasSpecialPrice = customerGroups.some(
      g => g.name.includes('特別価格') || g.name.includes('優待'),
    );

    // 特別価格顧客でない場合は常に適用
    if (!hasSpecialPrice) return true;

    // 特別価格顧客の場合、設定に基づいて判定
    if (!args.applyToSpecialPriceCustomers) return false;

    // 特定のグループのみ適用する場合
    if (args.eligibleGroupIds?.length > 0) {
      return customerGroups.some(g => args.eligibleGroupIds.includes(g.id));
    }

    return true;
  },
});
  1. プロモーション優先度設定
// 特別価格を優先度高く設定
const specialPricePromotion = {
  priorityValue: 100, // 高優先度
  conditions: [
    /* 特別価格顧客条件 */
  ],
  actions: [
    /* 掛率適用アクション */
  ],
};

// 通常キャンペーンは低優先度
const regularCampaign = {
  priorityValue: 50, // 低優先度
  conditions: [specialPriceCustomerCondition],
  actions: [
    /* キャンペーン割引アクション */
  ],
};
  1. 複合条件による精密制御

  2. 顧客グループと商品カテゴリの組み合わせ条件

  3. 購入金額・数量による段階的適用
  4. 既存割引との併用可否設定

管理画面での設定例

  1. キャンペーン作成時に「特別価格顧客への適用」チェックボックス表示
  2. 適用する場合、対象グループを選択可能
  3. 割引の重複適用ルール設定(最大割引のみ/累積適用/固定優先度)

5. 在庫管理機能

在庫管理概念

  • Stock on Hand: 実在庫数
  • Allocated Stock: 注文確保分
  • Saleable Stock: 販売可能在庫(実在庫 - 確保分 - 閾値)

マルチロケーション対応

  • StockLocation: 倉庫・店舗等の在庫保管場所
  • StockLocationStrategy: 在庫割当ロジック

マルチチャネル在庫管理

  • MultiChannelStockLocationStrategy: チャネル別在庫制御
  • チャネル固有の在庫割当
  • クロスチャネル在庫共有設定

在庫移動タイプ

  • Allocation(割当)
  • Sale(販売)
  • Cancellation(キャンセル)
  • Release(解放)
  • Stock Adjustment(調整)

高度な機能

  • バックオーダー対応
  • 在庫閾値設定
  • 外部在庫システム連携

リツビプロジェクトでの活用

  • エクスビアンス商品の在庫管理
  • メソシューティカル商品の在庫管理
  • 美容機器消耗品14種の在庫追跡
  • SMILE連携による在庫同期

6. チャネル管理

マルチチャネル機能

  • 独立した商品カタログ: チャネルごとの商品表示制御
  • 価格・通貨設定: チャネル別価格戦略
  • 在庫割当: チャネル固有の在庫管理
  • プロモーション: チャネル限定キャンペーン

B2B/B2C分離運用

  • B2B専用チャネル:企業向け価格・商品
  • B2C公開チャネル:一般消費者向け

リツビプロジェクトでの活用

  • メイン販売チャネル
  • 特別会員専用チャネル
  • キャンペーン専用チャネル

7. 拡張性・カスタマイズ

プラグインアーキテクチャ

  • モジュラー設計によるビジネスロジック分離
  • 既存機能を損なわない安全な拡張
  • TypeScript型安全性

カスタムフィールド

  • エンティティへの項目追加
  • GraphQL APIへの自動反映
  • React Dashboard統合

ストラテジーパターン

  • 価格計算ストラテジー
  • 在庫割当ストラテジー
  • 税額計算ストラテジー
  • 認証ストラテジー

リツビプロジェクトでの実装予定プラグイン

  1. 掛率制御プラグイン: 顧客グループ別価格計算
  2. 直送料金プラグイン: +10%サーチャージ
  3. 月次割戻金プラグイン: エクスビアンス購入実績計算
  4. 購入単位制御プラグイン: 最小購入数量制限
  5. SMILE連携プラグイン: 会計システム統合

8. パフォーマンス最適化

Vendure 2.0の改善点

  • 5000アイテム注文で360倍高速化
  • B2B大量注文対応
  • 高額取引対応(BigIntMoneyStrategy)

GraphQL最適化

  • DataLoaderによるN+1問題解決
  • フィールドリゾルバー最適化
  • クエリ複雑度制限

9. セキュリティ機能

認証・認可

  • JWT/セッションベース認証
  • カスタム認証ストラテジー対応
  • API/Dashboard別権限制御

データ保護

  • パスワードハッシュ化
  • SQLインジェクション防止
  • XSS/CSRF対策

10. 統合・連携機能

API設計

  • GraphQL API: 型安全なクライアント連携
  • REST API: レガシーシステム対応
  • Webhook: イベント駆動連携

外部システム連携

  • 決済ゲートウェイプラグイン
  • 配送業者API統合
  • ERP/会計システム連携
  • 在庫管理システム同期

リツビプロジェクトでの連携

  • SMILE会計システム
  • 配送業者API(ヤマト、佐川等)
  • Google Analytics 4
  • Google Tag Manager

まとめ

VendureのB2B機能は、リツビプロジェクトの要件に対して高い適合性を示しています。標準機能で多くの要件をカバーし、プラグインによる拡張で固有のビジネスロジックも実装可能です。特に以下の点が優れています:

  1. 顧客グループ機能による柔軟な価格・権限制御
  2. マルチチャネル対応によるB2B/B2C分離運用
  3. プラグインアーキテクチャによる安全な機能拡張
  4. 高度な在庫管理による複数拠点対応
  5. パフォーマンスによるB2B大量注文処理

これらの機能を組み合わせることで、リツビの複雑なB2B要件を満たす堅牢なECシステムを構築できます。