見出し画像

Salesforceサンドボックスでサンプルデータを自動的に生成する方法

Salesforceのサンドボックスは、プラットフォーム上で開発を行う際に変更を検証し、既存の設定に支障を来さないことを確認するために頻繁に使用されます。このプロセスは、「サンドボックスシーディング」として知られ、本番環境と同様のデータをサンドボックスに模擬してテストすることが非常に重要です。

SandboxPostCopyインターフェースの活用

開発者用サンドボックスにはサンプルレコードが含まれていませんが、サンドボックスを作成またはリフレッシュする際に SandboxPostCopy インターフェースを実装するApexクラスを実行するオプションが用意されています。これにより、新しいサンドボックスがサンプルデータで満たされ、即座に使用可能な状態で提供されます。

実践例

それでは、サンドボックスをリフレッシュした際に50件の取引先と300件の関連する取引先責任者を自動的に作成する簡単な例を見てみましょう。
※下記のサンプルデータを利用してください。

  1. サンドボックスの作成

    • エンタープライズエディションの組織が必要です。本番環境で作業を行うのではなく、例の「Dev01」などのサンドボックスを迅速に作成し、Dev 01にログインします。

  2. CSVファイルのアップロード

    • サンプル取引先とサンプル取引先責任者のCSVファイルをダウンロードし、Account_csv および Contact_csv として静的リソースにアップロードします。

  3. Apexクラスの作成

global class PrepareMySandbox implements SandboxPostCopy {
    global void runApexClass(SandboxContext context) {
        // サンプル取引先の挿入
        StaticResource accountResource = [SELECT Body FROM StaticResource WHERE Name = 'Account_csv'];
        String accountCsv = accountResource.Body.toString();
        List<Account> accounts = new List<Account>();
        for (String row : accountCsv.split('\n')) {
            String[] columns = row.split(',');
            accounts.add(new Account(Name = columns[0], BillingState = columns[1], Phone = columns[2], Type = columns[3]));
        }
        insert accounts;

        // 関連する取引先責任者の挿入
        StaticResource contactResource = [SELECT Body FROM StaticResource WHERE Name = 'Contact_csv'];
        String contactCsv = contactResource.Body.toString();
        List<Contact> contacts = new List<Contact>();
        for (String row : contactCsv.split('\n')) {
            String[] columns = row.split(',');
            contacts.add(new Contact(FirstName = columns[0], LastName = columns[1], AccountId = columns[2], Title = columns[3], Phone = columns[4], Email = columns[5]));
        }
        insert contacts;
    }
}

4.テストクラスの作成

@isTest
class PrepareMySandboxTest {
    @isTest static void testMySandboxPrep() {
        Test.startTest();
        new PrepareMySandbox().runApexClass(new SandboxContext(UserInfo.getOrganizationId(), UserInfo.getOrganizationId(), UserInfo.getOrganizationName()));
        Test.stopTest();
        System.assertEquals(50, [SELECT COUNT() FROM Account]);
        System.assertEquals(300, [SELECT COUNT() FROM Contact WHERE AccountId != null]);
    }
}

5.本番環境へのデプロイ

  • 変更セット又はsfdxコマンドを使用してDev01サンドボックスから本番環境にリリースします。

  • リリース対象メタデータ:

    • 静的リソース:Accout.csv, Contact.csv, 

    • Apexクラス:PrepareMySandbox, PrepareMySandboxTest

6.サンドボックスの作成またはリフレッシュをテストする
すべてが本番環境にあるので、Dev02などの新しいサンドボックスを作成してテストします。


新しサンドボックス作成
Postスクリプト選択

作成ボタンをクリックすると新しいサンドボックスはサンプルデータが付く形で作成されるようになります。
サンプルデータが挿入されたかどうか確認しておいてね!

重要な注意事項

サンドボックスのコピーが完了した後に SandboxPostCopy Apexクラスが実行されます。この処理は組織内で見えない特別な自動プロセスユーザーによって実行されます。このユーザーはすべてのオブジェクトや機能にアクセスできないため、Apexスクリプトもすべてのオブジェクトや機能にアクセスできません。スクリプトが失敗した場合、適切な権限を持つユーザーとしてサンドボックスのアクティベーション後にスクリプトを実行してください。

この方法は、サンドボックスにデータを効率的に供給し、開発とテストをより現実的な環境で行うことができるため、非常に効果的です。しかし、ランタイム制限やデータの偏りに注意し、CSVデータのクリーンアップを忘れないようにしましょう。

PS:次のブログにて別の方法で本番同等なデータを生成する方法を紹介します。

この記事が気に入ったらサポートをしてみませんか?