---
title: "Sitecore XCソフトウェアアーキテクチャ"
slug: "sitecore-xc-software-architecture"
abstract: "ポリシー、環境、Commerce Engineの役割、データベース、プラグインなど、Sitecore XCで使用されるエンティティの概要。"
---
# Sitecore XCソフトウェアアーキテクチャ

Sitecore Experience Commerce(XC)ソリューションは、構成、スケーラビリティ、拡張性を実現するために複数のアーキテクチャエンティティを組み合わせて活用します。

## 方針

Commerce Engineプラグインは、[Commerce Engineのポリシー](https://doc.sitecore.com/xp/ja/developers/100/sitecore-experience-commerce/commerce-engine-policies.html "Commerce Engine policies")を含むSitecore XCソリューションのすべてのコマース機能を提供します。これらはCommerce Engineの機能や挙動を制御するために設定可能なプラグインの要素です。

Sitecore XC JSONファイル内で設定用のポリシーを公開します。関連する環境ポリシーファイルを編集することで設定を変更することができます。

Sitecore XCはCommerce Engineの動作を制御するすべてのポリシーと設定を、[Globalデータベース](https://doc.sitecore.com/xp/ja/developers/100/sitecore-experience-commerce/sitecore-xc-software-architecture.html#UUID-1f3c41e7-60af-cfd4-7249-31507169496e_N1607368778836)、すなわち集中型のCommerce Policy Storeに保存します。ポリシーはブートストラップ処理を用いてグローバルデータベースに永続化されます。ポリシーは厳重にキャッシュされており、デプロイシナリオ以外ではその値がほとんど変わりません。

## 環境

Sitecore Experience Commerceは *、環境* の概念を用いて異なるCommerce Engine構成を可能にします。Commerce Engineでは、環境がCommerce Engineの挙動と扱うデータセットを決定するポリシーの集合を定義します。クライアントがCommerce Engineに呼び出しを行うと、[呼び出しヘッダー](https://doc.sitecore.com/xp/ja/developers/100/sitecore-experience-commerce/service-api-headers.html "Service API headers") がターゲットとなる環境を指定し、Commerce Engineがその環境構成の文脈でリクエストに応答できるようにします。

コマース環境は、別々に設定可能なデータやサービス機能のプールを個別のCommerce Engine環境として稼働させ、呼び出しクライアントの要件に合わせてカスタマイズし、展開の需要に応じてスケールさせる柔軟性を提供します。単一のCommerce Engineサービスインスタンス上で複数のCommerce Environmentを設定することも、複数のCommerce Engineサービスインスタンスに分散して、同じサーバー上またはサーバー間でスケール展開が可能です。

[コマース環境](https://doc.sitecore.com/xp/ja/developers/100/sitecore-experience-commerce/commerce-engine-environments.html "Commerce Engine environments")は、以下を含むコアコマースエンティティクラス(Sitecore.Commerce.Core.CommerceEnvironment)です。

-   Commerce Engineの呼び出しに対するシステムの挙動に影響を与えるポリシーの集合体です。
-   商取引データセットに対応するアーティファクトストアのIDです。

クライアントがコマースエンジンに呼び出しを行う際、コールヘッダーにコマース環境の名前を指定します。環境名により、コマースエンジンはクライアントが期待する動作やデータセットを応答できます。

![The ArtifactStoreID property and the environment "Name" property in the Plugin.Habitat.CommerceAuthoring.json file.](https://doc.sitecore.com/api/markdown-image/xp/ja/developers/100/sitecore-experience-commerce/images/XC_Authoring_Env_ArtifactStoreID.png)

[自分で環境を作成し](https://doc.sitecore.com/xp/ja/developers/100/sitecore-experience-commerce/create-a-custom-commerce-engine-environment.html "Create a custom Commerce Engine environment")、必要に応じて設定をカスタマイズできます。

### ブートストラップ

ブートストラップとは、デプロイ中にディスク上で作成されたJSONファイルからポリシーおよび環境データを [グローバルデータベース](https://doc.sitecore.com/xp/ja/developers/100/sitecore-experience-commerce/sitecore-xc-software-architecture.html#UUID-1f3c41e7-60af-cfd4-7249-31507169496e_section-idm232141911786451 "Global database")に読み込み、他のコマースエンジンがアクセスできるようにするプロセスです。

ブートストラップ後、Commerce Engineは通常のランタイム操作中にデータベースから直接環境設定を取得するため、環境JSONファイルは不要になります。ただし、環境のJSONファイルに変更を加えた場合は、変更がグローバルデータベースに伝播するようにCommerce Engineを再度ブートストラップする必要があります。

## コマースエンジンの役割

Sitecore XCソリューションは、スケーラビリティをサポートする [ためにCommerce Engineロール](https://doc.sitecore.com/xp/en/developers/100/platform-administration-and-architecture/experience-commerce-roles.html) の概念を実装しています。Commerce EngineロールはコアCommerce処理のデプロイされたインスタンスであり、それぞれ異なる論理ロールを担当します。ロール間の区別は純粋に論理的なものであり、異なるインストールロール間でデプロイされるビットに実質的な違いはありません。ロール間の区別は、トラフィックの発生元と呼び出されるCommerce環境の設定によって定義されます。

クライアントがCommerce Engineに呼び出しを行う際、その呼び出しのヘッダーでターゲットとなるCommerce Environmentを指定する必要があります。Commerceエンジンの動作がリクエストヘッダーで指定された環境の文脈でどのように処理するかを決定するのは、ターゲット環境の設定です。

Commerce Engineの役割は同じサーバー上に共存することも、別々のサーバーに配置することも可能です。必要に応じて独立してスケールさせることも可能です。

本番環境では、トラフィックは通常、複数のインストールされたCommerce Engineインスタンスに分割されており、これらのインスタンスは通常、トラフィックソースの近くに物理的に配置されています(この [参照アーキテクチャ図](https://doc.sitecore.com/xp/ja/developers/100/sitecore-experience-commerce/reference-architecture.html "Reference architecture")に示されています)。

異なる環境ごとに異なるCommerce Engineインスタンスを使用することで、キャッシュ、データ保存、統合接続など、各展開ロールの機能を明示的に独立して制御できます。

サンプルSitecore XCソリューションは、それぞれの役割を表す4つのCommerce Engineインスタンスを定義しています:

表1。

役割

概要

[著作](https://doc.sitecore.com/xp/en/developers/100/platform-administration-and-architecture/authoring.html)

オーサリングの役割は、Business Toolsからのトラフィックを処理するCommerce Engineのインスタンスです。この役割はトラフィックが少ないため(eコマースソリューションはビジネスユーザー数が比較的少ないため)、スケーリング要件は通常比較的低いです。

[商店](https://doc.sitecore.com/xp/en/developers/100/platform-administration-and-architecture/shops.html)

ショップの役割は、1つ以上の店舗からのトラフィックを提供するコマースエンジンのインスタンスです。ストアフロントからのリクエストはコマース・Connectおよび [Commerce Engine Connect](https://doc.sitecore.com/xp/ja/developers/100/sitecore-experience-commerce/sitecore-commerce-engine-connect-configuration.html)によって処理されます。このコンテンツ配信の役割は需要に応じてスケールでき、通常はトラフィックを生み出すSitecore XPインスタンスの近くに設置されます。

[手下たち](https://doc.sitecore.com/xp/en/developers/100/platform-administration-and-architecture/minions.html)

ミニオンロールは、コマースエンジンのインスタンスで、独立して動作し、非同期処理(ポストオーダーキャプチャ処理やクリーンアップを含む)をサポートします。ミニオンロールは通常ワーカーロール(ウェブロールではありません)として設定され、ウェブトラフィックを受け取りません。このロールには、それぞれ特定のタスク(例えば、保留中の注文キューを処理するための保留中のミニオン)を持つ一連のミニオンが含まれます。  
  
\>\[!重要\]  
\> Commerce ソリューションは、Minionロールを実行するCommerce Engineのインスタンスを1つだけ持っていなければなりません。複数のMinionロールを複数のCommerce Engineのインスタンスで実行すると、並行性エラーが生じます。

[DevOps](https://doc.sitecore.com/xp/en/developers/100/platform-administration-and-architecture/devops.html)

DevOpsロールは、内部でDevOps担当者のみが利用可能なCommerce Engineのインスタンスです。この役割はより高い権限を割り当てることができ、DevOps担当者が他の役割では許可されていないメンテナンス作業(例:ブートストラップや環境初期化機能)を実行できるようにします。

## データベース

Sitecore XCは以下のCommerceデータベースを使用しています。

-   すべてのCommerceデータセットを保存する共有環境データベース(SitecoreCommerce\_SharedEnvironments)。
-   Commerce Engine環境の設定を保存するグローバルデータベースです。

### Commerce Shared Environmentsデータベース

Commerce Shared Environmentsデータベースは、カタログデータ、顧客記録、価格情報、設定済みプロモーションなど、すべてのCommerce Business Dataを保存します。ビジネスデータに加え、Shared Environmentsデータベースには、さまざまなプラグインが提供するコアコマース機能をサポートする汎用エンティティやリストも保存されています。

同じビジネスデータセットに属する商取引エンティティは共通のアーティファクトストアの値ID共有します。例えば、デフォルトの共有環境データベースでは、Habitatデータセットに含まれるすべてのコマースエンティティが同じアーティファクトストアID値に対して保存されます。Adventure Worksデータセットに含まれるエンティティは、異なるアーティファクトストアIDに対して格納されます。以下は、エンティティが異なるアーティファクトストアのID値に対して格納されているsitecore\_commerce\_storage.CatalogEntityテーブルの例を示しています。

![Commerce entities with different Artefact store ID value based on dataset.](https://doc.sitecore.com/api/markdown-image/xp/ja/developers/100/sitecore-experience-commerce/images/XC_ArtefactStoreID_SharedDB.png)

クライアントがCommerceデータの要求をすると、呼び出しリクエストで指定された環境IDは [、Commerce Environmentファイル](https://doc.sitecore.com/xp/en/developers/100/sitecore-experience-commerce/commerce-engine-environments.html)で設定されているArtifactストアのIDに対応します。ArtifactストアのIDはデータ初期化プロセス中に生成されます。Shared Environmentsデータベースでは、同じCommerceデータセットに属するすべてのCommerceエンティティが同じArtifact store ID値を共有します。

> !注販売可能なアイテムなどの商取引エンティティは、この[参照アーキテクチャ図](https://doc.sitecore.com/xp/ja/developers/100/sitecore-experience-commerce/reference-architecture.html "Reference architecture")に示されているように、ストアフロントでの公開のためにSitecore Webデータベースに移されることはありません。商品がストアフロントに公開されるかどうかにかかわらず、コマースデータは共有環境データベースに残ります。コマースエンティティの場合、ストアフロントへの公開は、例えばBusiness Toolsでの[公開ワークフロー](https://doc.sitecore.com/xp/en/users/100/sitecore-experience-commerce/entity-versions-and-publishing.html)の結果としてエンティティに対して設定された"published"プロパティ値(bool.)の関数です。

### グローバルデータベース

グローバルデータベースは、クライアントが特定のコマース環境に対して開始したリクエストに対して、コマースエンジンがどのように動作するかを制御するすべてのCommerce Engine環境設定データを保存します。

[ブートストラッププロセス](https://doc.sitecore.com/xp/ja/developers/100/sitecore-experience-commerce/sitecore-xc-software-architecture.html#UUID-1f3c41e7-60af-cfd4-7249-31507169496e_section-idm232152470987206 "Bootstrapping")は、環境、構成およびポリシーデータをグローバルデータベースに登録する役割を担います。

## プラグイン

Commerce Engineには既存機能を拡張・変更するためのプラグイン可能なフレームワークが含まれています。Sitecore XCプラグインアーキテクチャは、カスタマイズ機能のための拡張ポイントを提供しつつ、アップグレードの可行性を損なうことなく実現します。

このプラグインアーキテクチャは、オプトインによる複雑さとSitecore XCソリューションの段階的な強化を可能にします。サードパーティシステムとの統合のためのコネクタを書くこともできます。また、ビジネスロジックを拡張したり、Business Toolsを拡張したりするためのプラグインも作成できます。