Salesforce B2C CommerceのB2C CRM Sync(実装手順編)


※ これから記載する事項は、私が所属する会社とは一切関係のない事柄です。

この記事はb2c-crm-syncのレポジトリの[READMEのSetup Guide](https://github.com/SalesforceCommerceCloud/b2c-crm-sync#setup-guidance)を日本語で要約したものです。
詳細を知りたい場合はREADMEを直接ご参照ください。
B2C CRM Syncの機能の内容に関しては、[Salesforce B2C CommerceのB2C CRM Sync(機能内容編)](https://qiita.com/syunyama/items/75d5c15a968bce8a076a)を参照してください。


## 前提

* B2C Commerceのサンドボックスを持っている
* サンドボックスにはSFRAの設定が入っている
* デベロッパーエディションのPlatformのスクラッチ組織を利用
    * [スクラッチ組織について](https://trailhead.salesforce.com/ja/content/learn/projects/quick-start-salesforce-dx)
    * [Developer Editionについて](https://developer.salesforce.com/jpblogs/2016/04/developer-edition-signup/)
    * スクラッチ組織を使用しない場合は、手順15を　[こちら](https://github.com/SalesforceCommerceCloud/b2c-crm-sync#non-scratch-org-devhub-setup-sandbox-deployment)に変更してください。
* PersonalAccountではなくBase(Account/Contact)を利用します



## 手順概要

1. Node.jsの設定
2. DevHubの設定
3. SFDXの設定
4. ソースコードをクローン&インストール
5. 顧客リストの変更
6. 管理者にエージェントロールを設定
7. ログの設定
8. コードバージョンの設定
9. アクセスキーの設定
10. APIクライアントIDの設定
11. .envファイルの設定
12. OCAPIのShop APIとData APIのパーミッション設定
13. Web DAVパーミッションの設定
14. .envファイルの内のB2C Commerceの設定を評価
15. スクラッチ組織とユーザの作成、組織への接続設定
16. Platformへのリソース、コネクテッドアプリ、ルールのデプロイ
17. 代理注文の認証設定
18. PlatformからCommerceへの接続の設定
19. Platformのレコードの設定
20. Commerceへリソースのデプロイ
21. OCAPIのパーミッションへのドメインの設定
22. サイト環境設定を使用した有功化
23. OOBOのゲストユーザ作成





### 1. Node.jsの設定

[こちら](https://github.com/SalesforceCommerceCloud/b2c-crm-sync#nodejs-setup-instructions)は一般的な手法でいいかと思いますので、割愛させていただきます。
バージョンは`14.17.5` 以上なら良さそうですが、`15.2.1`が推奨のようです。



### 2. DevHubの設定

DebHubについてはこの[Trailhead](https://trailhead.salesforce.com/ja/content/learn/projects/quick-start-salesforce-dx/set-up-your-salesforce-dx-environment)を参照してください。

1. システム管理者として、本番、トライアル、デベロッパーエディション、ビジネス、いずれかの組織にログインします。
2. 設定からクイック検索で「Dev Hub」項目を検索しページを表示します。
3. 「Dev Hubを有効化」を有効化します。


![image (6) (1).png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2110894/aaf6b6a6-3941-fd10-607a-657018d23b85.png)



### 3. SFDXの設定

インストールの詳細は[こちら](https://developer.salesforce.com/docs/atlas.en-us.sfdx_setup.meta/sfdx_setup/sfdx_setup_intro.htm)を参照してください。

1. https://developer.salesforce.com/ja/tools/sfdxcli  から自身のOSにあったインストーラをダウンロード
2. 通常のアプリケーションと同様にインストール
3. `sfdx update`コマンドを実行して「sfdx-cli: Updating CLI....」のように表示されたらインストール完了です。



### 4. ソースコードをクローン&インストール

1. 自身のローカルPCのワークススペースにコマンドラインで遷移する
2. `git clone https://github.com/SalesforceCommerceCloud/b2c-crm-sync.git`を実行
3. `b2c-crm-sync`フォルダが作成されるので、フォルダ内にコマンドラインで遷移する
4. `npm install`でパッケージをインストールします。（※ VPN繋いでいたら失敗することがあります）
5. `npm audit fix`で問題のあるパッケージをアップデートします。（※ VPN繋いでいたら失敗することがあります）



### 5.  顧客リストの変更

マルチクラウドユニットテストを100%パスするためには「RefArchGlobal」「RefArch」の両サイトにそれぞれに別々の顧客リストを設定する必要があります。デフォルトでは両サイトが「RefArch」顧客リストを利用しているので、今回は「RefArchGlobal」サイトの顧客リストを「RefArchGlobal」顧客リストに設定します。

1. Business Managerの`管理 > サイト > サイトの管理 > RefArchGlobal - 全般`に遷移
2. 「RefArchGlobal」を選択
3. 顧客リストを「RefArchGlobal」に変更し、適用ボタンをクリック。

![スクリーンショット 2022-01-05 9.57.41.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2110894/91375e34-5e54-3f68-b3ec-b883474b13e9.png)




### 6. 管理者にエージェントロールを設定

1. Business Managerの `管理 > 組織 > 役割 & 許可 > Administrator - 機能の許可` に遷移
2. 「コンテキストの選択」ポップアップが表示されるので「RefArchGlobal」「RefArch」の両サイトにチェックを入れ、適用ボタンをクリック
3. 下記の項目にチェックが入っていることを確認して更新ボタンをクリック

    * Login_On_Behalf
    * Login_Agent
    * Adjust_Item_Price
    * Adjust_Shipping_Price
    * Adjust_Order_Price
    * Create_Order_On_Behalf_Of
    * Search_Orders
    * Handle_External_Orders


![スクリーンショット 2022-01-05 10.01.12.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2110894/5ae21be4-581a-3f1f-9e28-84a0c28738cb.png)



### 7. ログの設定

こちらは任意の設定です。
テスト時の期待していない動作に対してトラブルシューティングする際にログが出力されるので、役に立ちます。

1. Business Managerの `管理 > オペレーション > カスタムログ設定` に遷移
2. rootのログレベルを「DEBUG」に設定
3. 「FATAL」時にアラートメッセージを飛ばす先のEメールアドレスを設定

![スクリーンショット 2022-01-05 10.11.02.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2110894/639162d8-2625-ca37-724e-4f820030038c.png)




### 8. コードバージョンの設定

こちらは任意の設定です。
すでに設定していたり、デフォルトの「SFRA_AP_XXXXX」を使用している場合はそのバージョンを引き続き利用しておいて構いません。新しくバージョンを作成して利用する場合は、SFRAのカートリッジ群も含まれるように設定してください。


1. Business Managerで `管理 > サイトの開発 > コードのデプロイ` に遷移
2. 追加ボタンをクリックし、任意のバージョン名を入力し、適用ボタンをクリック

![スクリーンショット 2022-01-05 10.22.26.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2110894/8c42bfab-e884-6a45-4f18-3dbd7611739e.png)




### 9.  アクセスキーの設定

1. Business Managerの右上のアカウント名をクリックしプロフィールページを表示する
2. ページ内の「アクセスキーの管理」ボタンをクリックし、ページへ遷移する
3. 「アクセスキーの生成」から「WebDAV のファイルアクセスと UX Studio」「エージェントユーザーのログインと OCAPI」のキーをそれぞれ作成
4. 作成したキーはダウンロードボタンでダウンロードしておく


![スクリーンショット 2022-01-05 10.30.10.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2110894/ebca6bec-a85e-1ce2-840e-aa8aabe52dc2.png)





### 10. APIクライアントIDの設定

1. [https://account.demandware.com](https://account.demandware.com/) にアクセス
2. 「API Client」タブから「Add API Client」をクリック
3. Display NameとPasswordをそれぞれ入力（Passwordはのちに利用するので覚えておくようにする）
4. 使用するOrganizationを選択する
5. Default Scopesには`mail`を入力
6. Allowed Scopesには下記の内容を入力
  ```mail
  roles
  tenantFilter
  profile
  ```

7. Token Endpoint Auth Methodは `private_key_jwt` を選択
8. Access Token Formatは `UUID`を選択
9. Saveボタンをクリックして保存する




### 11.  .envファイルの設定

1. 4.で作成した`b2c-crm-sync`フォルダにコマンドラインで遷移
2. `cp sample.env .env`コマンドでsample.envファイルから.envファイルを作成
3. .envファイルを下記の内容に修正し、保存。

```sh
B2C_HOSTNAME={B2C Commerceのサンドボックスのドメイン 例：abcd-001.dx.commercecloud.salesforce.com}
B2C_INSTANCENAME={B2C_HOSTNAMEの先頭部分のハイフンを抜いたもの　例：abcd001}
B2C_CLIENTID={10.で作成したAPIクライアントのUUID}
B2C_CLIENTSECRET={10.で作成したAPIクライアントのパスワード}
B2C_SITEIDS=RefArch, RefArchGlobal
B2C_CODEVERSION={8.で設定したコードバージョンまたは現在使用中のコードバージョン}
B2C_DATARELEASE=scc-sampledata
B2C_USERNAME={B2C Commerceログイン時のユーザ名　例：username@emailaddress.com}
B2C_ACCESSKEY={9.で作成した「エージェントユーザーのログインと OCAPI」のアクセスキー}
```

それぞれの項目の説明は[こちら](https://github.com/SalesforceCommerceCloud/b2c-crm-sync#setup-your-env-file)参照ください。



### 12. OCAPIのShop APIとData APIのパーミッション設定

**Shop API**

1. Business Managerの `管理 > サイトの開発 > Open Commerce API 設定` に遷移
2. タイプの選択で「ストアフロント」(=Shop API)を選択
3. 範囲の選択で「グローバル」を選択
4. テクストボックス内にすでにJSONが入力されている場合は、`clients` リスト内に下記の内容を追加。※ `allowed_origins` は後ほど入力するので今はそのままでOK。

```js
{
  "client_id":"{10.で作成したAPIクライアントのUUID}",
  "allowed_origins": [
    "https://my-salesforce-environment.visualforce.com",
    "https://my-salesforce-environment.lightning.force.com"
  ],
  "resources": [
    {
        "resource_id": "/customers",
        "methods": [
            "post"
        ],
        "read_attributes": "(**)",
        "write_attributes": "(**)"
    },
    {
        "resource_id": "/customers/*",
        "methods": [
            "get",
            "patch"
        ],
        "read_attributes": "(**)",
        "write_attributes": "(**)"
    },
    {
        "resource_id": "/customers/auth",
        "methods": [
            "post"
        ],
        "read_attributes": "(**)",
        "write_attributes": "(**)"
    },
    {
        "resource_id": "/customers/*/auth",
        "methods": [
            "post"
        ],
        "read_attributes": "(**)",
        "write_attributes": "(**)"
    },
    {
        "resource_id": "/customers/auth/trustedsystem",
        "methods": [
            "post"
        ],
        "read_attributes": "(**)",
        "write_attributes": "(**)"
    },
    {
        "resource_id": "/sessions",
        "methods": [
            "post"
        ],
        "read_attributes": "(**)",
        "write_attributes": "(**)"
    },
    {
        "resource_id": "/site",
        "methods": [
            "get"
        ],
        "read_attributes": "(**)",
        "write_attributes": "(**)",
        "cache_time": 0
    },
    {
        "resource_id": "/orders/*",
        "methods": [
            "get",
            "patch"
        ],
        "read_attributes": "(**)",
        "write_attributes": "(**)"
    }
  ]
}
```


もし、テキストボックス内に何も入力されていなければ、下記の内容を入力した上で `clients` リスト内に上記の内容を追記

```js
{
  "_v": "21.3",
  "clients": [
    {ここに追加}
  ]
}
```



**Data API**

上記Shop APIの設定でタイプの選択を「データ」(=Data API)に変更し、4.の内容を下記の内容に変更。あとは全て同じ


```js
{
  "client_id":"{10.で作成したAPIクライアントのUUID}",
  "allowed_origins": [
    "https://my-salesforce-environment.visualforce.com",
    "https://my-salesforce-environment.lightning.force.com"
  ],
  "resources": [
    {
        "methods": [
            "get"
        ],
        "read_attributes": "(**)",
        "write_attributes": "(**)",
        "resource_id": "/sites"
    },
    {
        "methods": [
            "get"
        ],
        "read_attributes": "(**)",
        "write_attributes": "(**)",
        "resource_id": "/sites/*"
    },
    {
        "methods": [
            "post"
        ],
        "read_attributes": "(**)",
        "write_attributes": "(**)",
        "resource_id": "/site_search"
    },
    {
        "methods": [
            "get"
        ],
        "read_attributes": "(**)",
        "write_attributes": "(**)",
        "resource_id": "/code_versions"
    },
    {
        "methods": [
            "get",
            "put",
            "patch",
            "delete"
        ],
        "read_attributes": "(**)",
        "write_attributes": "(**)",
        "resource_id": "/code_versions/*"
    },
    {
        "methods": [
            "post"
        ],
        "read_attributes": "(**)",
        "write_attributes": "(**)",
        "resource_id": "/jobs/*/executions"
    },
    {
        "methods": [
            "get"
        ],
        "read_attributes": "(**)",
        "write_attributes": "(**)",
        "resource_id": "/jobs/*/executions/*"
    },
    {
        "methods": [
            "get"
        ],
        "read_attributes": "(**)",
        "write_attributes": "(**)",
        "resource_id": "/customer_lists/*"
    },
    {
        "methods": [
            "post"
        ],
        "read_attributes": "(**)",
        "write_attributes": "(**)",
        "resource_id": "/customer_lists/*/customer_search"
    },
    {
        "methods": [
            "post"
        ],
        "read_attributes": "(**)",
        "write_attributes": "(**)",
        "resource_id": "/customer_lists/*/customers"
    },
    {
        "methods": [
            "get",
            "patch",
            "delete",
            "put"
        ],
        "read_attributes": "(**)",
        "write_attributes": "(**)",
        "resource_id": "/customer_lists/*/customers/*"
    },
    {
        "methods": [
            "get",
            "post"
        ],
        "read_attributes": "(**)",
        "write_attributes": "(**)",
        "resource_id": "/customer_lists/*/customers/*/addresses"
    },
    {
        "methods": [
            "get",
            "patch",
            "delete"
        ],
        "read_attributes": "(**)",
        "write_attributes": "(**)",
        "resource_id": "/customer_lists/*/customers/*/addresses/*"
    },
    {
        "methods": [
            "get",
            "patch"
        ],
        "read_attributes": "(**)",
        "write_attributes": "(**)",
        "resource_id": "/sites/*/site_preferences/preference_groups/*/*"
    },
    {
        "methods": [
            "post"
        ],
        "read_attributes": "(**)",
        "write_attributes": "(**)",
        "resource_id": "/sites/*/cartridges"
    }
  ]
}
```





### 13. Web DAVパーミッションの設定



1. Business Managerの `管理 > 組織 > クライアントの WebDAV 許可` に遷移
2. テクストボックス内にすでにJSONが入力されている場合は、`clients` リスト内に下記の内容を追加。

```js
{
      "client_id":"{10.で作成したAPIクライアントのUUID}",
      "permissions":[
            {
                "path": "/impex",
                "operations": [
                    "read_write"
                ]
            },
            {
                "path": "/cartridges",
                "operations": [
                    "read_write"
                ]
            },
            {
                "path": "/static",
                "operations": [
                    "read_write"
                ]
            }
      ]
    }
```

もし、テキストボックス内に何も入力されていなければ、下記の内容を入力した上で `clients` リスト内に上記の内容を追記

```js
{
  "clients": [
    {ここに追加} 
  ]
}
```




### 14. .envファイルの内のB2C Commerceの設定を評価

1. `npm run crm-sync:b2c:verify` コマンドを実行
2. 「SUCCESS」という文字が表示されたら成功


![image (9).png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2110894/1d43c03a-d7c9-4929-f972-1b9aa5217c67.png)





### 15. スクラッチ組織とユーザの作成、組織への接続設定

#### 作成

1. `sfdx auth:web:login -d -a DevHub` コマンドを実行してログイン画面を表示し、2. でDev Hub設定をしたときに利用したシステム管理者のアカウントでログイン
2. `npm run crm-sync:sf:org:create` コマンドを実行してスクラッチ組織とユーザを作成
3. `sfdx force:org:list --all`で作成した組織とユーザを確認。（.env内のSF_SCRATCHORGALIASの値の名前で作成されている。デフォルトは `crmsync`）


![スクリーンショット 2022-01-05 11.59.47.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2110894/d612270c-abb0-9c5d-dd6e-68d4019b5e78.png)



**Tips**
もしすでに複数の環境を持っている場合は今回作成したユーザをデフォルトにすることができます。
DevHubのデフォルトユーザを設定する場合、

```
sfdx config:set defaultdevhubusername={ユーザ名またはエイリアス}
```

スクラッチ組織のデフォルトユーザを設定する場合、

```
sfdx config:set defaultusername=[insert your Salesforce Org Username Here]
```

また、それぞれのデフォルトユーザを確認したい場合は、

```
sfdx config:list
```



#### ユーザ情報の設定

1. `sfdx force:user:password:generate` コマンドを実行し、パスワードを作成
2. `npm run crm-sync:sf:user:details` コマンドを実行し下記画像の内容を表示
3. .envを下記画像の内容に上書き修正

![スクリーンショット 2022-01-05 12.19.12.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2110894/f80b21f9-424d-72a7-01e9-81d304355ae1.png)




**セキュリティトークンの設定**


1. `npm run crm-sync:sf:org:open` コマンドを実行し、スクラッチ組織にログイン。（ログインしたユーザが上記で作成したユーザかどうか確認してください。そうなってない場合はTipsに記載した方法でデフォルトユーザを変更して、再度コマンドでログインしてください）
2. 右上のユーザアイコンから設定に遷移し、左ナビから「私のセキュリティトークンのリセット」を選択し、下記画像のような画面を表示
3. 「セキュリティトークンのリセット」をクリックする
4. Eメールでトークンが送られるので、トークンを.env内の `SF_SECURITYTOKEN` に設定する。

![スクリーンショット 2022-01-05 12.23.34.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2110894/20c9d0c2-4878-2b8a-8730-f9d121eef77e.png)





#### 設定の確認

`npm run crm-sync:sf:auth:usercreds` コマンドを実行して下記画像のようにトークンが表示されたら完了です。

![スクリーンショット 2022-01-05 12.34.22.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2110894/cc4f12c7-9fca-e63b-0452-dc0f4776b0f8.png)





### 16. Platformへのリソース、コネクテッドアプリ、ルールのデプロイ

1. 下記のコマンドを実行
    1. リソースのデプロイ：`npm run crm-sync:sf:org:deploy`
    2. コネクテッドアプリのデプロイ：`npm run crm-sync:sf:connectedapps`
    3. 重複ルールのデプロイ：`npm run crm-sync:sf:duplicaterules`




### 17. 代理注文の認証設定

#### 設定

1. `npm run crm-sync:oobo:password:display` でパスワードを表示
2. (ログインしてなければ) `npm run crm-sync:sf:org:open` コマンドを実行し、スクラッチ組織にログイン
3. 右上のユーザアイコンから設定に遷移し、左ナビから「外部システムの認証設定」を選択し、新規ボタンから下記画像のような画面を表示
4. 下記の内容を入力し、保存ボタンをクリック
    1. 外部システム定義　→　`指定ログイン情報`
    2. 指定ログイン情報　→　`{InstanceName}:B2C: OOBO Named Credentioals`
    3. ユーザ　→　検索ボタンをクリックし、表示されたポップアップで「User User」を選択
    4. 認証プロトコル　→　`パスワード認証`
    5. ユーザ名　→　.env 内の `B2C_USERNAME`と同じ
    6. パスワード　→　上記のコマンドで表示したパスワード

![スクリーンショット 2022-01-05 12.52.34.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2110894/b6103421-6932-b928-cf9d-279a6e76a9e2.png)




#### 確認

`npm run crm-sync:b2c:auth:bmuser`コマンドを実行し下記画像のようにトークンが表示されていたら完了

![スクリーンショット 2022-01-05 13.03.02.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2110894/12318e8a-2c53-2d6a-7ef6-f876c8bddc81.png)



### 18. PlatformからCommerceへの接続の設定

#### 証明書の作成

1. (ログインしてなければ) `npm run crm-sync:sf:org:open` コマンドを実行し、スクラッチ組織にログイン。
2. 設定のクイック検索から「証明書と鍵の管理」を検索し、ページを表示
3. 「自己署名証明証の作成」をクリックする
4. 表示されたフォームに下記の内容を入力し、保存をクリック
    1. 表示ラベル　→　.env内の`B2C_INSTANCENAME`と同じ値
    2. 一意の名前　→　.env内の`B2C_INSTANCENAME`と同じ値
    3. エクスポート可能な非公開鍵　→　チェックする
    4. 鍵サイズ　→　4096


![スクリーンショット 2022-01-05 14.03.38.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2110894/84bbfcce-7618-98f1-6e1e-fffdeeb3c6b1.png)




#### 証明書のエクスポート

1. (ログインしてなければ) `npm run crm-sync:sf:org:open` コマンドを実行し、スクラッチ組織にログイン。
2. 設定のクイック検索から「証明書と鍵の管理」を検索し、ページを表示
3. 「キーストアにエクスポート」をクリック
4. 表示されたページで任意のパスワードを設定し、エクスポートボタンをクリックして証明証をダウンロード



#### 証明書の設置

1. ダウンロードした証明証を4.でローカルに作成した`b2c-crm-sync`フォルダ内の`/_jwt/sfdc` に設置する
2. `npm run crm-sync:sf:cert:publickey:get` コマンドを実行(実行時に聞かれるパスワードはエクスポートしたときに設定した任意のパスワード)
3. `/_jwt/sfdc` 内に.certファイルと.keyファイルが作成されていることを確認


![スクリーンショット 2022-01-05 14.19.01.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2110894/387fe2f4-83bc-459d-f6d8-1474b3f4ff34.png)



#### .envファイルの修正

.envファイル内に`SF_CERTDEVELOPERNAME` を追加し、証明証を作成した時の「一意の名前」(=`B2C_INSTANCENAME`)を値に設定



#### API Clientへの証明証の設定

1.  [https://account.demandware.com](https://account.demandware.com/)　にアクセス
2. 10.で作成したAPI Clientを表示する
3. Client JWT Bearer Public Keyにローカルに作成された.certファイル内の `-----BEGIN CERTIFICATE-----` で始まって `-----END CERTIFICATE-----` で終わる値を入力し、Saveボタンをクリック。（注意：テキストボックスの最後に空白が入らないようにする）



#### 接続の確認

* `npm run crm-sync:b2c:auth:jwt`コマンドを実行し、`authToken`が表示されれば証明証を利用したAccout ManagerからのJWTの取得の設定は成功
* `npm run crm-sync:b2c:auth:clientcreds` コマンドを実行し、`B2C Commerce Authentication Token`が表示されていればクライアントIDとパスワードを利用したAccout ManagerからのJWTの取得の設定は成功



#### ユニットテスト用の証明証の作成

上記の「証明書の作成」と同じ手順で「表示ラベル」と「一意の名前」の値を`b2ccrmsync_testing`にする。(エクスポートや.envの修正、APIClientの設定はしなくても良い)




### 19.  Platformのレコードの設定

#### B2C Commerce Clientの設定をPalatformのレコードに追加する

`npm run crm-sync:sf:b2cclientid:setup` コマンドを実行し、「SUCCESS」という文字が表示されれば成功

#### B2C Commerce Instanceの設定をPalatformのレコードに追加する

`npm run crm-sync:sf:b2cinstance:setup` コマンドを実行し、「SUCCESS」という文字が表示されれば成功


![image (10).png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2110894/ace3b115-733c-5edf-6dfc-2d4b6683e685.png)




### 20. Commerceへリソースのデプロイ

`npm run crm-sync:b2c:build` コマンドを実行すると下記のようにドメインが表示される

![スクリーンショット 2022-01-05 17.04.49.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2110894/26ab4b2f-7e5a-e6a2-926d-7bb2e85e0280.png)



### 21.  OCAPIのパーミッションへのドメインの設定

21.で表示されたドメインで12.で設定したJSONの`allowed_origins`部分を上書きする。


### 22.サイト環境設定を使用した有功化

`npm run crm-sync:b2c:siteprefs:activate` コマンドを実行


### 23.  OOBOのゲストユーザ作成

`npm run crm-sync:oobo:customers:create` コマンドを実行