Salesforceの開発にスクラッチ組織を使う

Salesforce

スクラッチ組織とは

概要

設定ファイルによってさまざまな状態の組織をエミュレートできます。

スクラッチ組織の設定ファイルを共有することで、開発者は同じ状態の組織を扱うことができます。

従来のSandboxで開発することに比べて、開発したい機能のみの変更が加えられるため変更範囲の特定が簡単です。

また、コマンドで一から組織を作成・廃棄できるので自動テストとの相性も良いです。

注意点

スクラッチ組織は本番環境から作成することになります。そのため、Sandboxをデフォルト組織にしてscratch orgを作成しようとしても、Dev Hubを有効化していないときのエラーが出て作ることは出来ません。また、本番環境へシステム管理者相当のユーザでアクセスすることが必要です。

1か月に作成可能な数はエディションによって異なるので注意してください。

スクラッチ組織には有効期限があります。デフォルトで7日、最長30日です。

設定ファイルに依存した組織ができあがるため、本番環境で加えた変更もありません。そのため、カスタムオブジェクトやカスタム項目などを使用したい場合は組織シェイプを作る必要があります。この機能は2021/11/28時点でベータ版の機能です。

組織シェイプに基づいてスクラッチ組織を作成する (ベータ) | Salesforce DX 開発者ガイド | Salesforce Developers
https://developer.salesforce.com/docs/atlas.ja-jp.sfdx_dev.meta/sfdx_dev/sfdx_dev_shape_intro.htm

作成方法

DevHubを有効化

設定 > 検索窓に Devを入力

認証

sfdx force:auth:web:login --setalias demodaze -d -r https://demodaze.my.salesforce.com

--setalias 短くてわかりやすい名前をつけることで、コマンドで組織を扱いやすくなります。

-d デフォルト組織に設定します。

-r ログインURLです。

設定ファイル

{ 
  "orgName": "Acme", 
  "edition": "Enterprise", 
  "features": ["Communities", "ServiceCloud"], 
  "settings": { 
      "communitiesSettings": { 
          "enableNetworksEnabled": true 
      }, 
      "mobileSettings": { 
          "enableS1EncryptedStoragePref2": true 
      }, 
      "omniChannelSettings": { 
          "enableOmniChannel": true 
      }, 
      "caseSettings": { 
          "systemUserEmail": "support@acme.com" 
      } 
  } 
}

featureに入力した機能が利用可能になります。ここではコミュニティとService Cloudを設定しています。

作成

sfdx force:org:create -f config\project-scratch-def.json -a MyScratchOrg --setdefaultusername

成功すると以下のように表示されます。

Successfully created scratch org: 00D1m0000000WI6EAM, username: test-eva9o7ceiutr@example.com

パスワード生成

sfdx force:user:password:generate --targetusername test.user@demodemodemo

成功すると以下のようなメッセージが表示されます。

Successfully set the password "goS0_4k5Y|" for user test.user@demodemodemo. 
You can see the password again by running "sfdx force:user:display -u test.user@demodemodemo".

組織からのログアウト

sfdx force:auth:logout -u test.user@demodemodemo

-u ログアウトするユーザを指定します。

コマンドを実行するとログアウトする前にパスワードを生成していない場合はログアウト前に生成してね、というメッセージが出てきます。上で作っている場合はy を入力してログアウトを実行します。

Are you sure you want to log out from these org(s)? 
     test.user@demodemodemo 
Important: You need a password to reauthorize scratch orgs. By default, scratch orgs have no password. If you still need your scratch orgs, run "sfdx force:user:password:generate" before logging out. If you don't need the scratch orgs anymore, run "sfdx force:org:delete" instead of logging out. 
Log out (y/n)?: y 
Successfully logged out of orgs.

エラー

ERROR running force:org:create:  You do not have access to the [ScratchOrgInfo] object

原因

デフォルト組織でDevHubを有効化していないためです。

対策

Classic:設定>開発>Dev Hub 「Dev Hub を有効化」を有効にしてください。