複数のパッケージディレクトリ
sfdx-project.json ファイルの packageDirectories セクションで、各パッケージディレクトリを別々に指定します。各ローカルパッケージディレクトリは、標準的な Salesforce DX プロジェクト構造に従います。
複数のパッケージディレクトリの構造は、クライアント側 (ローカル) のみです。project deploy start でソースを組織にリリースした場合、そのローカルパッケージディレクトリの場所と組織のパッケージの間に関係性はありません。特定の 2GP パッケージを明示的にインストールして、メタデータが組織のその 2GP パッケージに属することを指定します。
メタデータのリリース、取得、変換を行うすべての project コマンドは、複数のパッケージディレクトリをサポートしています。
設定方法
複数のパッケージディレクトリの設定は簡単です。これらのディレクトリ間でローカルソースコードを整理する方法については、十分な検討と計画が必要です。また、その方法は、ご使用の開発環境によっても変わります。作業を始める前に、コードをどのように整理するかを計画します。開発者がより簡単かつ効率的に作業できるようにするため、ソースコードは、プロジェクトが拡大しても、常に適切に整理された状態��しておいてください。
たとえば、カスタムオブジェクト MyObject の分解されたメタデータファイルをデフォルトのパッケージディレクトリ内に配置するとします。この後、MyObject の新規項目 MyField 用のファイルを別の「拡張」パッケージディレクトリに配置できます。これは、MyObject ファイルを含めなくても行うことができます。これは単純な例ですが、コードは他にもさまざまな方法で整理できます。これらのブログ投稿にいくつかの考えが示されています。
複数のパッケージディレクトリの設定方法を次に示します。最初に、サンプルの sfdx-project.json スニペットを見てみましょう。
1"packageDirectories": [
2 {
3 "path": "es-base-custom",
4 "default": true
5 },
6 {
7 "path": "es-base-ext"
8 },
9 {
10 "path": "es-base-styles"
11 }
12 ],このサンプル sfdx-project.json スニペットでは、es-base-custom (デフォルト)、es-base-ext、es-base-styles の 3 つのパッケージディレクトリが定義されています。たとえば、最上位のローカルプロジェクトディレクトリが easy-spaces-lwc であるとしましょう。このディレクトリの下のディレクトリ階層は、���のようになっています。

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

開発環境に最も適した方法で、分解されたメタデータソースをこれらの複数のパッケージディレクトリに追加します。
Trailhead のしくみ
いくつかの例を通じて、project deploy start と project retrieve start が複数のパッケージディレクトリを操作する方法を確認しましょう。
新しい組織に対して default project deploy start コマンドは、sfdx-project.json ファイルに指定されている複数のすべてのパッケージディレクトリ内のすべてのメタデータをリリースします。その後、新しいメタデータ、変更されたメタデータ、または削除対象とマークされたメタデータのみをリリースします。デフォルトでは、パッケージディレクトリが 1 つだけであるかのように、メタデータを単一のトランザクションでリリースします。
1sf project deploy start --target-org my-orgまた、リリースするメタデータを指定することもできます。リリースできるのは、特定のパッケージディレクトリ、特定のメタデータコンポーネント、マニフェストファイルに指定されているコンポーネントなどです。次の例では、es-base-custom パッケージディレクトリのメタデータがリリースされます。
1sf project deploy start --source-dir es-base-custom --target-org my-org次の例では、複数のすべてのパッケージディレクトリにある Apex クラスがすべてリリースされます。
1sf project deploy start --metadata ApexClass --target-org my-orgproject retrieve start を実行すると、組織のすべてのリモートの変更がローカルプロジェクトに取り込まれます。コマンドは、取得されたコンポーネントごとにすべてのパッケージディレクトリを調べ、ローカル一致がないかを確認します。一致が見つかった場合、コマンドは、コンポーネントを更新します。一致が見つからなかった場合、コマンドは、ローカルコンポーネントをデフォルトのパッケージディレクトリ (この例では es-base-custom) 内にコピーします。
1sf project retrieve start --target-org my-org取得されたファイルは、プロジェクトに適したパッケージディレクトリに移動できます。project deploy start で、移動したファイルを組織に戻すと、Salesforce CLI は、その新しい位置を追跡します。
project retrieve start を使用して、組織から対象のメタデータを取得することもできます。既存のメタデータは、正しいローカルパッケージディレクトリ内に取り込まれ、新しいメタデータはデフォルトのパッケージディレクトリ内に取り込まれます。次の例では、ローカル es-base-custom パッケージディレクトリに含まれているメタデータコンポーネントのみが取得されます。
1sf project retrieve start --source-dir es-base-custom --target-org my-org次の例では、組織からすべての Apex クラスが取得されます。新しいクラスはデフォルトのパッケージディレクトリに移動し、ローカルに存在するクラスは対応するパッケージディレクトリに移動します。
1sf project retrieve start --metadata ApexClass --target-org my-orgソースの順次プッシュ
デフォルトで、project deploy start は単一のトランザクションでメタデータを組織にリリースします。この動作は、sfdx-project.json に指定されている複数のパッケージディレクトリの順序に関係なく実行されます。ただし、パッケージディレクトリをプッシュする順序を正確に指定することが必要な場合もあります。次のような理由が考えられます。
- ローカルプロジェクト内の再構成されたメタデータコンポーネントファイルの数が、1 回の取得またはリリースあたり 10,000 ファイルという Salesforce のメタデータの制限を超える。回避策の 1 つとして、メタデータを複数のパッケージディレクトリに分割し、各ディレクトリに含まれるファイル数をこの制限未満にして、各ディレクトリを順次的に別々にプッシュする方法があります。
- 複数のパッケージディレクトリ間に連動関係があり、各ディレクトリを特定の順序でプッシュする必要がある。
- 複数のパッケージディレクトリに同じメタデータコンポーネントが含まれており、どれを最後にリリースして上書きされないようにするかを指定したいと考えている。
複数のリリースを特定の順序で実行する必要がある場合は、--source-dir または --metadata フラグを指定した project deploy start を目的の順序で複数回実行してください。