Salesforceスクラッチ組織の徹底活用:アーキテクト向けモダン開発ガイド

背景と適用シナリオ

従来のSalesforce開発は、サンドボックスを中心に行われてきました。開発者サンドボックス、部分的なコピーサンドボックス、フルサンドボックスなど、目的の異なる環境が用意されていますが、いくつかの課題を抱えていました。例えば、サンドボックスのリフレッシュには時間がかかり、環境間の設定の差異(Configuration Drift)が発生しやすく、バージョン管理システム(VCS)ではなく、組織そのものが「信頼できる唯一の情報源(Source of Truth)」となりがちでした。これらの課題は、チーム開発の効率性やデプロイの信頼性を損なう原因となっていました。

この状況を打開するために登場したのが、Salesforce DX (SFDX) という新しい開発手法とツールセットです。その中核をなすのが、本記事のテーマである Scratch Orgs (スクラッチ組織) です。

スクラッチ組織は、ソースコード主導で作成される、一時的で設定可能な使い捨てのSalesforce環境です。これまでのサンドボックスとは異なり、必要な機能や設定を定義ファイルに記述し、コマンド一つでクリーンな環境を数分で作成できます。この特性により、以下のようなシナリオで絶大な効果を発揮します。

  • 機能開発と分離: 各開発者や各機能ブランチが、他の開発者の影響を受けない独立した環境で作業できます。
  • 自動テスト: CI/CD (継続的インテグレーション/継続的デリバリー) パイプラインに組み込み、プルリクエストごとに自動で組織を作成し、テストを実行して破棄する、といった運用が可能です。
  • バグの再現: 特定のメタデータ構成を持つ組織を簡単に再現できるため、本番環境や特定の顧客環境で発生したバグの再現と修正が容易になります。
  • PoC (概念実証): 新しい機能やアイデアを試すための環境を、本流の開発環境を汚すことなく迅速に準備できます。

原理説明

スクラッチ組織の仕組みを理解するには、Salesforce DXが提唱する「ソース駆動開発(Source-Driven Development)」の概念を理解することが重要です。これは、組織のメタデータ(Apexクラス、Visualforceページ、オブジェクト定義など)を、組織内ではなくGitなどのバージョン管理システムで管理し、それを「信頼できる唯一の情報源」とする考え方です。

スクラッチ組織は、このソース駆動開発を実践するための環境であり、以下の主要な要素から成り立っています。

Dev Hub (開発ハブ)

Dev Hubは、スクラッチ組織や第二世代管理パッケージを管理・追跡するための中核となるSalesforce組織です。通常、本番組織またはビジネス組織で有効化します。どのスクラッチ組織が作成され、誰が所有し、いつ有効期限が切れるかといった情報を一元管理します。Dev Hubがなければ、スクラッチ組織を作成することはできません。

Salesforce CLI (SFDX CLI)

開発者がローカルマシンからDev Hubやスクラッチ組織を操作するためのコマンドラインインターフェースです。スクラッチ組織の作成、ソースコードのプッシュ・プル、テストの実行、データのインポート・エクスポートなど、開発ライフサイクルにおけるほぼ全ての操作をコマンドで実行できます。

スクラッチ組織定義ファイル (project-scratch-def.json)

作成するスクラッチ組織の「設計図」となるJSONファイルです。このファイルに、組織のエディション(Developer, Enterpriseなど)、有効化したい機能(Person Accounts, Multi-Currencyなど)、そして特定の設定(セキュリティ設定など)を定義します。この定義ファイルがあることで、チーム全員が同じ構成のクリーンな開発環境を何度でも再現できるようになります。

スクラッチ組織のライフサイクルは非常にシンプルです。

  1. 作成 (Create): 開発者はSalesforce CLIを使い、Dev Hubに認証した上で、定義ファイルに基づいてスクラッチ組織の作成を要求します。
  2. 開発 (Develop): 作成されたスクラッチ組織に、ローカルのソースコードをプッシュ (force:source:push) します。開発作業中に組織側で行った変更は、ローカルにプル (force:source:pull) して同期します。
  3. テスト (Test): Apexテストの実行や手動テストを行います。CI/CDパイプラインではこのステップが自動化されます。
  4. 破棄 (Delete): 開発やテストが完了すれば、スクラッチ組織は手動または自動で削除されます。デフォルトの有効期間は7日間(最大30日)で、期限が過ぎると自動的に無効化されます。

この「作成しては捨てる」というサイクルこそが、常にクリーンで予測可能な開発環境を維持する鍵となります。


示例代码

ここでは、Salesforce CLIを使用してスクラッチ組織を作成し、開発を行う一連の流れを具体的なコードで示します。これらのコードはSalesforceの公式ドキュメントに基づいています。

1. スクラッチ組織定義ファイル (project-scratch-def.json)

まず、プロジェクトのルートにある `config` ディレクトリ内に、作成したい組織の形状を定義する `project-scratch-def.json` ファイルを用意します。

{
  "orgName": "DreamHouse Realty",
  "edition": "Developer",
  "features": ["EnableSetPasswordInApi"],
  "settings": {
    "lightningExperienceSettings": {
      "enableS1DesktopEnabled": true
    },
    "mobileSettings": {
      "enableS1EncryptedStoragePref2": false
    },
    "quoteSettings": {
      "enableQuote": true
    }
  }
}

詳細なコメント

  • orgName: 作成されるスクラッチ組織に与えられる名前です。
  • edition: 組織のエディションを指定します。通常、開発では `Developer` を使用します。
  • features: 有効化したい追加機能を配列で指定します。`EnableSetPasswordInApi` はAPI経由でユーザーパスワードを設定可能にする機能です。
  • settings: より詳細な組織設定をオブジェクト形式で指定します。ここではLightning Experienceの有効化、モバイル設定、見積もり機能の有効化を行っています。

2. コマンドラインによる操作

次に、Salesforce CLIを使ってスクラッチ組織を操作します。

ステップ 1: スクラッチ組織の作成

定義ファイルを使用して、有効期間10日のスクラッチ組織を作成し、「my-scratch-org」というエイリアスを設定します。

# Dev Hub組織にまだ認証していない場合は、まず認証します。
# sfdx auth:web:login -d -a MyDevHub

# スクラッチ組織を作成します
sfdx force:org:create -f config/project-scratch-def.json -s -a my-scratch-org -d 10
  • -f: 使用する定義ファイルのパスを指定します。
  • -s: この組織をデフォルトの組織として設定します。これにより、後続のコマンドで `-u` オプションを省略できます。
  • -a: 組織にエイリアス(別名)を付け、管理しやすくします。
  • -d: 組織の有効期間を日数で指定します(1〜30日)。

ステップ 2: メタデータのプッシュ

ローカルプロジェクトにあるメタデータ(Apexクラス、オブジェクトなど)をスクラッチ組織にデプロイします。

sfdx force:source:push

ステップ 3: 権限セットの割り当て

開発に必要な権限をユーザーに割り当てるため、あらかじめ定義しておいた権限セットを割り当てます。

sfdx force:user:permset:assign -n MyAdminPermissions
  • -n: 割り当てる権限セットのAPI名を指定します。

ステップ 4: Apexテストの実行

プッシュしたコードの品質を担保するため、Apexテストを実行します。

sfdx force:apex:test:run -l RunLocalTests -r human
  • -l: テストレベルを指定します。`RunLocalTests` は管理パッケージ以外の全てのテストを実行します。
  • -r: 結果の出力形式を指定します。`human` は人間が読みやすい形式で表示します。

ステップ 5: スクラッチ組織の削除

作業が完了したら、不要になったスクラッチ組織を削除してリソースを解放します。

sfdx force:org:delete -u my-scratch-org -p
  • -u: 操作対象の組織をエイリアスまたはユーザー名で指定します。
  • -p: 確認プロンプトを表示せずに削除を実行します。CI/CDスクリプト内で使用する際に便利です。

注意事項

スクラッチ組織を効果的に活用するためには、いくつかの制約や注意点を理解しておく必要があります。

  • Dev Hubの有効化: スクラッチ組織を作成するには、本番組織またはTrailhead PlaygroundでDev Hub機能を有効化する必要があります。一度有効にすると無効にはできません。
  • API制限: スクラッチ組織の作成や管理はAPIを消費します。Dev Hub組織のAPIコールリミットに注意し、特に大規模なCI/CDプロセスを構築する際は、リミットに達しないよう設計する必要があります。
  • 組織の制限: Dev Hubごとに作成できるスクラッチ組織の数には上限があります。一般的に、有効なスクラッチ組織は100個、1日あたりの作成数は200個が上限ですが、契約によって異なる場合があります。sfdx force:limits:api:display -u MyDevHub コマンドで現在の消費状況を確認できます。
  • データの不在: スクラッチ組織はメタデータのみで作成され、データは含まれません。テストや開発に必要なデータは、Salesforce CLIのデータ操作コマンド(force:data:tree:importなど)を使って別途投入する必要があります。
  • サンドボックスの代替ではない: スクラッチ組織は、開発や自動テストには最適ですが、全てのサンドボックスの役割を代替するものではありません。大規模なデータセットを扱うUAT(ユーザー受け入れテスト)やパフォーマンステスト、ステージング環境としては、依然としてPartial CopyサンドボックスやFullサンドボックスが適しています。
  • ソース追跡: SFDXはローカルとスクラッチ組織間のメタデータの変更を追跡します。しかし、稀にこの追跡がずれることがあります。sfdx force:source:status コマンドで差分を確認し、必要に応じて .sfdx ディレクトリ内の追跡情報をリセットすることで解決できる場合があります。

まとめとベストプラクティス

スクラッチ組織は、Salesforce開発を従来の「組織中心」からモダンな「ソースコード中心」へと変革する強力なツールです。その一時的で再現可能な性質は、開発の俊敏性、品質、そして自動化のレベルを飛躍的に向上させます。

最後に、スクラッチ組織を最大限に活用するためのベストプラクティスをいくつか紹介します。

  1. バージョン管理を徹底する: GitのようなV

コメント