背景と適用シナリオ
Salesforce 開発者の皆さん、こんにちは! Salesforce 開発者として、本日は私たちの開発プロセスを根底から変える力を持つ、Salesforce DX (Developer Experience) の中核機能であるスクラッチ組織 (Scratch Org) について深掘りしていきます。
従来の Salesforce 開発では、多くの場合、開発者用の Sandbox や共有の Sandbox 環境が使用されてきました。しかし、このアプローチにはいくつかの課題が内在していました。例えば、環境のリフレッシュに時間がかかる、複数の開発者による変更がコンフリクトする、環境間の差異(環境ドリフト)によってデプロイ時に予期せぬエラーが発生する、といった問題です。これらの課題は、開発のスピードを低下させ、品質を担保することを難しくしていました。
スクラッチ組織は、これらの問題を解決するために設計された、まったく新しいアプローチを提供します。スクラッチ組織は、ソースコード駆動型で、設定可能かつ使い捨ての Salesforce 環境です。主な適用シナリオは以下の通りです。
1. 機能開発とバグ修正
新しい機能やユーザーストーリー、あるいはバグ修正ごとに、クリーンで独立したスクラッチ組織を作成します。これにより、他の開発者の作業や既存のメタデータ設定に影響されることなく、隔離された環境で開発に集中できます。開発が完了すれば、その組織は破棄して構いません。
2. 自動テストの実行
CI/CD (継続的インテグレーション/継続的デリバリー) パイプラインにスクラッチ組織の作成を組み込むことで、コードがバージョン管理システムにプッシュされるたびに、自動で新しい環境を構築し、Apex テストや UI テストを実行できます。これにより、毎回クリーンな状態でテストが実行され、信頼性の高いフィードバックループが実現します。
3. パッケージ開発
Unlocked Packages や Managed Packages の開発において、スクラッチ組織は不可欠です。パッケージのバージョンを作成する前に、特定の名前空間を持つクリーンな環境でコンポーネントを検証できます。
スクラッチ組織を導入することで、開発チームは「ソースコードこそが信頼できる唯一の情報源 (Source of Truth)」という考え方に基づいた、モダンで効率的な開発ライフサイクルを実践できるようになります。
原理説明
スクラッチ組織がどのように機能するのかを理解するためには、いくつかの重要なコンセプトを把握する必要があります。
1. Dev Hub (開発ハブ)
Dev Hub は、スクラッチ組織やそのライフサイクルを管理する中心的な Salesforce 組織です。通常、本番組織またはビジネス組織で有効化します。Dev Hub を有効にすると、その組織から新しいスクラッチ組織を作成、削除、管理する権限が付与されます。どのスクラッチ組織が有効で、誰が作成したかといった情報を一元管理する司令塔の役割を果たします。
2. Salesforce DX (SFDX) CLI
Salesforce DX (SFDX) は、開発者体験を向上させるためのツールセットです。その中核となるのが SFDX Command Line Interface (CLI) です。開発者はこの CLI を使用して、ターミナルやスクリプトから Dev Hub への認証、スクラッチ組織の作成、ローカルのソースコードとスクラッチ組織間のメタデータの同期、テストの実行、データのインポート/エクスポートなど、開発に関するほぼすべての操作を実行できます。
3. スクラッチ組織定義ファイル (Scratch Org Definition File)
スクラッチ組織は、`project-scratch-def.json` という名前の JSON 形式の設定ファイルに基づいて作成されます。このファイルは、作成するスクラッチ組織の「設計図」や「レシピ」のようなものです。組織のエディション (Developer, Enterprise など)、有効化する機能 (Person Accounts, Multi-Currency など)、さらには特定の組織設定 (Chatter の有効化、言語設定など) を細かく定義できます。これにより、開発やテストに必要な環境を、毎回同じ構成で再現性高く作成することが可能になります。
4. ソース追跡 (Source Tracking)
スクラッチ組織の最大の特徴の一つがソース追跡機能です。ローカルのプロジェクトとスクラッチ組織の間でどのメタデータが変更されたかを、SFDX が自動的に追跡します。これにより、開発者は `sf project deploy start` コマンドでローカルの変更点のみを組織にプッシュし、`sf project retrieve start` コマンドで組織上で行った宣言的な変更 (UI での項目追加など) をローカルにプルすることができます。この機能により、開発者は変更の管理に頭を悩ませることなく、シームレスに開発を進めることができます。
これらの要素が連携することで、開発者はコマンド一つで、必要な機能を備えたクリーンな Salesforce 環境を数分で手に入れ、開発サイクルを劇的に加速させることができるのです。
実践的なコード例
ここでは、SFDX CLI を使用してスクラッチ組織を操作する具体的な手順を、Salesforce 公式ドキュメントに基づいたコード例と共に紹介します。
1. スクラッチ組織定義ファイルの作成
まず、プロジェクトの `config` ディレクトリに `project-scratch-def.json` ファイルを作成します。このファイルで、作成するスクラッチ組織の特性を定義します。
{
"orgName": "DreamHouse Realty",
"edition": "Developer",
"features": ["EnableSetPasswordInApi"],
"settings": {
"lightningExperienceSettings": {
"enableS1DesktopEnabled": true
},
"mobileSettings": {
"enableS1EncryptedStoragePref2": false
}
}
}
詳細な解説:
- orgName: 作成されるスクラッチ組織の会社名を設定します。
- edition: 組織のエディションを指定します。通常、開発では `Developer` を使用します。
- features: 有効化したい追加機能を配列で指定します。この例では、API 経由でのパスワード設定を許可しています。
- settings: より詳細な組織設定をオブジェクト形式で指定します。ここでは Lightning Experience を有効にしています。
2. スクラッチ組織の作成とソースのプッシュ
定義ファイルが準備できたら、SFDX CLI を使ってスクラッチ組織を作成します。作成後、ローカルプロジェクトのソースコードを組織にデプロイします。
# 1. Dev Hub 組織にログインします (まだの場合) # ブラウザが開き、ログインを求められます sf org login web --set-default-dev-hub --alias MyDevHub # 2. スクラッチ組織を作成します # -f で定義ファイルを指定し、-a でエイリアス (別名) を設定します # --set-default でこの組織をデフォルトの操作対象にします sf org create scratch --definition-file config/project-scratch-def.json --alias MyScratchOrg --set-default # 3. 作成したスクラッチ組織にローカルのソースコードをプッシュします sf project deploy start
詳細な解説:
- `sf org login web`: Dev Hub 組織に CLI を接続します。`--set-default-dev-hub` フラグは、この組織をスクラッチ組織の管理元として設定します。
- `sf org create scratch`: 定義ファイルに基づいて新しいスクラッチ組織を作成します。`--alias` で `MyScratchOrg` のような覚えやすい名前を付けると、後のコマンドで便利です。
- `sf project deploy start`: ローカルの `force-app` ディレクトリにあるすべてのメタデータを、ソース追跡機能を利用してスクラッチ組織にデプロイします。
3. 権限セットの割り当て
カスタムオブジェクトや項目にアクセスするためには、ユーザーに権限セットを割り当てる必要があります。これも CLI から実行できます。
# "MyAppPermissions" という API 名の権限セットをデフォルトユーザーに割り当てます sf org assign permset --name MyAppPermissions
4. テストデータのインポート
開発やテストにはデータが必要です。SFDX は関連するオブジェクトのデータを JSON 形式でインポートする機能を提供します。
# まず、関連する Account と Contact のデータをエクスポートするクエリを定義します (例) # sf data query --query "SELECT Id, Name, (SELECT Id, FirstName, LastName FROM Contacts) FROM Account" --result-format json > data/accounts-contacts.json # 次に、プランファイル (plan.json) を使ってデータをインポートします # このプランファイルは、どの sObject をどのファイルのデータでインポートするかを定義します sf data tree import --plan ./data/sample-data-plan.json
注: `sf data tree import` コマンドは、`sObject Tree API` を利用しており、親レコードと子レコードの関連を保ったままデータを投入できる非常に強力な機能です。
注意事項
権限と Dev Hub
スクラッチ組織を作成するには、Dev Hub 組織で「Dev Hub」機能を有効化し、操作を行うユーザーに「Salesforce DX」権限セットが割り当てられている必要があります。通常、Dev Hub は Enterprise Edition 以上の本番組織またはトライアル組織で有効化します。Developer Edition 組織でも有効化できますが、スクラッチ組織の作成数などの制限が厳しくなります。
API 制限と組織の上限
スクラッチ組織の作成数には上限があります。上限は Dev Hub 組織のライセンスによって決まります。
- アクティブなスクラッチ組織の数: 同時に存在できるスクラッチ組織の数。
- 日次作成数: 24時間以内に作成できるスクラッチ組織の数。
有効期限
スクラッチ組織はデフォルトで 7 日間の有効期限が設定されています。この期間は作成時に 1 日から 30 日の間で変更可能です (`--duration-days` フラグ)。有効期限が切れると組織は自動的に削除され、復元できません。これは「使い捨て」というスクラッチ組織の性質を強制するものであり、長期的なデータ保持には向いていません。
エラーハンドリング
スクラッチ組織の作成やソースのプッシュに失敗することがあります。一般的な原因としては、定義ファイルに指定した機能が Dev Hub 組織で有効になっていない、メタデータに依存関係の欠如がある、などが挙げられます。エラーメッセージをよく読み、ログを確認することが重要です。特に、`sf project deploy start --verbose` のように詳細ログを出力するオプションがデバッグに役立ちます。
まとめとベストプラクティス
スクラッチ組織は、現代の Salesforce 開発におけるゲームチェンジャーです。その使い捨て可能で、設定可能で、ソースコード駆動型という性質は、開発チームに前例のない俊敏性と信頼性をもたらします。
以下に、スクラッチ組織を最大限に活用するためのベストプラクティスをまとめます。
- タスクごとに組織を作成する: 1つの機能、1つのバグ修正、1つのユーザーストーリーに対して、1つのスクラッチ組織を作成します。これにより、作業の分離が徹底され、コンフリクトのリスクが最小限に抑えられます。
- セットアップを自動化する: スクラッチ組織の作成、ソースのプッシュ、権限セットの割り当て、テストデータのインポートといった一連のセットアップ手順をシェルスクリプトなどにまとめて自動化しましょう。これにより、誰でも、いつでも、ワンコマンドで一貫した開発環境を構築できます。
- CI/CD パイプラインに統合する: バージョン管理システムへのプッシュをトリガーとして、CI/CD ツール (GitHub Actions, Jenkins, GitLab CI など) が自動的にスクラッチ組織を作成し、Apex テストを実行する仕組みを構築します。これにより、コードの品質が常に高く保たれます。
- バージョン管理システム (VCS) を中心に据える: Git のような VCS を「信頼できる唯一の情報源」とします。すべての変更はローカルで行い、VCS にコミットし、それをスクラッチ組織にプッシュするという流れを徹底します。スクラッチ組織はあくまで一時的な実行環境であり、永続的なものではありません。
- 定義ファイルを活用する: プロジェクトの要件に応じて、複数のスクラッチ組織定義ファイルを用意します。例えば、基本的な開発用、特定の機能を有効にしたテスト用、最小構成のパッケージング用など、用途別にファイルを使い分けることで、効率が向上します。
スクラッチ組織を開発プロセスに組み込むことは、単なるツールセットの導入以上の意味を持ちます。それは、チーム全体の開発文化を、より規律正しく、自動化され、品質を重視するものへと変革するきっかけとなるでしょう。ぜひ、この強力なツールを使いこなし、開発者体験を次のレベルへと引き上げてください。
コメント
コメントを投稿