commerce-b2b-open-code-components-integrate について
Salesforce B2B Commerce プロジェクト向けのスキルです。オープンソースのコンポーネントとラベルをストアのサイトメタデータにコピーし、Experience Builder で使えるようにします。リポジトリとメタデータを確認し、デプロイ手順も示します。
主な機能
- 01コンポーネントリポジトリのクローンまたは再利用
- 02有効なパッケージディレクトリの特定
- 03ストアメタデータの検索または取得
- 04コンポーネントとラベルファイルのコピー
- 05上書きまたは新規分のみコピーする選択肢
- 06デプロイ手順の提示
活用シーン
- 01B2B ストアへのオープンソースコンポーネント追加
- 02Experience Builder でのコンポーネント利用
インストール
コマンドをコピーしてターミナルで実行します。
npx skills add https:/ / github.com/ forcedotcom/ sf-skills --skill commerce-b2b-open-code-components-integrateインストール後、Claude Code で/commerce-b2b-open-code-components-integrateを入力して読み込まれたか確認します。
詳細
このスキルを使用するタイミング
次のことを行う必要がある場合に、このスキルを使用します。
- すべてのオープンソースの B2B Commerce コンポーネントをストアに統合する
- 新規または既存の B2B Commerce ストアにオープンソースコンポーネントを追加する
- Experience Builder でオープンコードコンポーネントを利用できるようにする
ルール
- 実行前に必ず説明してください。 コマンドを実行する前に、コマンドの処理内容と実行する理由をユーザーに伝える必要があります。コマンドだけを表示して許可を求めてはいけません。ユーザーが説明を読んで、承認する前に目的を理解できるようにしてください。
概要
このスキルは、公式 Salesforce リポジトリ(https://github.com/forcedotcom/b2b-commerce-open-source-components)からすべてのオープンソースの B2B Commerce コンポーネントをコピーし、B2B Commerce ストアのサイトメタデータに追加します。統合後、コンポーネントは Experience Builder のコンポーネントパレットに表示されます。
起動時のフロー
このスキルが起動されたら、コピーする前に以下のチェックを自動的に実行してください。
Check 0: パッケージディレクトリを特定する
sfdx-project.json を読み込み、有効なパッケージディレクトリを選択します。packageDirectories[] を取り出し、"default": true のエントリを使用します。デフォルトに指定されたエントリがない場合は、最初のエントリを使用します。以下では、この値を <package-dir> として使用します。sfdx-project.json が存在しない、または packageDirectories がない場合は、ユーザーに伝えて中止します。
Check 1: オープンソースリポジトリ
リポジトリが .tmp/b2b-commerce-open-source-components にクローンされていることを確認します。
- ディレクトリが存在しない場合: ユーザーに次のように伝えます。「公式の B2B Commerce オープンソースコンポーネントリポジトリを、ローカルの
.tmp/フォルダーにクローンしています。これにより、すべてのオープンコードコンポーネントを利用できます。」 次に、git clone https://github.com/forcedotcom/b2b-commerce-open-source-components .tmp/b2b-commerce-open-source-componentsを実行します。 - ディレクトリが存在し、
force-app/main/default/sfdc_cms__lwcとsfdc_cms__labelが含まれている場合は、次の選択肢を提示します。「オープンソースリポジトリはすでにクローンされています。どのように進めますか?」
- 既存のものを再利用 — すでにクローンされているリポジトリを使用する
- 再クローン — 削除して GitHub から新たにクローンする
- ディレクトリは存在するが、構成が無効な場合: ユーザーに次のように伝えます。「クローンされたリポジトリの構成が想定と異なります。削除して新たにクローンします。」 次に、削除して再クローンします。
- クローンに失敗した場合: ユーザーに知らせて中止します。
Check 2: ストアとサイトメタデータ
ストアが選択されており、サイトメタデータがローカルで利用できることを確認します。
- ユーザーに次のように伝えます。「プロジェクトに B2B ストアのメタデータがローカルにあるか確認しています。」
<package-dir>/main/default/digitalExperiences/site/にストアディレクトリがあるか確認します。 - ストアメタデータが存在する場合: それを使用します。複数のストアが見つかった場合は、ユーザーに選択してもらいます。
- ストアメタデータが見つからない場合: 委任する前に、接続済みの組織からの取得を試みます。
sf org listを実行する(またはsf config get target-orgを確認する)ことで、接続済みの組織を特定します。複数ある場合は、ユーザーに確認するか選択してもらいます。sf org list metadata --metadata-type DigitalExperienceBundle --target-org <alias>を実行して、その組織のDigitalExperienceBundleサイトバンドルを一覧表示します。site/*のエントリに絞り込みます。- サイトバンドルが1つ以上ある場合は、ユーザーに使用するものを選んでもらい、次を実行します。
sf project retrieve start --metadata "DigitalExperienceBundle:site/<storeName>" --target-org <alias>バンドルは<package-dir>/main/default/digitalExperiences/site/<storeName>/に配置されます。 - 接続済みの組織がない場合、サイトバンドルが見つからない場合、または取得に失敗した場合に限り: commerce-b2b-store-create スキルに委任します。
すべてのチェック後に必要な状態:
- パッケージディレクトリ — Check 0 で特定した値(例:
force-app) - ストア名 — 選択した
fullNameの値(例:My_B2B_Store1) - サイトメタデータのパス —
<package-dir>/main/default/digitalExperiences/site/<store-name>/ - リポジトリのパス —
.tmp/b2b-commerce-open-source-components/
統合作業
クローンしたリポジトリからすべてのコンポーネントとラベルをサイトディレクトリにコピーします。
- ソース:
.tmp/b2b-commerce-open-source-components/force-app/main/default/sfdc_cms__lwc/*およびsfdc_cms__label/*(オープンソースリポジトリ固有のレイアウト。常にforce-app) - コピー先:
<package-dir>/main/default/digitalExperiences/site/<store-name>/sfdc_cms__lwc/およびsfdc_cms__label/(<package-dir>はチェック 0 で解決します)
手順:
- ユーザーに次のように伝えます:「ストアのサイトメタデータにオープンコードコンポーネントがすでに存在するか確認しています。」 コピー先のディレクトリにファイルがすでに存在するか確認します。
- ファイルが存在する場合は、次の選択肢を提示します。
「{store-name} にはコンポーネントがすでに存在します。どのように進めますか?」
- すべて上書き — 既存のコンポーネントをすべてリポジトリの最新のものに置き換えます
- 新しいもののみコピー — 既存のコンポーネントはスキップし、まだ存在しないものだけをコピーします
- ユーザーに次のように伝えます:「クローンしたリポジトリから、オープンコードの LWC コンポーネントをすべてストアのサイトメタデータディレクトリにコピーしています。」 ソースからすべてのコンポーネントディレクトリをコピーします。
- ユーザーに次のように伝えます:「これらのコンポーネントに必要な関連ラベルファイルをコピーしています。」 ソースからすべてのラベルディレクトリをコピーします。
- 次のように報告します:「X 個のコンポーネントと Y 個のラベルセットをコピーしました」
出力:
Integration Complete!
Copied: X components and Y label sets to <store-name>
Next Steps:
1. Deploy: sf project deploy start -d <package-dir>/main/default/digitalExperiences/site/<store-name>
2. Open Experience Builder and use new components from the palette
3. Publish your site when ready
やり取りの例
ユーザー:「オープンコードコンポーネントをストアに統合して」
エージェント:「オープンソースコンポーネントのリポジトリがローカルにすでにクローンされているか確認しています……」
エージェント: (リポジトリが存在する)
「オープンソースリポジトリはすでにクローンされています。どのように進めますか?」
- 既存のものを再利用 — すでにクローンされているリポジトリを使用します
- 再クローン — 削除して GitHub から新たにクローンします
ユーザー:「1」
エージェント:「プロジェクトに B2B ストアのメタデータがすでにローカルにあるか確認しています……」
- [done] My_B2B_Store1 のストアメタデータが見つかりました
エージェント:「ストアのサイトメタデータにオープンコードコンポーネントがすでに存在するか確認しています……」
エージェント: (ファイルが存在する)
「My_B2B_Store1 にはコンポーネントがすでに存在します。どのように進めますか?」
- すべて上書き — 既存のコンポーネントをすべてリポジトリの最新のものに置き換えます
- 新しいもののみコピー — 既存のコンポーネントはスキップし、まだ存在しないものだけをコピーします
ユーザー:「1」
エージェント:「クローンしたリポジトリから、オープンコードの LWC コンポーネントをすべてストアのサイトメタデータディレクトリにコピーしています……」 エージェント:「これらのコンポーネントに必要な関連ラベルファイルをコピーしています……」
- [done] 45 個のコンポーネントと 38 個のラベルセットをコピーしました
Integration Complete!
Copied: 45 components and 38 label sets to My_B2B_Store1
Next Steps:
1. Deploy: sf project deploy start -d force-app/main/default/digitalExperiences/site/My_B2B_Store1
2. Open Experience Builder and use new components from the palette
3. Publish your site when ready
エラー処理
| エラー | メッセージ | 対応 |
|---|---|---|
| ストアが見つからない | "Store '{name}' not found in org." | ストアを再度一覧表示します |
| Git クローンの失敗 | "Failed to clone repository. Check internet connection." | 再試行するか中止します |
| リポジトリ構造が無効 | "Repository structure has changed. Expected sfdc_cms__lwc and sfdc_cms__label." | ユーザーに警告して中止します |
| ファイルのコピーに失敗 | "Failed to copy files. Check file permissions." | エラーの詳細を表示します |
検証チェックリスト
- 起動フローが完了している:リポジトリがクローンされ、ストアメタデータが利用可能
- コンポーネントが正しいコピー先パス(
sfdc_cms__lwc/)にコピーされている - ラベルが正しいコピー先パス(
sfdc_cms__label/)にコピーされている - コピー中にファイル権限エラーが発生していない
- デプロイコマンドが提示され、テストについてユーザーに案内されている