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種類のキャンペーン実装:
- セット販売割引
- 期間限定特価
- 新規顧客限定
- 大口購入割引
- リピーター優待
- 在庫処分セール
特定顧客向け選択的キャンペーン適用¶
リツビプロジェクトの特殊要件として、特定顧客(すでに特別価格が適用されている顧客)に対する選択的キャンペーン適用があります:
要件詳細¶
- 背景: 一部の顧客はすでに特別な掛率(割引率)が設定されており、通常のキャンペーンは適用対象外
- 例外: ただし、特定のキャンペーン(例:在庫処分、新商品導入)は特別価格顧客にも適用したい
- 制御: キャンペーンごとに「特別価格顧客への適用可否」を設定可能にする
Vendureでの実装方法¶
- カスタム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;
},
});
- プロモーション優先度設定
// 特別価格を優先度高く設定
const specialPricePromotion = {
priorityValue: 100, // 高優先度
conditions: [
/* 特別価格顧客条件 */
],
actions: [
/* 掛率適用アクション */
],
};
// 通常キャンペーンは低優先度
const regularCampaign = {
priorityValue: 50, // 低優先度
conditions: [specialPriceCustomerCondition],
actions: [
/* キャンペーン割引アクション */
],
};
-
複合条件による精密制御
-
顧客グループと商品カテゴリの組み合わせ条件
- 購入金額・数量による段階的適用
- 既存割引との併用可否設定
管理画面での設定例¶
- キャンペーン作成時に「特別価格顧客への適用」チェックボックス表示
- 適用する場合、対象グループを選択可能
- 割引の重複適用ルール設定(最大割引のみ/累積適用/固定優先度)
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統合
ストラテジーパターン¶
- 価格計算ストラテジー
- 在庫割当ストラテジー
- 税額計算ストラテジー
- 認証ストラテジー
リツビプロジェクトでの実装予定プラグイン¶
- 掛率制御プラグイン: 顧客グループ別価格計算
- 直送料金プラグイン: +10%サーチャージ
- 月次割戻金プラグイン: エクスビアンス購入実績計算
- 購入単位制御プラグイン: 最小購入数量制限
- 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機能は、リツビプロジェクトの要件に対して高い適合性を示しています。標準機能で多くの要件をカバーし、プラグインによる拡張で固有のビジネスロジックも実装可能です。特に以下の点が優れています:
- 顧客グループ機能による柔軟な価格・権限制御
- マルチチャネル対応によるB2B/B2C分離運用
- プラグインアーキテクチャによる安全な機能拡張
- 高度な在庫管理による複数拠点対応
- パフォーマンスによるB2B大量注文処理
これらの機能を組み合わせることで、リツビの複雑なB2B要件を満たす堅牢なECシステムを構築できます。