背景と適用シナリオ
Salesforce 開発者として、私たちは常に効率的で、信頼性が高く、スケーラブルな開発プロセスを模索しています。従来の開発モデル、特に変更セット(Change Set)に依存したアプローチでは、多くの課題に直面してきました。例えば、バージョン管理の欠如、チームメンバー間のコンフリクト、手動でのデプロイ作業、そして本番環境と完全に一致しない開発環境などです。これらの課題は、開発サイクルの遅延、バグの増加、そしてイノベーションの阻害につながります。
このような背景から登場したのが Salesforce DX (Developer Experience) です。Salesforce DXは、単なるツールの集合体ではなく、現代的なソフトウェア開発手法をSalesforceプラットフォームにもたらすための、思想と方法論の転換を促すものです。その中心的な目的は、開発者がソースコードを「信頼できる唯一の情報源(Single Source of Truth)」として扱い、チームでの共同作業を円滑にし、継続的インテグレーション(Continuous Integration)と継続的デリバリー(Continuous Delivery)、いわゆるCI/CDを容易に実現することにあります。
Salesforce DXが特に有効なシナリオは以下の通りです:
- チーム開発: 複数の開発者が関わるプロジェクトで、Gitなどのバージョン管理システム(Version Control System)を使い、機能ごとにブランチを分けて並行開発を進める場合。
- CI/CDパイプラインの構築: コードの変更をリポジトリにプッシュすると、自動的にテストが実行され、問題がなければ上位の環境(QA、UATなど)にデプロイされるプロセスを自動化したい場合。
- パッケージ開発: AppExchangeで配布する管理パッケージや、組織内で再利用するためのロック解除済みパッケージ(Unlocked Package)を開発する場合。
- クリーンな環境での開発とテスト: 他の開発者の変更や既存の設定に影響されない、クリーンで使い捨て可能な環境で新機能の開発やテストを行いたい場合。
この記事では、Salesforce開発者としてSalesforce DXを最大限に活用するための核心的な概念、ツール、そして実践的な手順を詳しく解説していきます。
原理説明
Salesforce DXの魔法を理解するためには、その中核をなすいくつかのコンポーネントを把握する必要があります。これらは互いに連携し、ソース駆動型の開発ライフサイクルを支えています。
Dev Hub (開発ハブ)
Dev Hub は、Salesforce DXの中心的な管理機能を持つ特別なSalesforce組織です。通常、本番組織またはビジネス組織(Business Org)で有効にします。Dev Hubの主な役割は、開発とテストに使用する一時的なSalesforce環境であるScratch Orgs (スクラッチ組織) の作成と管理です。また、開発した機能をモジュール化するための第二世代パッケージ(2GP)の管理もここで行います。Dev Hubを有効にすることで、どの開発者がいくつのスクラッチ組織を作成・使用しているかを一元的に把握し、管理することが可能になります。
Scratch Orgs (スクラッチ組織)
Scratch Orgs は、Salesforce DXの最も革新的な機能の一つです。これらは、ソースコードから動的に作成される、使い捨ての(ephemeral)Salesforce組織です。開発者は、プロジェクトごとに、あるいは新機能のブランチごとに、完全に独立したクリーンなスクラッチ組織を作成できます。主な特徴は以下の通りです:
- ソース駆動: スクラッチ組織は、ローカルのDXプロジェクトにあるメタデータ(ソースコード)を基に構築されます。
- 設定可能: 組織のエディション、有効にする機能、設定などをJSON形式の設定ファイル(`project-scratch-def.json`)で定義できます。これにより、本番環境と類似した環境を再現できます。
- 使い捨て: デフォルトで7日間の有効期限があり、不要になればいつでも削除できます。これにより、「設定のドリフト」や環境依存の問題を回避できます。
Salesforce CLI (SFDX CLI)
Salesforce CLI (Command Line Interface) は、開発者がターミナルやコマンドプロンプトからSalesforce DXのあらゆる操作を行うための強力なツールです。`sf` コマンド(旧 `sfdx`)を通じて、Dev Hubへの認証、スクラッチ組織の作成と管理、ローカルのソースコードと組織間のメタデータの同期、Apexテストの実行、データのインポート/エクスポートなど、開発ライフサイクルのほぼ全てのタスクを自動化できます。CI/CDパイプラインでは、このCLIがスクリプトの中心的な役割を果たします。
DXプロジェクトとソース形式
Salesforce DXでは、メタデータは特定のディレクトリ構造を持つ「DXプロジェクト」としてローカルに管理されます。従来のメタデータ形式とは異なり、オブジェクトやその項目、レイアウトなどが個別のファイルに分解された「ソース形式」で保存されます。例えば、`CustomObject` は、オブジェクト自体の定義ファイル、各項目のファイル、入力規則のファイルなどに分割されます。これにより、バージョン管理システムでの差分管理が非常に容易になり、チームメンバー間のコンフリクトを最小限に抑えることができます。
プロジェクトの中心には `sfdx-project.json` ファイルがあり、プロジェクト名、パッケージディレクトリ、APIバージョン、ログインURLなどの重要な設定情報が記述されています。
示例代码
ここでは、Salesforce開発者が日常的に行うであろう一連のSalesforce DX操作を、Salesforce CLIコマンドの具体例とともに紹介します。これらのコマンドは、Salesforceの公式ドキュメントに基づいています。
1. Salesforce DXプロジェクトの作成
まず、開発を始めるための基本的なディレクトリ構造を持つDXプロジェクトを新規作成します。
# 'MyNewDXProject' という名前で新しいプロジェクトを作成します sf project generate --name MyNewDXProject
このコマンドを実行すると、`sfdx-project.json` ファイルや `force-app` ディレクトリを含む、標準的なDXプロジェクトの骨格が生成されます。
2. Dev Hub組織への認証
次に、スクラッチ組織を作成・管理するために、Dev Hubとして機能する組織にログインします。ブラウザベースのログインフローが開始されます。
# Dev Hub組織にログインし、'MyDevHub' という別名を付けます # -d フラグは、この組織をデフォルトのDev Hubとして設定することを示します # -a フラグは、組織にエイリアス(別名)を付けるために使用します sf org login web --set-default-dev-hub --alias MyDevHub
3. スクラッチ組織の作成
Dev Hubに認証したら、開発用のスクラッチ組織を作成します。作成時には、設定ファイル(`config/project-scratch-def.json`)が使用されます。
# 'project-scratch-def.json' の設定に基づき、スクラッチ組織を作成します # 有効期限を7日間に設定し、'FeatureDevOrg' という別名を付けます # -f フラグで設定ファイルを指定します # -d フラグはこのスクラッチ組織をデフォルトの作業組織として設定します # -a フラグで別名を付けます sf org create scratch --definition-file config/project-scratch-def.json --set-default --alias FeatureDevOrg --duration-days 7
4. ローカルソースのスクラッチ組織へのプッシュ
プロジェクト内のすべてのメタデータを、作成したスクラッチ組織にデプロイ(プッシュ)します。
# デフォルトのスクラッチ組織にローカルのソースコードをすべてプッシュします sf project deploy start
5. スクラッチ組織からの変更のプル
スクラッチ組織上でUI(設定画面など)を使って変更を行った場合、その変更をローカルのプロジェクトに反映(プル)させることができます。
# デフォルトのスクラッチ組織で行われた変更をローカルにプルします sf project retrieve start
6. Apexテストの実行
スクラッチ組織内でApexテストを実行し、コードの品質を確認します。結果は人間が読みやすい形式で表示されます。
# デフォルトのスクラッチ組織ですべてのApexテストを実行します # -r フラグで結果の出力形式を指定します (human, json, junitなど) # -c フラグはコードカバレッジの結果も計算・表示することを意味します sf apex test run --result-format human --code-coverage
注意事項
Salesforce DXを効果的に活用するためには、いくつかの制限や注意点を理解しておくことが重要です。
権限
- Dev Hub: Dev Hubを有効にする組織のユーザーには、「Salesforce DX」権限セットが必要です。また、スクラッチ組織を作成するユーザーは、Dev Hub組織の有効なユーザーである必要があります。
- スクラッチ組織: スクラッチ組織内のユーザーは、デフォルトでシステム管理者プロファイルを持ちますが、テスト用に特定のプロファイルや権限セットを割り当てることも可能です。
APIと組織の制限
- スクラッチ組織の制限: Dev Hubごとに、1日に作成できるスクラッチ組織の数や、同時にアクティブにできるスクラッチ組織の数には上限があります(エディションにより異なります)。`sf org list limits` コマンドで現在の制限と使用状況を確認できます。
- Dev HubのAPI制限: スクラッチ組織の作成や管理はAPIコールを消費します。大規模なCI/CDパイプラインを構築する際は、Dev Hub組織のAPIコールリミットに注意が必要です。
エラー処理と競合
- プッシュ/プル競合: チームで開発している際、同じメタデータをローカルとサーバーの両方で変更すると、`sf project deploy start` や `sf project retrieve start` 実行時に競合が発生することがあります。このような場合は、バージョン管理システム(Git)を使用して、どちらの変更を優先するかを慎重に判断し、マージする必要があります。
- メタデータカバレッジ: Salesforce DXのソース追跡機能(Push/Pull)は、すべてのメタデータ型に完全対応しているわけではありません。一部のメタデータ型は、手動で`sf project deploy/retrieve`コマンドに含める必要があります。対応状況はSalesforceの公式ドキュメント「Metadata Coverage Report」で確認することをお勧めします。
まとめとベストプラクティス
Salesforce DXは、Salesforceプラットフォームにおける開発体験を根本から変革する強力なフレームワークです。ソース駆動型のアプローチ、使い捨て可能なスクラッチ組織、そして強力なCLIツールにより、開発者はより迅速で、品質が高く、予測可能な開発ライフサイクルを実現できます。
開発者としてSalesforce DXを最大限に活用するためのベストプラクティスを以下にまとめます。
- Gitを信頼できる唯一の情報源とする: すべての変更はまずローカルのDXプロジェクトで行い、バージョン管理システム(Git)にコミットします。組織自体を直接変更することは極力避け、ソースコードが常に最新の状態を保つようにします。
- スクラッチ組織を頻繁に作成・破棄する: スクラッチ組織は一時的なものと捉え、機能開発やバグ修正ごとに新しい組織を作成することを習慣にしましょう。これにより、常にクリーンな環境で作業でき、環境依存の問題を防ぎます。
- CI/CDパイプラインを積極的に導入する: Salesforce CLIをJenkins、GitHub Actions、Azure DevOpsなどのCI/CDツールと組み合わせることで、テスト、検証、デプロイのプロセスを完全に自動化します。これにより、手動エラーが減り、リリースサイクルが大幅に短縮されます。
- ロック解除済みパッケージ(Unlocked Packages)を活用する: 大規模なプロジェクトでは、機能を論理的なモジュールに分割し、ロック解除済みパッケージとして管理することを検討してください。これにより、依存関係の管理が容易になり、よりアジャイルなデプロイが可能になります。
- コマンドラインに習熟する: Salesforce CLIは非常に多機能です。よく使うコマンドのエイリアスを作成したり、スクリプトを組んだりすることで、日々の反復作業を効率化しましょう。
Salesforce DXへの移行は、単に新しいツールを学ぶこと以上の意味を持ちます。それは、チーム全体で開発プロセスと文化を見直す絶好の機会です。このガイドが、皆さんのSalesforce開発者としての旅路を、よりモダンで生産的なものにする一助となれば幸いです。
コメント
コメントを投稿