Salesforceレコードデータをパッケージ化して任意の組織へロードする方法


概要

Salesforceで構築したシステムのテスト環境を用意する際、複数組織に渡って統一されたデータ環境を準備するのは困難です。Sandbox組織でも Full / Partial Copyができない環境のことも多く、また組織コピーには時間がかかり、回数にも制限があります。かといってデータローダーでのインポートは手作業が多く、特に参照関係をまたがったデータのローディングは熟練者でもなかなか至難の業です。

一方、Salesforceではパッケージという仕組みで、カスタムオブジェクトやカスタム項目などのメタデータ定義をまとめ、さらにそのパッケージをアップロードして配布用のURLを作成し、他組織に配布することができます。

ここではその仕組を利用して、ある組織で作成したレコードデータをパッケージ化し、そのパッケージをインストールすることで、誰でもSalesforceデータの初期ロード(移入)とセットアップが容易にできるようにします。

活用シーン

  • テストデータの配布
  • デモデータの配布
  • チュートリアルコンテンツの配布
  • 本番環境から(Developer) Sandbox組織へのデータ移行

事前セットアップ

レコードデータをバンドルしたパッケージを作成するには、Salesforce CLIおよびプラグインを利用します。
これはパッケージの作成者のみが必要なものであり、作成されたパッケージをインストールしてデータをロードするユーザには必要ありません(Salesforceの管理者アカウントとWebブラウザのみでOK)。

Salesforce CLIのインストール

sfdx-migration-automatic プラグインのインストール

$ sfdx plugins:install sfdx-migration-automatic

Salesforce CLIからSalesforce組織へのログイン

$ sfdx auth:web:login

ブラウザ画面が立ち上がるので、デモデータを作成したSalesforce組織の管理者ユーザでログインしておきます。

パッケージの作成

CSVデータのエクスポート

(事前にSalesforce上で対象となるレコードがオブジェクトに保存されている前提)
Salesforce CLIから以下のコマンドを実行し、オブジェクトに含まれるレコードデータを全部CSVファイルとして排出します。

$ sfdx automig:dump \
   --objects CustomObj01__c,CustomObj02__c \
   --outputdir dump \
   --targetusername {Salesforce組織ユーザ名} 

--objects 以下にデータをCSVファイルとしてエクスポートしたいオブジェクトのAPI参照名をカンマ区切りで列挙します。--outputdir にCSVの排出先のディレクトリ名を指定します。

エクスポート対象のデータに他オブジェクトのレコードへの参照が含まれている場合、以下のようにオブジェクト名の後に :related と付与することで、参照しているレコードのみをエクスポートします。

$ sfdx automig:dump \
   --objects CustomObj01__c,CustomObj02__c,Account:related,Contact:related \
   --outputdir dump \
   --targetusername {Salesforce組織ユーザ名} 

コマンド実行後、dump ディレクトリ以下にCSVファイルが生成されていることを確認します。

CSVデータをバンドル化してパッケージを作成

以下のコマンドを実行して、CSVデータをパッケージにバンドルして追加します。

$ sfdx automig:package \
   --inputdir dump \
   --packagename {パッケージ名} \
   --targetusername {Salesforce組織ユーザ名} 

--packagename オプションで新規作成するパッケージの名前を指定します。既存のパッケージ名を指定した場合はそのパッケージにバンドルされたCSVデータがコンポーネントとして追加されます。

パッケージ作成に成功するとパッケージIDがコンソール表示されます。

$ sfdx automig:package --inputdir dump --packagename="デモ用パッケージ" --targetusername=[email protected]
Creating Migration App Package... done

Status: Succeeded
Success: true
Done: true
Number Component Errors: 0
Number Components Deployed: 3
Number Components Total: 3
Number Test Errors: 0
Number Tests Completed: 0
Number Tests Total: 0

Deployed Package ID: 0332J000000DSeBQAW

Salesforce組織の 設定 > アプリケーション > パッケージ > パッケージマネージャ から該当のパッケージ名を検索し、詳細画面に以下のようにコンポーネントが含まれていることを確かめます。

パッケージのアップロード

パッケージの詳細画面から、「アップロード」ボタンをクリック。

パッケージ名、パッケージバージョンを適当に入力し、「アップロード」を実行。

しばらくするとインストール用URLが表示されます。
このインストールURLを利用して、他の組織に対しても簡単にデモデータを配布可能となります。

パッケージのインストール

先のステップで得られたインストールURLにアクセスし、デモデータをインポートしたいSalesforce組織に管理者アカウントでログインします。
Sandbox組織やScratch組織の場合、URL中の login.salesforce.com を test.salesforce.com に置き換えてアクセスする必要があります。

パッケージ詳細画面が現れたらそのまま「インストール」を実行

インストール完了したら、アプリケーションランチャーから「Migration Commander」タブを検索し、選択

タブの画面内にパッケージされたCSVデータのリストが表示されます。

データのロード

Migration Commander内の Load Data ボタンをクリックすると、ダイアログが表示され、パッケージされているCSVデータのローディングが開始されます。

ロード完了後、エラーなどがある場合は Failuresタブ内に情報が表示されます。

実際にデータがロードされたかどうかを確かめます。ちゃんと元々のSalesforce組織での参照関係を維持した状態でデータの取り込みが行われています。

データロードが完了したら、このパッケージは用済みです。アンインストールして構いません。
設定 > アプリケーション > パッケージ > インストール済みパッケージからアンインストール可能です。

なお Migration Commander 画面で表示されるテーブル内の Num of Existing Records 列には、現在のSalesforce組織内で格納されているレコードの総数が表示されます。この数字の横にあるDeleteリンクを押すと、その組織にあるオブジェクト内のレコードデータを全消去します。データをかんたんにクリーンにすることができますが、組織環境によっては危険な行為になりうるので、実行する際には細心の注意をもって実行してください。