複数のパッケージディレクトリ
sfdx-project.json ファイルの packageDirectories セクションで、パッケージディレクトリを別々に指定します。各ローカルパッケージディレクトリは、標準的な Salesforce DX プロジェクト構造に従います。ソースを組織に転送する場合、メタデータは、sfdx-project.json でパッケージディレクトリを指定した順にリリースされます。
複数のパッケージディレクトリの構造は、クライアント側 (ローカル) のみです。force:source:push でソースを組織に転送して、メタデータがリリースされた場合、そのローカルパッケージディレクトリの位置と組織のパッケージの間に関連はありません。特定の 2GP パッケージを明示的にインストールして、メタデータが組織のその 2GP パッケージに属することを指定します。
以下のコマンドは、複数のパッケージディレクトリをサポートします。
- force:source:push
- force:source:pull
- force:source:deploy
- force:source:retrieve
- force:source:delete
簡潔に説明するために、この例では force:source:push と force:source:pull を使用していますが、force:source:deploy と force:source:retrieve も使用できます。
考慮事項
複数のパッケージディレクトリを設定する前に、次の考慮事項を確認してください。
- 前述のとおり、force:source:push と force:source:deploy は、sfdx-project.json に指定されている順序で、複数のパッケージディレクトリをリリースします。暗黙的なコードの連動関係がある場合は、必ずそれを維持してください。そうしないと、転送が失敗します。たとえば、カスタム項目のメタデータファイルを新しいディレクトリに移動したとしましょう。しかし、このカスタム項目を��照する古いディレクトリ内の権限セットまたはレイアウトメタデータファイルを適切に更新することを忘れました。この場合、以降の force:source:push は失敗します。
- パッケージディレクトリを作成するか、メタデータファイルをディレクトリ間で移動して、ローカルプロジェクトを再整理した場合、force:source:status コマンドでは、それらの変更は表示されません。このコマンドでは、ローカルメタデータ型が組織でリリースされる型と異なる場合にメタデータファイル自体への変更のみが表示されます。ファイルの移動を追跡するには、バージョン管理システム (VCS) を使用します。
設定方法
複数のパッケージディレクトリの設定は簡単です。これらのディレクトリ間でローカルソースコードを整理する方法については、十分な検討と計画が必要です。また、その方法は、ご使用の開発環境によっても変わります。作業を始める前に、コードをどのように整理するかを計画します。開発者がより簡単かつ効率的に作業できるようにするため、ソースコードは、プロジェクトが拡大しても、常に適切に整理された状態にしておいてください。
簡単な例を見てみましょう。たとえば、カスタムオブジェクト MyObject の分解されたメタデータファイルをデフォルトのパッケージディレクトリ内に配置します。この後、MyObject の新規項目 MyField 用のファイルを別の「拡張」パッケージディレクトリに配置できます。これは、MyObject ファイルを含めなくても行うことができます。コードを整理する方法は多数ありますが、このトピックでは、すべての方法については説明いたしません。これらのブログ投稿にいくつかの考えが示されています。
複数のパッケージディレクトリの設定方法を次に示します。最初に、サンプルの sfdx-project.json スニペットを見てみましょう。
この sfdx-project.json スニペットでは、es-base-custom (デフォルト)、es-base-ext、es-base-styles の 3 つのパッケージディレクトリが定義されています。たとえば、最上位のローカルプロジェクトディレクトリが easy-spaces-lwc であるとしましょう。このディレクトリの下のディレクトリ階層は、次のようになっています。

各 es-base-* ディレクトリは、標準的な Salesforce DX プロジェクト構造に従います。たとえば、es-base-ext は、次のようになります。

開発環境に最も適した方法で、分解されたメタデータソースをこれらの複数のパッケージディレクトリに追加します。
Trailhead のしくみ
force:source:push を実行すると、CLI は、sfdx-project.json ファイルの packageDirectories セクションに指定されている順序で、メタデータを複数のパッケージディレクトリにリリースします。もう一度例を見てみましょう。
このソースを転送すると、組織は、es-base-custom、es-base-ext、es-base-styles からの順序でメタデータをリリースします。各パッケージディレクトリに独立した自己完結型のメタデータファイルが含まれている場合、force:source:push は、各パッケージディレクトリで、プロジェクト内の単一のものであるかのように機能します。
ただし、設定が次のようになっているとします。
- es-base-custom: カスタムオブジェクト MyObject のソースが含まれます。
- es-base-ext: MyObject のカスタム項目 MyField のソースが含まれます。MyObject のソースは含まれません。
(この例のように) sfdx-project.json で es-base-custom が es-base-ext より前に指定されている場合、組織では、最初に MyObject が作成され、その後に MyField が作成されます。force:source:push コマンドは成功します。
順序を変更して、次のように es-base-ext を最初に指定するとします。
この場合、組織は、MyObject が存在する前に MyObject 上に MyField を作成しようとします。このため、ソース転送は失敗します。
force:source:pull を実行すると、以前転送したローカルメタデータがプルされて、元のディレクトリ内に戻ります。組織でメタデータを作成する場合、force:source:pull コマンドは、新しいファイルをプルして、デフォルトディレクトリ (この例の場合は es-base-custom) に格納します。これらのプルされたファイルは、プロジェクトに適したディレクトリに移動できます。force:source:push で、移動したファイルを組織に転送すると、Salesforce CLI は、その新しい位置を追跡します。