プロジェクトからスクラッチ組織へのソースのリリース
初めてソースを組織にリリースするとき、sfdx-project.json ファイルのパッケージディレクトリ内にあるすべてのソースがスクラッチ組織にリリースされて初期設定が完了します。この時点で、Salesforce CLI によって、ファイルシステムではローカルに、スクラッチ組織ではリモートで、ソース追跡が開始され、どのメタデータが変更されたかが判別されます。たとえば、Apex クラスをスクラッチ組織にリリースし、ローカルファイルシステムではなくスクラッチ組織のクラスを変更することにしたとします。Salesforce CLI は、どのローカルパッケージディレクトリでクラスが作成されたかを追跡しているため、クラスを元のプロジェクトに戻すときにも、そのクラスがどこに属しているかを認識しています。
リリースコマンド (このトピックで後述します) を実行するには、ターミナル (macOS および Linux) またはコマンドプロンプト (Windows) を開いてから、Salesforce DX プロジェクトディレクトリに移動します。
リリースのプレビュー
組織にソースをリリースする前に、project deploy preview を実行することで、リリースするコンポーネント、潜在的な競合、無視されるファイルをプレビューできます。たとえば、このコマンドは、プロジェクトのすべてのソースを MyGroovyScratchOrg という別名を持つスクラッチ組織にリリースする際のプレビューを表示します。
1sf project deploy preview --target-org MyGroovyScratchOrgプレビューする対象のソースを指定するには、フラグを使用します。たとえば、マニフェスト内でリストアップされているソースのみを指定できます。この例では、--target-org はスクラッチ組織のユーザー名を参照しています。
1sf project deploy preview --manifest package.xml --target-org test-am6xqkossaq8@example.comスクラッチ組織へのソースのリリース
変更されたローカルソースをデフォルトのスクラッチ組織にリリースするには、次のコマンドを実行します。
1sf project deploy startこのコマンドはリリースした内容を表示します。このサンプル出力は、PropertyController Apex クラスのリリースについて示しています。
1Deploying v58.0 metadata to test-am6xqkossaq8@example.com using the v59.0 SOAP API.
2Deploy ID: 0Af7e00001WsuoSCAR
3Status: Succeeded | ████████████████████████████████████████ | 1/1 Components (Errors:0) | 0/0 Tests (Errors:0)
4
5Deployed Source
6=====================================================================================================
7| State Name Type Path
8| ─────── ────────────────── ───────── ──────────────────────────────────────────────────────────────
9| Changed PropertyController ApexClass force-app/main/default/classes/PropertyController.cls
10| Changed PropertyController ApexClass force-app/main/default/classes/PropertyController.cls-meta.xmlフラグを使用することで、変更されたすべてのソースではなく、リリースしたいソースを対象に指定できます。
- -metadata フラグは、Apex クラスなどの特定のメタデータコンポーネントをリリースする場合に使用します。
- --manifest フラグは、マニフェストファイル内のコンポーネントをリリースする場合に使用します。
- --source-dir は、パッケージディレクトリ内のソースをリリースする場合に使用します。
使用例や、指定できる他のフラグについては、project deploy start のリファレンス情報を参照してください。
リリース時に無視するファイルの選択
プロジェクトとスクラッチ組織の間で同期しないファイルがある場合があります。そのようなファイルは .forceignore ファイルに追加して、リリースコマンドで無視されるようにします。
リリースで警告が検出された場合
project deploy start を実行し、警告が発生した場合、Salesforce CLI はソースをリリースしません。警告は、プロジェクトのソースが古いバージョンを使用している場合などに発生することがあります。こうした警告を無視してソースをスクラッチ組織にリリースする場合は、次のコマンドを実行します。
1sf project deploy start --ignore-warningsリリースでファイル競合が検出された場合
開発時、開発者は Salesforce が提供するビルダーやエディターを使用して直接ファイルシステムのファイルをローカルに変更したり、スクラッチ組織を変更したりします。通常、これらの変更は競合せず、固有のファイルが対象となります。また、project deploy start コマンドではマージは処理されません。プロジェクトとスクラッチ組織は、1 人の開発者が使用するためのものです。
ただし、project deploy start を実行して、競合が検出された場合、Salesforce CLI は処理を中止し、ソースをリリースしません。代わりに、次のサンプル出力のような競合情報が表示されます。PropertyController の Apex クラスはローカルと組織の両方で変更されましたが、変更が競合しています。
1sf project deploy start
2 STATE FULL NAME TYPE FILE PATH
3 ──────── ────────────────── ───────── ────────────────────────────────���────────────────────────────────────────────────────────────────────────
4 Conflict PropertyController ApexClass <dir>/force-app/main/default/classes/PropertyController.cls-meta.xml
5 Conflict PropertyController ApexClass <dir>/force-app/main/default/classes/PropertyController.cls
6Error (1): There are changes in the org that conflict with the local changes you're trying to deploy.最初に維持する変更を決定します。ローカルの変更を維持するには、--ignore-conflicts フラグを指定してリリースを再実行します。
1sf project deploy start --ignore-conflicts組織の変更を維持するには、変更をローカルプロジェクトで取得するために --ignore-conflicts フラグを指定して project retrieve start コマンドを実行します。
1sf project retrieve start --ignore-conflicts