スクラッチ組織へのソースの転送
初めてメタデータを組織に転送するとき、パッケージディレクトリとして指���されたフォルダ内のすべてのソースがスクラッチ組織に転送されて初期設定が完了します。この時点で、ファイルシステムではローカルに、スクラッチ組織ではリモートで変更追跡が開始され、どのメタデータが変更されたかが判別されます。たとえば、Apex クラスをスクラッチ組織に転送し、ローカルファイルシステムではなくスクラッチ組織のクラスを変更することを決定したとします。CLI は、どのローカルパッケージディレクトリでクラスが作成されたかを追跡するため、クラスを元のプロジェクトにプルするとき、どこに戻せばよいかを把握しています。
開発時、開発者は Salesforce が提供するビルダーやエディタを使用して直接ファイルシステムのファイルをローカルに変更したり、スクラッチ組織を変更したりします。通常、これらの変更は競合せず、固有のファイルが対象となります。
push コマンドではマージは処理されません。プロジェクトとスクラッチ組織は、1 人の開発者が使用するためのものです。したがって、ファイルの競合やマージの必要性は想定されていません。ただし、push コマンドが競合を検出すると、操作は終了され、競合情報がターミナルに表示されます。push コマンドを再実行し、強制的にプロジェクトの変更をスクラッチ組織に転送できます。
push コマンドを実行する前に、force:source:status を使用してローカルファイルシステムとスクラッチ組織間で発生した新規追加、変更、競合のリストを取得できます。これにより、保持するバージョンを事前に選択し、手動で競合に対処できます。
スクラッチ組織へのソースの転送
変更されたソースをデフォルトのスクラッチ組織に転送するには、次のコマンドを実行します。
1sfdx force:source:push
2
3STATE FULL NAME TYPE PROJECT PATH
4─────── ───────────── ───────── ────────────────────────────────────
5Changed MyWidgetClass ApexClass /classes/MyWidgetClass.cls-meta.xml
6Changed MyWidgetClass ApexClass /classes/MyWidgetClass.cls変更されたソースをデフォルト以外のスクラッチ組織に転送する場合は、ユーザ名または別名で指定できます。
1sfdx force:source:push --targetusername test-b4agup43oxmu@example.com1sfdx force:source:push -u test-b4agup43oxmu@example.com1sfdx force:source:push -u MyGroovyScratchOrg転送時に無視するファイルの選択
プロジェクトとスクラッチ組織の間で同期しないファイルがある場合があります。.forceignore で指定したファイルを push コマンドで無視することができます。
push で警告が検出された場合
force:source:push を実行し、警告が発生した場合、CLI はソースを転送しません。警告は、プロジェクトのソースが古いバージョンを使用している場合などに発生することがあります。こうした警告を無視してソースをスクラッチ組織に転送する場合は、次のコマンドを実行します。
1sfdx force:source:push --ignorewarningspush でファイル競合が検出された場合
force:source:push を実行し、競合が検出された場合、CLI はソースを転送しません。
1STATE FULL NAME TYPE PROJECT PATH
2─────── ───────────── ───────── ─────────────────────────────────
3Conflict NewClass ApexClass /classes/CoolClass.cls-meta.xml
4Conflict NewClass ApexClass /classes/CoolClass.cls上記には競合があります。CoolClass はスクラッチ組織には存在しますが、ローカルファイルシステムには存在しません。この新しい開発パラダイムでは、ローカルプロジェクトが信頼できる情報源になります。スクラッチ組織の競合を上書きすることが妥当か検討します。
競合が検出され、上書きする場合、次のように force (上書き) 機能を使用してソースをスクラッチ組織に転送します。
1sfdx force:source:push --forceoverwrite転送でソース内のユーザ名参照が検出された場合
一部のメタデータ型のソースにはユーザ名が含まれます。force:source:push を実行してこのソースをスクラッチ組織に転送すると、push コマンドによってユーザ名がスクラッチ組織の管理者ユーザ名に置き換えられます。この動作により、スクラッチ組織に元のユーザ名が含まれていなくても転送が成功します。
たとえば、スクラッチ組織を作成し、Lightning Experience を使用してレポートフォルダを作成したとします。次に、レポートを作成して新しいフォルダに保存します。force:source:pull を実行してスクラッチ組織からプロジェクトにソースを取り込みます。新しい ReportFolder の *.reportFolder-meta.xml ソースファイルは、次の例に似ています。ユーザ名 test-ymmlqf5@example.com が含まれる <sharedTo> 要素に注意してください。
1<?xml version="1.0" encoding="UTF-8"?>
2<ReportFolder xmlns="http://soap.sforce.com/2006/04/metadata">
3 <folderShares>
4 <accessLevel>Manage</accessLevel>
5 <sharedTo>test-ymmlqf5@example.com</sharedTo>
6 <sharedToType>User</sharedToType>
7 </folderShares>
8 <name>TestFolder</name>
9</ReportFolder>次に、別のスクラッチ組織を作成し、システム管理者のユーザ名を test-zuwlxy321@example.com にします。ReportFolder のソースファイルを新しいスクラッチ組織に転送すると、force:source:push によってユーザ名 test-ymmlqf5@example.com が test-zuwlxy321@example.com に置き換えられます。
この動作は、force:source:push とスクラッチ組織にのみ適用されます。たとえば、force:mdapi:deploy を使用してメタデータを通常の本番組織にリリースする場合、リリースではソースで参照されるユーザ名を使用します。
次のステップは、以下のとおりです。
- ソースが正常にスクラッチ組織にアップロードされたことを確認し、ブラウザで組織を開きます。
- サンプルテストデータを追加します。