Salesforce 開発の最適化:Scratch Org の詳細と活用

概要とビジネスシーン

Scratch Org(スクラッチ組織)は、Salesforce DX(Developer Experience)の中核をなす一時的なSalesforce組織であり、ソースコード駆動型開発を促進し、開発、テスト、CI/CDパイプラインを劇的に加速させるための使い捨て可能な環境を提供します。

実際のビジネスシーン

シーンA:製造業 - 新製品開発サイクルの短縮

ある大手製造業では、IoTデバイスから収集されるデータをSalesforceで一元管理し、営業、サービス部門で活用する新たなソリューションを開発していました。従来のSandbox環境では、複数開発者間でのメタデータ衝突や環境セットアップの手間がボトルネックとなり、開発期間が長期化していました。

  • ビジネス課題:複雑な連携を伴う新機能開発における環境の準備と管理の手間、開発者間のメタデータ衝突。
  • ソリューション:各開発者が自身のフィーチャーブランチ(feature branch)ごとにScratch Orgを作成し、完全に独立した環境で開発を進めました。必要なメタデータは自動でプッシュされ、不要な機能は含まれません。
  • 定量的効果:開発環境のセットアップ時間を80%短縮。機能開発のイテレーションサイクルを25%高速化し、市場投入までの期間を大幅に短縮しました。

シーンB:金融サービス - 法規制対応の迅速化

金融業界の企業は、変化の激しい法規制に迅速に対応するため、Salesforce上で新しいコンプライアンス機能を頻繁にリリースする必要があります。本番環境のデータをコピーしたSandboxでは、セキュリティ要件とデータプライバシーの観点から開発に制約があり、また、多くの環境を維持管理するコストも課題でした。

  • ビジネス課題:厳格な規制要件とデータプライバシー遵守の下での迅速な機能開発とテスト、Sandboxの管理コスト。
  • ソリューション:Scratch Orgを活用し、最小限のメタデータと匿名化されたテストデータのみで規制対応機能を開発。CI/CDパイプラインにScratch Orgの作成と破棄を組み込み、自動テストを実行しました。
  • 定量的効果:コンプライアンス関連機能のリリースサイクルを30%高速化。規制変更への対応遅延リスクを軽減し、監査コストを年間15%削減しました。

シーンC:SaaS企業 - 顧客向け新機能の反復開発

顧客向けSaaS製品を提供する企業は、頻繁な機能追加と改善が求められます。しかし、複雑な既存顧客環境への影響を懸念し、新しいUIコンポーネントやAPI連携のプロトタイピングが慎重になりがちでした。

  • ビジネス課題:既存顧客環境への影響を最小限に抑えつつ、アジャイルな新機能プロトタイピングと開発を行う。
  • ソリューション:各プロトタイプや実験的な機能ごとにScratch Orgを瞬時に作成。開発者は顧客環境と完全に分離されたサンドボックスで自由に試行錯誤し、不要になればすぐに破棄。
  • 定量的効果:新機能のプロトタイピング期間を50%短縮。開発者がより多くのアイデアを迅速にテストできるようになり、顧客満足度向上と市場競争力強化に貢献しました。

技術原理とアーキテクチャ

Scratch Orgは、Salesforce DX(Developer Experience)エコシステムの一部として機能します。その基礎的な動作メカニズムは、Salesforce CLI(コマンドラインインターフェース)を通じて、Dev Hub(開発ハブ)として指定されたSalesforce組織を介して、一時的で設定可能なSalesforce組織を動的にプロビジョニングすることにあります。

主要コンポーネントと依存関係

  • Dev Hub Org:Scratch Orgを作成、管理、および監視するための親組織です。本番組織、Developer Edition組織、または無償のTrial組織をDev Hubとして有効化できます。
  • Salesforce CLI (SFDX CLI):開発者がScratch Orgの作成、ソースコードのプッシュ/プル、テストの実行、パッケージの管理などを行うための主要なインターフェースです。
  • Salesforce DX Project:開発されるアプリケーションのすべてのメタデータ(Apexコード、Visualforceページ、Lightning Web Componentsなど)と設定ファイル(sfdx-project.json, project-scratch-def.jsonなど)を含むローカルファイルシステム上のディレクトリ構造です。
  • sfdx-project.json:プロジェクトのメタデータパッケージ、パッケージの依存関係、Scratch Orgの定義ファイルへのパスなど、プロジェクト全体の構成を定義するファイルです。
  • project-scratch-def.json:作成するScratch Orgの特性(エディション、機能、設定、有効期限など)を定義するファイルです。これにより、開発者は特定のユースケースに合わせたOrgをプログラムで作成できます。
  • Source Tracking(ソース追跡):Scratch Orgとローカルプロジェクト間でソースコードの変更を追跡し、同期を容易にする機能です。これにより、開発者はOrgで行った変更をローカルにプルしたり、ローカルの変更をOrgにプッシュしたりできます。

データフロー

Scratch Orgのライフサイクルにおける主要なデータフローは以下の通りです。

ステップ 説明 関与するコンポーネント
1. Scratch Org作成指示 開発者がSFDX CLIを通じてScratch Orgの作成コマンドを実行。project-scratch-def.json に基づいて設定を指定。 SFDX CLI, project-scratch-def.json
2. Dev Hubへの要求 SFDX CLIがDev Hub Orgに対してScratch Orgのプロビジョニングを要求。 SFDX CLI, Dev Hub Org
3. Scratch Orgプロビジョニング Dev Hubが指定された設定に基づいて新しいScratch OrgをSalesforceクラウド上に作成。 Dev Hub Org, Salesforce Platform
4. 認証情報取得 SFDX CLIが新しく作成されたScratch Orgの認証情報(URL, ユーザー名, パスワード)を取得。 SFDX CLI, Scratch Org
5. ソースコードのプッシュ 開発者がローカルプロジェクトのメタデータをScratch Orgにプッシュ。この時、Source Trackingが有効になる。 SFDX CLI, ローカルプロジェクト, Scratch Org
6. 開発・テスト 開発者はScratch Org上で機能開発、テスト、デバッグを行う。Org上での変更はSource Trackingによりローカルにプル可能。 開発者, Scratch Org, SFDX CLI
7. Scratch Orgの削除 開発が完了した後、Scratch OrgはSFDX CLIを通じて削除され、関連リソースが解放される。 SFDX CLI, Scratch Org, Dev Hub Org

ソリューション比較と選定

Salesforce環境にはScratch Org以外にも開発・テストに利用できる組織タイプが存在します。それぞれの特性を理解し、適切なシーンで選択することが重要です。

ソリューション 適用シーン パフォーマンス Governor Limits 複雑度
Scratch Org
  • 新規機能開発、プロトタイピング
  • パッケージ開発(Managed/Unmanaged Package)
  • CI/CDパイプラインでの自動テスト
  • 複数の開発者による並行開発
作成・破棄が高速。ソースプッシュ/プルも効率的。 Developer Edition相当。ただしOrgごとに独立。 中:SFDX CLI, project-scratch-def.jsonの理解が必要。
Sandbox (Developer/Developer Pro)
  • 長期的な機能開発、UAT(User Acceptance Testing)
  • 本番環境に近い設定でのステージング
  • 統合テスト、パフォーマンステスト
作成に時間(数分~数日)。リフレッシュも時間がかかる。 本番環境相当。ただしデータ量による影響。 低:主にUIベースの操作。
Developer Edition Org
  • 個人開発、小規模なPoC(Proof of Concept)
  • Trailheadの学習環境
  • Dev Hubとしての利用
作成は比較的速い。永続的。 通常のDeveloper Edition制限。 低:単一Orgでの開発に適している。

Scratch Org を使用すべき場合

  • ✅ **新規機能の開発とプロトタイピング**:完全にクリーンで設定可能な環境で、既存の環境に影響を与えることなく新しいアイデアを迅速に試したい場合。
  • ✅ **パッケージ開発(Managed/Unmanaged Package)**:パッケージのバージョン管理とリリースプロセスを効率化したい場合。
  • ✅ **CI/CDパイプラインでの自動テスト**:各コード変更に対して独立した環境で自動テストを実行し、品質と安定性を確保したい場合。
  • ✅ **複数の開発者による並行開発**:チーム全体が各自のフィーチャーブランチで独立して作業し、メタデータ衝突を避けたい場合。
  • ❌ **本番環境と同等の大量データテスト**:本番環境のデータ量と構成を模倣した大規模なデータテストには適していません(主にメタデータ中心)。
  • ❌ **長期間の環境維持が必要な場合**:Scratch Orgは一時的な利用を目的としており、デフォルトで最大30日の有効期限があります。永続的なステージング環境にはSandboxが適しています。

実装例

ここでは、Salesforce DXプロジェクトを作成し、Scratch Orgを作成、設定、そして操作する基本的なCLIコマンドの例を示します。

// 1. Salesforce DX プロジェクトの新規作成
// 'my-dx-project'という名前で新しいDXプロジェクトを作成します。
// --template standard は、標準的なプロジェクト構造を生成します。
sfdx force:project:create --name my-dx-project --template standard

このコマンドを実行すると、my-dx-project ディレクトリが作成され、その中に必要なファイル(sfdx-project.json, project-scratch-def.json など)が生成されます。

// 2. Scratch Org の定義ファイル(project-scratch-def.json)の編集
// 新しく作成されたプロジェクトのルートディレクトリに移動します。
// cd my-dx-project

// project-scratch-def.json を以下のように編集して、Dev Hubで特定の機能が有効なOrgを作成します。
// この例では、Sales CloudとService Cloudの機能を持つDeveloper Edition Orgを作成します。
{
  "orgName": "My Scratch Org", // Scratch Orgの名前
  "edition": "Developer",    // Orgのエディション(Developer, Enterprise, Professionalなど)
  "features": ["SalesCloud", "ServiceCloud"], // 有効にする機能
  "settings": {              // Org全体の設定
    "lightningExperienceSettings": {
      "enableS1DesktopEnabled": true // Lightning Experienceを有効化
    },
    "mobileSettings": {
      "enableS1EncryptedStoragePref2": false // モバイルの設定
    }
  },
  "durationDays": 7 // Orgの有効期限(デフォルトは7日、最大30日)
}
// 3. Scratch Org の作成
// Dev Hub Orgが認証済みであることを前提とします。
// --set-default をつけると、このScratch Orgがデフォルトの作業Orgになります。
// --alias は、このOrgにわかりやすい名前(エイリアス)を付けます。
sfdx force:org:create --definitionfile config/project-scratch-def.json --set-default --alias my-scratch-org
// 4. ローカルのソースコードをScratch Orgにプッシュ
// ローカルのプロジェクトディレクトリにある全てのメタデータをScratch Orgにデプロイします。
// これにより、開発者はScratch Org上でコードをテストできるようになります。
sfdx force:source:push
// 5. Scratch Org をブラウザで開く
// デフォルトのブラウザでScratch Orgを開きます。
// 設定によってはSalesforceのページではなく、認証ページが開くこともあります。
sfdx force:org:open
// 6. Scratch Orgで行われた変更をローカルにプル
// Scratch Org上でDeveloper ConsoleやSetup UIを使って行ったメタデータ変更をローカルプロジェクトに同期します。
sfdx force:source:pull
// 7. Scratch Org の削除
// 作業が完了したら、Scratch Orgを削除してリソースを解放します。
// --no-prompt をつけると、確認なしで削除されます。
sfdx force:org:delete --targetusername my-scratch-org --no-prompt

注意事項とベストプラクティス

権限要件

  • Dev Hub Org の有効化:Scratch Orgを作成するには、まずDev HubとなるSalesforce組織(本番組織、Developer Editionなど)で「Dev Hub」機能を有効にする必要があります。(「設定」→「Dev Hub」で有効化)。
  • ユーザー権限:Dev Hubのユーザーは、「Create and Manage Scratch Orgs」権限が必要です。通常、システム管理者プロファイルにはこの権限が含まれていますが、カスタムプロファイルを使用する場合は明示的に付与する必要があります。

Governor Limits

  • Scratch Org 作成数の制限:デフォルトでは、Dev Hubあたり1日最大100個のScratch Orgを作成できます。組織の状況によってはこの制限は引き上げられる場合があります。
  • Scratch Org 有効期間:デフォルトの有効期限は7日間ですが、project-scratch-def.jsondurationDaysプロパティで最大30日まで設定可能です。
  • 通常のSalesforce Governor Limits:Scratch Orgも通常のSalesforce組織と同様に、ApexのSOQLクエリ制限、DML操作制限、CPU時間制限などのGovernor Limitsの対象となります。

エラー処理

  • Dev Hub is not enabled:Dev Hub OrgでDev Hub機能が有効になっているか確認してください。
  • Insufficient access rights:Dev Hubユーザーに「Create and Manage Scratch Orgs」権限が付与されているか確認してください。
  • org create failedproject-scratch-def.jsonの設定ミス(例: 存在しないエディションや機能の指定)、またはDev HubのScratch Org作成制限に達している可能性があります。
  • source push failed:ローカルメタデータの構文エラー、またはScratch Orgに依存関係が存在しない場合があります。

パフォーマンス最適化

  1. 必要な機能のみを指定project-scratch-def.json"features": []には、開発に必要な最小限のSalesforce機能のみを指定します。不要な機能を指定すると、Orgの作成時間が長くなります。
  2. shape-enabled orgs の活用force:org:shape:createコマンドで「Org Shape」を作成し、それをベースにScratch Orgを生成すると、特に大きなプロジェクトでScratch Orgの作成速度とソースプッシュのオーバーヘッドを大幅に削減できます。
  3. CI/CDパイプラインでのキャッシュ戦略:CI/CD環境では、よく使用されるパッケージや依存関係をキャッシュし、Scratch Orgにデプロイする時間を短縮します。
  4. パッケージの利用:特定の機能群をUnlocked Packageとしてパッケージ化し、Scratch Orgにインストールすることで、大量のメタデータをソースプッシュするよりも効率的になる場合があります。

よくある質問 FAQ

Q1:Scratch OrgとSandboxの一番の違いは何ですか?

A1:Scratch Orgは「使い捨て」を前提としたソースコード駆動型開発のための、軽量で一時的な環境です。メタデータ(スキーマ、コードなど)を効率的にプッシュ/プルして開発・テストを行い、不要になれば破棄します。一方、Sandboxは「本番環境のコピー」であり、より永続的な環境で、UATやステージング、統合テストなどに利用されます。データもコピーされるため、大規模なデータテストにも使われますが、作成やリフレッシュに時間がかかります。

Q2:Scratch Orgでデバッグするにはどうすればよいですか?

A2:Scratch Orgをsfdx force:org:openコマンドでブラウザで開き、Developer Console(開発者コンソール)を使用してApexコードをデバッグできます。より高度なデバッグには、Visual Studio CodeにSalesforce Extension Packをインストールし、Apex Debugger拡張機能を利用することで、ブレークポイントを設定したインタラクティブなデバッグが可能です。

Q3:Scratch Orgの作成が遅いのですが、どうすれば改善できますか?

A3:最も一般的な原因は、project-scratch-def.jsonで不要な多くの"features"を指定していることです。開発に必要な最小限の機能に絞り込むことで、作成時間を短縮できます。また、前述の「パフォーマンス最適化」セクションで説明したOrg Shapeの利用を検討してください。これにより、作成時間を大幅に短縮し、ソースプッシュの効率も向上します。

まとめと参考資料

Scratch Orgは、現代のSalesforce開発において不可欠なツールであり、アジャイル開発とCI/CDプラクティスを強力にサポートします。その使い捨て可能な性質とプログラム可能な設定により、開発者は常にクリーンで独立した環境で作業でき、メタデータ衝突のリスクを最小限に抑えつつ、開発効率と品質を向上させることができます。

  • 迅速な環境構築と破棄による開発サイクルの短縮
  • ソースコード駆動型開発の促進とバージョン管理との統合
  • CI/CDパイプラインでの自動テスト環境としての最適解

公式リソース

コメント