こんにちは!Salesforce 開発者の皆さん。今回は、Salesforce のモダンな開発手法の中核をなす Scratch Orgs (スクラッチ組織) について、開発者の視点から徹底的に解説していきます。この記事を読めば、あなたの開発プロセスはより効率的で、品質の高いものになるはずです。
背景と適用シナリオ
従来の Salesforce 開発では、多くの開発者が共有の Developer Sandbox や Developer Pro Sandbox を使用していました。このアプローチにはいくつかの課題がありました。
・環境のコンフリクト: 複数の開発者が同じ環境で作業すると、一人の変更が他の開発者の作業に意図せず影響を与える「上書き」やコンフリクトが発生しがちでした。
・構成ドリフト: Sandbox は長期間使用されることが多く、その間に手動で行われた設定変更がバージョン管理システムと乖離してしまう「構成ドリフト」が発生し、本番環境へのデプロイ時に予期せぬエラーを引き起こす原因となっていました。
・変更追跡の困難さ: 誰がいつ、どの変更を行ったのかを正確に追跡することが難しく、コードレビューやバグの特定が非効率でした。
これらの課題を解決するために登場したのが、Salesforce DX (Salesforce Developer Experience) という新しい開発手法です。そして、その中核をなすツールが Scratch Orgs なのです。
Scratch Org とは?
Scratch Org とは、ソースコード駆動で作成される、一時的で使い捨て可能な Salesforce 組織です。Git のようなバージョン管理システムを「信頼できる唯一の情報源 (Source of Truth)」とし、必要な設定やメタデータをコードとして管理します。開発者は、この定義ファイルに基づいて、いつでもクリーンな開発環境を数分で作成できます。
主な適用シナリオ
Scratch Orgs は、以下のようなシナリオでその真価を発揮します。
- 新機能開発: 各機能やユーザーストーリーごとに独立した Scratch Org を作成し、他の開発者の影響を受けずに集中して開発を進めることができます。
- パッケージ開発: ISV パートナーが管理パッケージや非管理パッケージを開発する際に、名前空間の有無や特定の機能を有効化したクリーンな環境でテストできます。
- 継続的インテグレーション/継続的デプロイメント (CI/CD): 自動化されたパイプライン内で Scratch Org を作成し、テストを実行して、完了後に破棄することで、毎回クリーンな状態でビルドとテストを保証できます。
- バグの再現と修正: 本番環境と同じメタデータを持つクリーンな Scratch Org を作成し、特定のバグを再現させて修正作業を行うことができます。
原理の説明
Scratch Org の魔法を理解するためには、いくつかの重要なコンセプトとコンポーネントを知る必要があります。
1. Dev Hub (Dev Hub 組織)
Dev Hub は、Scratch Org や第二世代パッケージ (2GP) のライフサイクルを管理する中心的な Salesforce 組織です。通常、本番組織または Developer Edition 組織で Dev Hub 機能を有効化します。Dev Hub は、どのユーザーが Scratch Org を作成できるか、アクティブな Scratch Org の数、日々の作成上限などを管理します。
2. Salesforce CLI (SFDX CLI)
Salesforce Command Line Interface (Salesforce コマンドラインインターフェース) は、開発者がコマンドラインから Dev Hub への認証、Scratch Org の作成・管理、メタデータのデプロイ・取得など、Salesforce DX のほぼ全ての操作を行うための強力なツールです。`sfdx` コマンドとして知られています。
3. Scratch Org Definition File
これは `project-scratch-def.json` という名前の JSON ファイルで、作成する Scratch Org の「設計図」です。このファイルで、組織のエディション (Developer, Enterprise など)、有効化する機能 (Person Accounts, Multi-Currency など)、および特定の設定を定義します。これにより、チーム全員が同じ構成の環境を再現性高く作成できます。
{ "orgName": "My Awesome Project", "edition": "Developer", "features": ["EnableSetPasswordInApi"], "settings": { "lightningExperienceSettings": { "enableS1DesktopEnabled": true }, "mobileSettings": { "enableS1EncryptedStoragePref2": false } } }
4. Scratch Org のライフサイクル
開発者としての典型的なワークフローは以下のようになります。
1. 認証: Salesforce CLI を使用して Dev Hub 組織にログインします。
2. 作成: `project-scratch-def.json` ファイルを基に、新しい Scratch Org を作成します。
3. プッシュ: ローカルのバージョン管理リポジトリにあるソースコード (Apex クラス、Visualforce ページ、Lightning Web Components など) を Scratch Org にプッシュ (デプロイ) します。
4. 開発とテスト: Scratch Org をブラウザで開き、機能の開発や手動テストを行います。また、CLI を使って Apex テストを実行します。
5. プル: Scratch Org 上の UI で行った宣言的な変更 (オブジェクトの作成、項目の追加など) をローカルのソースコードにプル (取得) します。
6. コミット: ローカルで行った変更をバージョン管理システム (Git) にコミットします。
7. 削除: 開発が完了したら、Scratch Org は削除します。有効期限 (デフォルトで7日間、最大30日間) が切れると自動的に削除されます。
このサイクルにより、開発は常にバージョン管理システムを中心に行われ、クリーンな環境で作業を進めることができます。
示例代码
ここでは、Salesforce CLI を使用した基本的な Scratch Org の操作を見ていきましょう。これらのコマンドは Salesforce の公式ドキュメントに基づいています。
ステップ1: Dev Hub への認証
まず、Dev Hub として使用する組織にログインします。`-d` フラグでこの組織をデフォルトの Dev Hub として設定し、`-a` フラグでエイリアス (別名) を設定します。
// Webベースのログインフローを開始します。 // -d: この組織をデフォルトのDev Hubとして設定します。 // -a: 組織に "MyDevHub" というエイリアスを付け、後のコマンドで簡単に参照できるようにします。 sfdx auth:web:login -d -a MyDevHub
ステップ2: プロジェクトの作成
ローカルマシンに Salesforce DX プロジェクトを作成します。これにより、必要なディレクトリ構造と設定ファイルが生成されます。
// "MyAwesomeProject" という名前のDXプロジェクトを作成します。 sfdx force:project:create -n MyAwesomeProject // 作成されたディレクトリに移動します。 cd MyAwesomeProject
ステップ3: Scratch Org の作成
プロジェクト内の `config/project-scratch-def.json` ファイルを編集して組織の形状を定義した後、以下のコマンドで Scratch Org を作成します。
// Scratch Org を作成します。 // -f: 使用する定義ファイルのパスを指定します。 // -a: 新しいScratch Orgに "FeatureDevOrg" というエイリアスを設定します。 // -s: このScratch Orgをこのプロジェクトのデフォルト組織として設定します。 // --durationdays: 有効期間を10日に設定します(1-30の範囲で指定可能)。 sfdx force:org:create -f config/project-scratch-def.json -a FeatureDevOrg -s --durationdays 10
ステップ4: ソースコードを Scratch Org にプッシュ
ローカルの `force-app` ディレクトリにあるメタデータを Scratch Org にデプロイします。
// ローカルのソースメタデータをデフォルトのScratch Orgにプッシュします。 sfdx force:source:push
ステップ5: Scratch Org を開く
ブラウザで作成した Scratch Org にログインします。
// デフォルトのScratch Orgをブラウザで開きます。 // ユーザー名やパスワードの入力は不要です。 sfdx force:org:open
ステップ6: 変更を Scratch Org からプル
Scratch Org の設定画面などで宣言的に行った変更を、ローカルのファイルシステムに反映させます。
// Scratch Orgからの変更を検出し、ローカルのソースファイルにプルします。 sfdx force:source:pull
ステップ7: Apex テストの実行
開発中に作成した Apex テストを実行して、コードの品質を確認します。
// デフォルトのScratch OrgですべてのApexテストを実行します。 // -l: テストレベルを指定します。RunLocalTestsは管理パッケージ以外のテストを実行します。 // -c: コードカバレッジの結果を計算して表示します。 // -r: 結果の出力形式をhuman(人間が読みやすい形式)に指定します。 sfdx force:apex:test:run -l RunLocalTests -c -r human
ステップ8: Scratch Org の削除
作業が完了したら、不要になった Scratch Org を削除してリソースを解放します。
// "FeatureDevOrg" というエイリアスを持つScratch Orgを削除します。 // -p: 確認プロンプトをスキップします(スクリプトでの使用に便利)。 sfdx force:org:delete -u FeatureDevOrg -p
注意事項
Scratch Org を効果的に利用するためには、いくつかの注意点を理解しておく必要があります。
権限と制限
・Dev Hub の権限: Scratch Org を作成するユーザーには、Dev Hub 組織で「Salesforce DX」権限セットが割り当てられている必要があります。
・組織の制限: Dev Hub 組織には、同時にアクティブにできる Scratch Org の数や、24時間以内に作成できる数に上限があります。Enterprise Edition の Dev Hub であれば、デフォルトでアクティブな Scratch Org は40個、日次作成上限は80個です。大規模なチームで開発する場合は、これらの上限に注意が必要です。
データの取り扱い
Scratch Org は作成された時点ではメタデータのみで、データは空です。開発やテストに必要なデータを投入するには、いくつかの方法があります。
・SFDX データコマンド: `sfdx force:data:tree:export` と `sfdx force:data:tree:import` を使用して、関連するオブジェクトのデータを JSON 形式でエクスポート/インポートできます。
・Apex スクリプト: `sfdx force:apex:execute` コマンドを使用して、テストデータを作成する Apex スクリプトを実行できます。
・CSV ファイル: `sfdx force:data:bulk:upsert` を使用して、CSV ファイルから大量のデータを一括で読み込ませることができます。
Sandbox との使い分け
Scratch Org はすべての Sandbox を置き換えるものではありません。それぞれの役割を理解することが重要です。
・Scratch Org: 機能開発、単体テスト、CI/CD パイプラインでの自動テストなど、一時的でクリーンな環境が必要な場合に最適です。
・Developer/Developer Pro Sandbox: 統合開発や、Scratch Org のモデルに移行する前のレガシーな開発プロセスに適しています。
・Partial Copy/Full Sandbox: 大量の本番データを必要とする、より現実に近い環境での統合テスト、UAT (ユーザー受け入れテスト)、パフォーマンステスト、ステージングなどに使用されます。
まとめとベストプラクティス
Scratch Org は、Salesforce 開発を根本から変える強力なツールです。バージョン管理システムを信頼の源とし、クリーンで再現性の高い環境をオンデマンドで提供することで、開発のアジリティと品質を飛躍的に向上させます。
最後に、開発者として Scratch Org を最大限に活用するためのベストプラクティスをいくつか紹介します。
1. ライフサイクルを短く保つ: Scratch Org は「使い捨て」が前提です。一つの機能やバグ修正が完了したらすぐに削除し、常に新しい Scratch Org で作業を開始する習慣をつけましょう。
2. エイリアスを賢く使う: `sfdx force:org:create` の `-a` オプションで分かりやすいエイリアスを付け、`sfdx force:org:list` で現在のアクティブな組織を常に把握しましょう。
3. すべてをソースコードで管理する: `project-scratch-def.json` ファイルで組織の形状を、スクリプトでテストデータの投入を自動化し、手動での設定作業を可能な限り排除します。これにより、誰でも同じ環境を再現できます。
4. CI/CD パイプラインに組み込む: プルリクエストが作成された際に自動的に Scratch Org を作成し、テストを実行するパイプラインを構築することで、コード品質を常に高く保つことができます。
5. チームで定義ファイルを共有する: `project-scratch-def.json` をバージョン管理リポジトリに含めることで、チーム全員が同じ設定の Scratch Org を作成できるようにします。
Salesforce DX と Scratch Org を使いこなし、よりモダンで効率的な開発ライフサイクルを実現しましょう!
コメント
コメントを投稿