dx-org-shape-manage について
Salesforce CLI で Org Shape の作成、一覧表示、削除を行うスキルです。データやメタデータを含めず、組織設定の基準を記録します。
主な機能
- 01Org Shape の作成
- 02有効・処理中の Shape の一覧表示
- 03無効な Shape 履歴の照会
- 04確認を省略した Shape の削除
- 05コマンドの JSON 出力をファイル保存
活用シーン
- 01ソース組織の設定基準の記録
- 02認証済み組織にある Shape の確認
- 03ソース組織の無効な Shape の調査
- 04組織に関連付けられた Shape の削除
インストール
コマンドをコピーしてターミナルで実行します。
npx skills add https:/ / github.com/ forcedotcom/ sf-skills --skill dx-org-shape-manageインストール後、Claude Code で/dx-org-shape-manageを入力して読み込まれたか確認します。
同梱ファイル
SKILL.md と一緒にインストールされる参考資料やスクリプト。
examples/create_error_output.jsoncreate_success_output.jsondelete_output.jsonlist_inactive_output.jsonlist_output.jsonreferences/cli_flags.md詳細
dx-org-shape-manage
sf org create shape、sf org list shape、sf org delete shape を使用して、Salesforce 組織の形状のライフサイクル全体(作成、一覧表示、削除)を管理します。組織の形状は、ソース組織の基本設定(機能、制限、エディション、Metadata API 設定)を、そのデータやメタデータを含めずに記録します。
ツールの制限
sf org ... shape コマンドの実行には、Bash ツールのみを使用してください。MCP ツールは使用せず、完全に無視してください。
評価/テスト用の出力アーティファクト: 出力ディレクトリが利用可能な場合は、コマンドの完全な JSON レスポンスを必ずファイルに書き込んでください。どのファイルに書き込むかをユーザーに尋ねないでください。このスキルでファイル名が定義されています。各コマンドの実行後、(1)ユーザーが出力先のパス(例:「生成したすべてのファイルをフォルダー X に書き込む」)を指定した場合は、直ちにそこへ書き込みます。(2)指定がない場合は、[ -d force-app/main/adk-eval-output/ ] && echo 'force-app/main/adk-eval-output' を実行して評価ディレクトリを検出します。(3)コマンドの変更されていない完全な JSON レスポンス(status/result/warnings のラッパーを含む)を、次のファイル名を使って <output-dir>/<filename> に書き込みます。形状の作成には create-shape-result.json、形状の一覧表示には list-shapes-result.json、非アクティブな形状の SOQL クエリには list-shapes-inactive-result.json、形状の削除には delete-shapes-result.json を使用してください。これが生成される出力です。確認を求めずに書き込んでください。これらの操作について「生成するファイルはありません」と言わないでください。JSON の結果が出力アーティファクトです。
対象範囲
- 対象:組織の形状の作成(
sf org create shape)、一覧表示(sf org list shape)、特定のソース組織の非アクティブな形状を含む一覧表示(ShapeRepresentationに対する SOQL)、削除(sf org delete shape) - 対象外:スナップショットの作成/確認/一覧表示/削除(
dx-org-snapshot-manageを使用)、スクラッチ組織の作成(dx-org-manageを使用)
必須入力
ユーザーのリクエストから次の情報を推測します。
- 操作:作成、一覧表示、非アクティブな形状を含む一覧表示、または削除(ワークフローの手順 1 を参照)
- ソース組織(作成、削除、非アクティブな形状を含む一覧表示):形状を作成する組織、または形状を削除/クエリする組織のユーザー名またはエイリアス。
--target-orgで指定します。通常の一覧表示(Active/InProgress のみ)にはソース組織は不要です。
注意:
--nameまたは--descriptionフラグはありません。形状はカスタム名ではなく、ソース組織の ID で識別されます。--target-dev-hubフラグはありません。形状コマンドは Dev Hub ではなく、ソース組織に対して直接実行されます。
ワークフロー
- 操作を特定し、以下のコマンドパターンに対応させます。
- 作成/削除の場合はソース組織を確認します。ユーザー名/エイリアスを特定してください。指定されていない場合は、
sf config get target-orgでデフォルトを確認します。 - Bash ツールで
--jsonフラグを付けて実行します。 - 結果を報告します(「出力に関する要件」とサンプルファイルを参照)。
コマンドパターン
| 操作 | ユーザーの意図 | Bash ツールで実行 |
|---|---|---|
| 作成 | 組織から形状を作成する | sf org create shape --target-org <alias> --json |
| 作成 | デフォルトのターゲット組織から形状を作成する | sf org create shape --json |
| 一覧表示 | すべての組織の形状と ID/ステータスを一覧表示する(Active/InProgress のみ) | sf org list shape --json |
| 一覧表示 | 一覧をファイルに保存する | sf org list shape --json > tmp/MyOrgShapeList.json |
| 一覧表示(非アクティブを含む) | 特定のソース組織のすべての形状(Inactive を含む)を一覧表示する | sf data query --target-org <alias> --query "SELECT Id, Name, Status, CreatedDate, LastModifiedDate FROM ShapeRepresentation" --json |
| 削除 | 組織の形状を削除する(確認プロンプトあり) | sf org delete shape --target-org <alias> --json |
| 削除 | プロンプトなしで形状を削除する(スクリプト/CI) | sf org delete shape --target-org <alias> --no-prompt --json |
形状の作成後、sf org list shape --json を実行して組織 IDを取得します。
Inactive な Shape の一覧表示
sf org list shape には、Inactive な Shape を表示するフラグがなく、--target-org フラグもありません(ローカルで認証済みのすべての org を常にスキャンします)。後続の sf org create shape の実行によって置き換えられた Shape も含め、ソース org の完全な Shape 履歴を確認するには、ShapeRepresentation を直接クエリします。
sf data query --target-org <alias> --query "SELECT Id, Name, Status, CreatedDate, LastModifiedDate FROM ShapeRepresentation" --json
このクエリは、ユーザーが名前を指定したソース org のinactiveまたはすべて/過去のShape を明示的に求めた場合にのみ使用してください。通常の「自分の org の Shape を一覧表示して」というリクエストでは、引き続き sf org list shape を使用します。これはドキュメントに記載された、複数 org を対象とするコマンドであり、このスキルの他の動作とも一致しています。
注意事項:
ShapeRepresentationにはSourceOrgId、username、aliasフィールドがありません。返された生のクエリフィールド(Id、Name、Status、CreatedDate、LastModifiedDate)をそのまま報告してください。これらの行にorgId/username/aliasを作り出してはいけません。- ユーザーが「すべて」/「履歴」ではなく、inactive な Shape を明示的に求めた場合に限り、対象を inactive な Shape のみに絞るため
WHERE Status = 'Inactive'を追加してください。 - 作成/削除と同じ
ShapeRepresentationの CRUD アクセスが必要です。
ルール/制約
| 制約 | 理由 |
|---|---|
常に --json フラグを使用する | 信頼性の高い解析とエラー処理のために、構造化された出力を提供します |
| ソース org で Org Shape for Scratch Orgs が有効になっている必要があります | 有効になっていない場合、作成/削除はアクセス権限なしのエラーで失敗します。ソース org の Setup → Scratch Orgs → Enable Org Shape for Scratch Orgs で有効にしてください |
ユーザーには ShapeRepresentation オブジェクトへのアクセス権が必要です | CRUD アクセス権がない場合、作成は NoCrudAccessCreateShape で失敗します。org 管理者に依頼してください |
--target-org は Dev Hub ではなく、ソース org を指定します | 作成/削除はこの org に対して実行され、Dev Hub に対する操作ではありません。一覧表示では --target-org を指定しません |
--name/--description フラグはありません | Shape は任意の名前ではなく、ソース org の ID に紐付けられます |
| ソース org ごとに有効な Shape は 1 つです | 作成を再実行すると、以前の Shape は置き換えられます(inactive に設定されます)。delete は org のすべての Shape を削除します |
delete はデフォルトで確認を求めます | 対話なし/CI で使用する場合は --no-prompt(-p)を使用してください。確認を拒否すると、削除せずに中止します |
トラブルシューティング
| 問題 | 解決方法 |
|---|---|
ShapeRepresentationNoAccess — "The org needs to be enabled for org shape before one can be created" | ソース組織で組織シェイプが有効になっていません。ソース組織で Setup → Scratch Orgs → Enable Org Shape for Scratch Orgs に移動して有効にし、再試行してください |
NoCrudAccessCreateShape — "Can't create org shape. Contact the org admin..." | ShapeRepresentation オブジェクトへのアクセス権がありません。組織管理者にアクセス権を付与してもらい、再試行してください |
ShapeCreateFailed — "Error creating scratch definition file..." | 一般的な作成エラーです。ソース組織に接続でき、認証されていることを確認して再試行してください。解決しない場合は、Salesforce サポートにお問い合わせください |
作成時の UNKNOWN_EXCEPTION(サポート用の ErrorId を含む一般的なエラーで、再試行しても再現する) | ShapeRepresentation が部分的に表示されていても、ソース組織で組織シェイプが完全に有効になっていない可能性があります。ソース組織で Setup → Scratch Orgs → Enable Org Shape for Scratch Orgs が有効であり、ユーザーに ShapeRepresentation の CRUD 権限があることを確認してから、再試行してください |
sf org list shape が空のリストを返す | シェイプがまだ存在しない(または、Active/InProgress のシェイプがない)状態です。sf org create shape で作成してください |
sf org list shape に、ユーザーが想定しているシェイプが表示されない | Active/InProgress のシェイプのみが表示され、これを変更するフラグはありません。以前の sf org create shape の実行によって、シェイプが Inactive になっている可能性があります。代わりに、その特定のソース組織に対して「非アクティブなシェイプの一覧表示」の SOQL クエリを使用してください |
| 削除がコード 68 で終了する(一部失敗) | 一部のシェイプの削除に失敗しました。JSON の failures 配列でシェイプごとのメッセージを確認し、再試行してください |
| 削除がコード 1 で終了する(すべて失敗) | 削除全体に失敗しました。組織で組織シェイプが有効であり、アクセス権があることを確認してください |
No org found for <alias>/NamedOrgNotFoundError | ソース組織のエイリアスが存在しないか、認証されていません。sf org list で確認するか、sf org login web で再認証してください |
デフォルトのターゲット組織がなく、--target-org も指定されていない | --target-org <alias> を指定するか、sf config set target-org=<alias> でデフォルトを設定してください |
出力の仕様
--json を使用すると、すべてのコマンドが JSON を返します。
- 作成 →
shapeId、success、errors。 - 一覧表示 → シェイプの配列。各シェイプには
orgId、username、alias、shapeId、status(ActiveまたはInProgress)、createdBy、createdDateが含まれます。 - 一覧表示(非アクティブを含む) → SOQL クエリの結果(
records、totalSize、done)。各レコードにはId、Name、Status(Active、InProgress、またはInactive)、CreatedDate、LastModifiedDateが含まれます。ShapeRepresentationにはそのようなフィールドがないため、orgId/username/aliasは含まれません。 - 削除 →
orgId、shapeIds(削除済み)、failures。ユーザーが確認プロンプトで拒否した場合、結果は返されません。
完全なレスポンス構造については、以下で参照されているサンプルファイルをご覧ください。
スキル間の連携
| 必要な操作 | 委任先 |
|---|---|
| スクラッチ組織を作成する、またはスナップショットを作成/使用してスクラッチ組織を作成する | dx-org-manage スキル |
| スナップショット自体を作成する、ステータスを確認する、一覧表示する、または削除する | dx-org-snapshot-manage スキル |
参照ファイル一覧
| ファイル | 読むタイミング |
|---|---|
examples/create_success_output.json | シェイプ作成成功時のレスポンス構造を確認する場合 |
examples/create_error_output.json | 一般的な作成エラーのシナリオに対応する場合 |
examples/list_output.json | 一覧表示のレスポンス構造(組織 ID、ステータス)を確認する場合 |
examples/list_inactive_output.json | Inactive のシェイプを含む一覧表示の SOQL クエリレスポンス構造を確認する場合 |
examples/delete_output.json | 削除のレスポンス構造(削除済み ID、失敗)を確認する場合 |
references/cli_flags.md | 作成/一覧表示/削除で使用するすべてのフラグについて、詳しい説明を確認する場合 |