今回は Salesforce で組織シェイプを使ったスクラッチ組織の作成を試してみました。
組織シェイプを使うと、特定の本番組織の状態を再現したスクラッチ組織を手軽に作成できるようになります。主な用途としては、スクラッチ組織で開発する際に本番環境に近い環境が必要な場合や、トラブルシューティングのために特定のお客様の環境を再現したい場合などとされています。
注意点としては、再現されるのは永続的な(ユーザーによって変更されない)設定情報のみであるという点です。主にエディション、契約によって有効化される機能、制限、ライセンスなどが対象となっていて、データ、メタデータ、各機能の有効化状況などは含まれません。このあたりがサンドボックスとの違いになります。
Salesforce の組織シェイプを使ったスクラッチ組織の作成する機能は、本記事の投稿時点はベータ提供中の機能となります。
組織シェイプの有効化と権限の設定
組織シェイプを利用するには、コピー元の本番組織で 設定 > 開発 > 組織シェイプ
から組織シェイプを有効化しておく必要があります。また、どの DevHub 組織でスクラッチ組織の作成を許可するかを指定します。これによって、許可されていない DevHub 組織からエディションやライセンスに関する本番環境での利用状況が勝手に読み取られないようにします。
次に、スクラッチ組織を作成する DevHub 組織で、権限セットを作成しスクラッチ組織を作成するユーザーに割り当てます。組織シェイプを作成する人とスクラッチ組織を作成する人が異なる場合があるので、必要に応じで権限セットを分ける事もできます。
組織シェイプを作成する
組織シェイプの作成は、コピー元となる本番組織を認証した Salesforce CLI から行います。組織シェイプの作成後、STATUS
が ACTIVE
になっていれば組織シェイプを使用してスクラッチ組織を作成する事ができます。
# Salesforce CLI で本番組織にログインし、ProdOrg という別名をつけておく
$ sfdx force:auth:web:login -a ProdOrg
# ProdOrg から組織シェイプを作成する
$ sfdx force:org:shape:create -u ProdOrg
Successfully created org shape for 3SRXXXXXXXXXXXXXXX.
# 有効な組織シェイプを確認する
$ sfdx force:org:shape:list
=== Org Shapes
ALIAS USERNAME ORG ID SHAPE STATUS CREATED BY CREATED DATE
─────── ─────────────────── ────────────────── ──────────── ─────────────────── ────────────────────────────
ProdOrg user001@example.com 00DXXXXXXXXXXXXXXX Active user001@example.com 2020-12-26T08:25:08.000+0000
組織シェイプを使ってスクラッチ組織を作成する
それでは、作成した組織シェイプからスクラッチ組織を作成してみます。
スクラッチ組織を組織シェイプから作成するには sourceOrg
としてコピー元の組織 ID を指定した *-scratch-def.json
ファイルを作成します。
{
"orgName": "Scratch Org with Shape",
"sourceOrg": "00DXXXXXXXXXXXXXXX"
}
あとは、この定義ファイルを使って、いつも通り Dev Hub 組織でスクラッチ組織を作成するだけです。
# Salesforce CLI で Dev Hub 組織にログインし、DevHub という別名をつけておく
$ sfdx force:auth:web:login -a DevHub
# sourceOrg を指定した定義ファイルでスクラッチ組織を作成する
$ sfdx force:org:create -v DevHub -t scratch -f config/example-shape-scratch-def.json -a ScratchOrgWithShape -d 1 -w 30
Successfully created scratch org: 00DXXXXXXXXXXXXXXX, username: test-xxxxxxxxxxxx@example.com
# 組織シェイプを使って作成したスクラッチ組織を開く
$ sfdx force:org:open -u ScratchOrgWithShape
作成したスクラッチ組織がコピー元の本番環境と同じ状態になっているかを確認するには、 設定 > 会社の設定 > 組織情報
でエディションやライセンスを比較してみると分かりやすいかと思います。一方で、メタデータやデータはコピーされないので、アプリケーションやオブジェクトなどはコピーされていないはずです。
おまけ: 本番組織でどのライセンスや機能が使われているのかを確認する
組織シェイプでは、シェイプの作成時に本番組織で利用しているライセンスや機能をスクラッチ組織の定義ファイルとして書き出す機能があります。これを使うと、本番組織でどのライセンスや機能が使われているのかを一覧で確認する事ができるので知っておくと便利かもしれません。
# ProdOrg に対し組織シェイプを作成し、コンフィグファイルに書き出す
$ sfdx force:org:shape:create -u ProdOrg -f config/exported-shape-scratch-def.json
Successfully created scratch org definition file in the project's config directory for exported-shape-scratch-def.json.
# 書き出されたスクラッチ組織の定義ファイルを開く
$ cat config/exported-shape-scratch-def.json
{
"edition": "developer",
"features": [
"addcustomapps:XX",
"addcustomfields:XX",
"addcustomobjects:XX",
"addcustomrelationships:XX",
...