この記事では、 Salesforce の Sandbox でソース追跡する方法ご紹介します。
ソース追跡はスクラッチ組織で開発を行う際に、組織上での変更とローカルプロジェクト上での変更を自動で検出し、開発中に行ったすべての変更作業を漏れなくテスト環境や本番環境にリリースできるようにするための仕組みです。この機能が(現在はベータですが)サンドボックスでも利用できるようになったため、変更セットを使った開発に代わる新たな開発手法として期待されています。
Salesforce の Sandbox でソース追跡する機能は、本記事の投稿時点はベータ提供中の機能となります。
本番組織でサンドボックスのソース追跡を有効化する
Sandbox でソース追跡をするには、Sandbox を作成する本番組織で 設定 > 開発 > DevHub > Enable Source Tracking in Developer and Developer Pro Sandboxes (BETA)
を予め有効化しておく必要があります。
Sandbox を作成する
Sandbox は 設定 > 環境 > Sandbox
から UI ベースで作成することもできますが、今回はせっかくなので Salesforce CLI で Sandbox を作成する方法を試してみます。
以下のコマンドでは本番組織にログインした後、その組織に対して MyDevSbx という名前の Developer Sandbox を作成しています。Sandbox の作成には数分かかるので -w 30
を指定し、コマンド実行のタイミアウト時間を 30 分に延長(デフォルトは 6 分)しています。また、Sandbox にログインするためのユーザー名が自動で生成されますが、覚えづらいので -a
で別名をつけておきます。
# Salesforce CLI で本番組織にログインし、MyOrg という別名をつけておく
$ sfdx force:auth:web:login -a MyOrg
# MyOrg に対し Sandbox を作成し、DevSbxForSourceTracking という別名をつけておく
$ sfdx force:org:create -u MyOrg -t sandbox sandboxName=MyDevSbx licenseType=Developer -a DevSbxForSourceTracking -w 30
> Name Value
> ─────────────────────────── ─────────────────────────────────
> Id 0GRXXXXXXXXXXXXXXX
> SandboxName MyDevSbx
> Status 完了
> CopyProgress 100
> Description
> LicenseType DEVELOPER
> SandboxInfoId 0GQXXXXXXXXXXXXXXX
> SourceId
> SandboxOrg 00DXXXXXXXXXXXX
> Created Date 2020-12-26T06:30:48.000+0000
> ApexClassId
> Authorized Sandbox Username user001@example.com.mydevsbx
# Sandbox が作成できたら、確認のためログインしてみる
$ sfdx force:org:open -u DevSbxForSourceTracking
ヘッダーに Sandbox: MyDevSbx
と表示される Sandbox 組織が開いたら成功です。
Sandbox のソース追跡を試す
それでは、今作成した Sandbox でソース追跡が有効になっているかを確認してみます。
Sandbox 上で 取引先(Account)
オブジェクトに テスト(Test__c)
という項目を追加しました。
そして、ソース追跡の状況を確認します。
下のように、Account.Test__c
が Remote
で Add
された事が検出できているので、正常にソース追跡できています。
$ sfdx force:source:status -u DevSbxForSourceTracking
> === Source Status
> STATE FULL NAME TYPE PROJECT PATH
> ────────── ─────────────── ─────────── ────────────
> Remote Add Account.Test__c CustomField
最後にこの変更内容をソース形式のメタデータとしてローカルプロジェクトに取り込みます。
$ sfdx force:source:pull -u DevSbxForSourceTracking
=== Pulled Source
STATE FULL NAME TYPE PROJECT PATH
───── ─────────────── ─────────── ────────────────────────────────────────────────────────────────────
Add Account.Test__c CustomField force-app/main/default/objects/Account/fields/Test__c.field-meta.xml
下のように、 Test__c.field-met.xml
という名前のメタデータがローカルプロジェクト内に取得できました。このように、Sandbox 上で行った変更も自動で検出しローカルのプロジェクトフォルダ内に取り込めるので、リリース漏れの心配がなくなりますね。
おまけ: Sandbox のソース追跡を使った開発でよく使うコマンド
一緒に覚えておきたいよく使うコマンドたちもご紹介しておきます。
# Sandbox 上での変更は pull することでローカルプロジェクトに取り込める
$ sfdx force:source:pull -u DevSbxForSourceTracking
# ローカルプロジェクトでの変更は、push することで Sandbox に反映できる。
$ sfdx force:source:push -u DevSbxForSourceTracking
# Sandbox 上の既存のメタデータを取り込みたい場合は retrieve が使える
$ sfdx force:source:retrieve -u DevSbxForSourceTracking -m ApexClass:MyApexClass