見出し画像

SFDX開発 スクラッチ組織初期設定Tipsと組織シェイプの使い方

こんにちは、遠藤です。

ゆるっとSalesforce #16では「スクラッチ組織作成Tips」を共有させていただきました。イベントで取り上げた話題の中からスクラッチ組織定義ファイルで機能有効化を指定する方法と組織シェイプとその使い方について解説します。

スクラッチ組織定義ファイルによる組織のセットアップ

スクラッチ組織定義ファイル(デフォルトではconfig/project-scratch-def.json)には、作成するSalesforce組織で有効化する機能や設定を細かく指定することができます。

公式の情報としては、開発ガイド「独自のスクラッチ組織定義ファイルを作成する」で解説されています。ここでは、開発ガイドを詳しく読み進めていくにあたって助けとなる概要をまとめています。

機能の有効化

個人取引先や複数取引先責任者など、多くの機能は一度有効化すると元に戻せないため、sfdx以前は開発や動作確認のために機能が有効な組織と無効な組織をそれぞれ用意して開発・検証をしなければなりませんでした。

検証用の本番組織は、ケース申請して利用可能となる環境ハブから組織を作成できます。環境ハブが使えない場合は組織作成用サインナップフォームから作成する必要があります。

sfdxではスクラッチ組織定義ファイルに有効化する機能をあらかじめ指定しておくことができます。
開発の際に必要に応じた組織を用意できるようになりますし、検証したい機能ごとに定義ファイルを複数用意しておくことで、例えば複数取引先責任者が有効な組織と無効な組織に対してCIを実行するといったことが楽にできるようになります。

機能の有効化は、featuresに指定します。
以下のように、有効化する機能の文字列を配列で指定します。

"features": ["PersonAccounts", "SharedActivities"],

指定可能な機能は、開発ガイド「Scratch Org Features」に一覧があります。日本語版は設定値まで翻訳されてしまっているので、英語の方を参照する方が良さそうです。

私が実際に使ったことがあるものは、以下のような機能があります。それほど多くないですね。

  • DebugApex: 対話型デバッガを使用するためには有効化が必要です。

  • PersonAccounts: 個人取引先を有効化します。

  • SharedActivities: 複数取引先責任者を有効にします。

  • Communities: コミュニティを有効化します。

組織の設定

すべてのメタデータ API 設定をスクラッチ組織定義ファイルで指定できます。

参考: 「スクラッチ組織設定 | Salesforce DX 開発者ガイド」

設定 | メタデータ API 開発者ガイド」に載っているメタデータ型の設定項目がすべて使えるのは非常に便利です。

以下は、設定のログインアクセスポリシー「管理者は任意のユーザでログインできる」を有効化し、セッション設定の「ユーザとしてログインしてから再ログインを強制する」を無効化する例です。

{
  ...,
  "settings": {
    "securitySettings": {
      "enableAdminLoginAsAnyUser": true,
      "sessionSettings": {
        "forceRelogin": false
      }
    }
  }
}

いずれも、デフォルトは逆なので常にこの設定を入れておいても良さそうです。

設定項目のキーは、メタデータAPIでは大文字始まりですが、スクラッチ組織定義ファイルでは小文字始まりで指定します。

オブジェクト設定

オブジェクトの共有設定も指定することができます。
デフォルトでは商談は「非公開」だったりするので、プロジェクトで商談にアクセスする場合などはあらかじめ設定しておくと便利です。

以下、商談の共有設定を「公開/参照・更新可能」にします。

{
  ...
  "objectSettings": {
    "opportunity": {
       "sharingModel": "readWrite"
    },
    ...
  }
}

その他便利な設定

hasSampleData

trueを指定すると、サンプルレコードを追加してくれます。
改めて確認してみましたが、取引先、取引先責任者、リード、キャンペーン、商談、ケース、商品、価格表オブジェクトにレコードがありました。

release

Salesforce リリースの移行期間中に「preview」を指定すると、次のバージョンのプレビュー組織になるようです。

これは今まで知りませんでしたが、これまでプレビュー組織は専用フォームから作成していたので便利になりそうです。

組織シェイプ

次は組織シェイプです。

組織シェイプは、本番組織から以下の設定をコピーしたスクラッチ組織を作成できる機能です。

  • 機能

  • メタデータ API 設定

  • エディション

  • 制限

  • ライセンス

参考:「組織シェイプに基づいたスクラッチ組織の作成」

これらはスクラッチ組織定義ファイルでも設定可能なので、ユースケースがイマイチわからないのですが、「本番運用している組織向けの開発でSandboxではなくスクラッチ組織で開発をしたい」といった場合などが考えられそうです。
本番で運用しているシステム管理者が都度設定を変更するので、組織の設定をすべて把握するのは難しそうですので、そういった組織に対してスクラッチ組織で開発したい場合は組織シェイプを利用することになりそうです。

登場組織の整理

組織シェイプを利用にあたって「Dev Hub組織」と「ソース組織」という名前の組織が登場します。

ソース組織
ソース組織は、コピーしたい設定を含む本番組織です。本番組織なのでEnterprise、Unlimitedを始めDeveloperなどのエディションの組織が該当します。

Dev Hub組織
sfdx開発に慣れている開発者であれば説明不要ですが、sfdxで開発をするためのスクラッチ組織を管理する組織がDev Hub組織となります。

以下、組織シェイプの利用手順について、開発者ガイドの順序に沿って、
開発ガイドではわかりにくい点を中心に解説します。
各見出しに開発ガイドへのリンクが貼ってありますので適時参照してください。

組織シェイプの有効化

ソース組織として利用したい組織と、Dev Hub組織の両方で組織シェイプを有効化する必要があります。

Salesforceを普段運用している本番組織がDev Hub組織で、その組織を組織シェイプ化したい場合は、Dev Hub組織である本番組織のみ組織シェイプを有効化します。

Dev Hub組織で組織シェイプを有効化

クイック検索で「組織シェイプ」を入力して、「組織シェイプ」を開き「スクラッチ組織の組織シェイプを有効化」のスイッチをOnにします。

ソース組織で組織シェイプを有効化

Dev Hub組織と同様に、「組織シェイプ」を開き「スクラッチ組織の組織シェイプを有効化」のスイッチをOnにします。

次に、Dev Hub組織の組織IDを入力して「保存」します。

組織を開いての設定は以上です。

組織シェイプ管理用の権限を付与

組織シェイプを作成するユーザがDev Hub組織のシステム管理者である場合は省略可能です。

システム管理者ではないユーザが組織シェイプを作成するケースは、ドキュメントに記載されているオブジェクト権限を付与する必要があります。

組織シェイプを作成

組織シェイプは、sfdxコマンドを使用して作成します。

まずは、Dev Hub組織にログインします。

$ sfdx auth:web:login -d -a my-devhub

続けて、ソース組織にもログインします。

$ sfdx auth:web:login -a source-org

以下のコマンドでソース組織を作成します。

$ sfdx force:org:shape:create -u source-org 
Successfully created org shape for 3SR2w000000XXXX.

作成済みのソース組織は以下のコマンドで確認します。
ORG ID、以下の例では「00DXXXXXXXXXXX」をスクラッチ組織作成時に指定しますので、コピーして控えておきます。

$ sfdx force:org:shape:list
=== Org Shapes

ALIAS USERNAME ORG ID SHAPE STATUS CREATED BY CREATED DATE 
────────── ────────────────────────── ────────────────── ──────────── ────────────────────────── ──────────────────────────── 
source-org mysourceorg@co-meeting.com 00DXXXXXXXXXXX Active mysourceorg@co-meeting.com 2023-03-24T03:23:33.000+0000

組織シェイプを使用したスクラッチ組織の作成

スクラッチ組織定義ファイルのsourceOrgに作成した組織シェイプのORG IDを指定します。

{
  "orgName": "my company",
  "sourceOrg": "00DXXXXXXXXXXX"
}

editionなど、ソース組織からコピーされる設定は省略しておく必要があるようです。

スクラッチ組織の作成はいつものコマンドです。

sfdx org create scratch -a orgshape-SCRATCH -d -f config/project-scratch-def.json

組織シェイプを指定したスクラッチ組織の作成は、シンプルなものでもかなり時間がかかります。

イベントの中で、「ソース組織で設定変更したら組織シェイプは作成し直さないとならないのか?」また、「Salesforceのバージョンが上がった場合に古くなった組織シェイプは使えるのか?」という質問がありました。
このあたりは後日検証して追記させていただきたいと思います。

Admin.profile-meta.xml

付け足しですが開発用のプロファイルについても少しまとめておきます。

プロジェクトに含まれるプロファイルAdmin.profile-meta.xmlは、システム管理者プロファイルですが、作成された組織のデフォルトのシステム管理者「User User」に割り当てられます。

つまり、スクラッチ組織のセットアップを定義する場合は、Admin.profile-meta.xmlを活用することができます。(ソースのpushは必要です)

例えば、「ID を確認」メールが飛ばない用にするためにプロファイルのログインIPアドレスを設定することが多いかと思いますが、以下のようにプロファイルに指定できます。

<?xml version="1.0" encoding="UTF-8"?>
<Profile xmlns="http://soap.sforce.com/2006/04/metadata">
    <custom>false</custom>
    <loginIpRanges>
        <endAddress>255.255.255.255</endAddress>
        <startAddress>0.0.0.0</startAddress>
    </loginIpRanges>
</Profile>

このプロファイルはパッケージの作成時に作られるスクラッチ組織にも適用され、一部権限などプロファイルの設定がパッケージのデフォルトとして適用されるので、注意が必要です。
ページレイアウトの割り当てのデフォルトを含めたいなど、明示的にパッケージに含める必要がある場合を除いては、unpackagedなどパッケージ対象外のディレクトリに配置することをお勧めします。

おわりに

以上、スクラッチ組織を作成する際に予め指定できる設定・機能について見てきました。私もオブジェクトの共有設定などは知らずに、作成後に開いて設定を変更していたこともありましたが、ほぼすべての設定が事前定義できるというのはなかなか目からウロコでした。開発ガイドはしっかり目を通しておくべきですね。

ところで、co-meetingでは、社内に複数のプロダクトがあり、かつ、顧問Salesforceプログラマの案件では主にお客様のAppExchangeアプリの開発のお手伝いをさせていただいているため、普段の業務でsfdxプロジェクトを作成・整理する機会がよくあります。

各プロジェクトでは、スクラッチ組織を作成し、ソースをpushして各アプリケーションに応じたセットアップスクリプトを実行するといった流れをpackage.jsonのscriptsに記述して、開発用、テスト用のスクラッチ組織を自動でセットアップできるようにしています。
このあたりもいつか共有して、議論する機会を設けたいところです。