SFDX Data Move Utility(SFDMU)を使って、データ移行してみた。

やりたいこと

Salesforce組織間でデータ移行を、Dataloaderを使用せずに行いたい。

背景

Developer Sandboxは、本番からデータがコピーされない。そのため、初期データを手動で作成する必要があり、手間がかかっている。

解決方法のポイント

  • SFDX Data Move Utility(SFDMU)をインストールする。
  • 設定ファイル『export.json』を作成する。
  • 「sfdx sfdmu:run」コマンドを実行する。

SFDMUを利用してデータ移行を行ってみる

SFDMUをインストールする

sfdx plugins:install sfdmu

設定ファイル『export.json』を作成する

例) 取引先オブジェクトの項目「区分」=”Prospect”であるレコードと、その取引先レコードの取引先責任者レコードを移行する。

{
    "objects": [
        {
            "query": "SELECT all, RecordTypeId FROM Account Where Type = 'Prospect'",
            "operation": "Upsert",
            "externalId": "Name",
            "master": true,
            "deleteOldData": true
        },
        {
            "query": "SELECT all, RecordTypeId FROM Contact",
            "operation": "Upsert",
            "externalId": "Name",
            "master": false,
            "deleteOldData": true
        }
    ]
}

項目説明
query 移行する対象データを、SOQL文を用いて指定する。SELECT句に all を用いると、全項目を取得可。
ただし、レコードタイプのようにマルチセレクトキーワードでは取得できない項目も存在する。
詳細:https://help.sfdmu.com/full-documentation/advanced-features/field-multiselect
operation移行時の操作内容を指定する。"Insert"、"Update"、"Upsert"、"Delete"など。
externalId外部ID。一意な識別子。"Insert"と “Readonly “を除く操作において、移行元と移行先のレコードを比較するキー項目となる。
master“true"は、データ移行における最上位階層のオブジェクトを意味します。queryで取得される全レコードが移行対象となります。"false"を指定すると、"true"を指定したqueryで取得されるレコードの子レコードのみを移行対象にできる。
deleteOldData “true"は、移行先からQueryで取得されるレコードを削除する。データ洗い替え時に利用する。

移行組織の認証を行う

例)移行元(DevHub組織)と移行先(Scratch 組織)の両組織を認証する。
※スクラッチ組織やSandBox組織は、"-r"でSandboxインスタンスURLを指定する。

sfdx org login web -a DevHub
sfdx org login web -a Scratch -r https://test.salesforce.com

データ移行を実行する

例)DevHub組織からScratch組織にデータ移行を実行する。
※export.jsonファイルが存在するパスで、コマンドを実行する。
※"–sourceusername"には、username(xxx@yyyy.co.jp)もしくは alias を指定する。

sfdx sfdmu:run --sourceusername DevHub --targetusername Scratch

その他の機能のご紹介

まとめ

従来は、Developer Sandbox環境で開発する場合、初期データ作成に時間がかかっていました。
SFDMUプラグインを利用することで環境構築する時間を短縮でき、本題であるアプリケーション開発に時間を割くことに繋がりました。
今回紹介していない機能もまだまだ存在するため、興味がある方は実際に触ってみてはいかがでしょうか

関連資料