この文章は Salesforce 機械翻訳システムを使用して翻訳されました。詳細はこちらをご参照ください。
英語に切り替える

複数のパッケージディレクトリ

Salesforce DX プロジェクトを作成するときは、複数のパッケージディレクトリをローカルに作成して、メタデータを論理グループ別に整理することをお勧めします。これらのディレクトリは、sfdx-project.json ファイルに定義します。アプリケーションやカスタマイズのコードとソースについて、類似するものをグループ化すると、チームのリポジトリをより適切に整理できます。後で第二世代管理パッケージ (2GP) を使用することを決定した場合、これらのディレクトリは、実際の 2GP パッケージに対応します。

このトピックでは、わかりやすくするために、パッケージディレクトリは、分解されたメタデータファイル、つまりソース形式のメタデータを含むローカル (クライアント側) ディレクトリを指しています。このディレクトリは、必ずしも 2GP パッケージになるわけではありません。パッケージは、2GP パッケージを指しています。

また、プッシュリリースは同義の用語で、どちらも、ローカルプロジェクトから組織にメタデータコンポーネントを移動することを意味します。同様に、プル取得も同義の用語です。このトピックでは通常、リリース取得を使用します。ただし、force:source:push|pull コマンドの特定の動作について話題にするときは、プッシュプルを使用します。

メモ

sfdx-project.json ファイルの packageDirectories セクションで、各パッケージディレクトリを別々に指定します。各ローカルパッケージディレクトリは、標準的な Salesforce DX プロジェクト構造に従います。

複数のパッケージディレクトリの構造は、クライアント側 (ローカル) のみです。force:source:deploy または force:source:push でソースを組織にリリースした場合、そのローカルパッケージディレクトリの位置と組織のパッケージの間に関連はありません。特定の 2GP パッケージを明示的にインストールして、メタデータが組織のその 2GP パッケージに属することを指定します。

すべての force:source:* コマンドで複数のパッケージディレクトリがサポートされています。

考慮事項

複数のパッケージディレクトリを設定する前に、次の考慮事項を確認してください。

  • デフォルトでは、force:source:deployforce:source:push はどちらも、単一のトランザクションでメタデータを組織にリリースします。この動作は、sfdx-project.json に複数のパッケージディレクトリが指定されている順序に関係なく実行されます。force:source:push コマンドは、すべてのパッケージディレクトリ内にある変更されたメタデータと新規のメタデータをすべてプッシュします。force:source:deploy は、指定されたメタデータのみをリリースします。force:source:push を使用したいが、パッケージディレクトリをプッシュする順序も指定したい場合は、sfdx-project.jsonpushPackageDirectoriesSequentially プロパティを使用します。詳細は、「ソースの順次プッシュ」を参照してください。
  • デフォルトでは、force:source:deploy|retrieve コマンドは、ソースファイル内の変更を追跡しません。このコマンドのソース追跡を有効にするには、コマンドを実行するたびに --tracksource パラメータを指定します。そうすると、force:source:deploy|retrieve コマンドは、force:source:push|pull コマンドと同じ内部ソース追跡ファイルを使用するようになります。force:source:deploy|retrieveforce:source:push|pull を一緒に使用する場合は、必ずこのパラメータを使用してください。そうしない���、内部ソース追跡ファイルが同期されなくなります。force:source:push|pull コマンドは、常にソースの変更を追跡します。

設定方法

複数のパッケージディレクトリの設定は簡単です。これらのディレクトリ間でローカルソースコードを整理する方法については、十分な検討と計画が必要です。また、その方法は、ご使用の開発環境によっても変わります。作業を始める前に、コードをどのように整理するかを計画します。開発者がより簡単かつ効率的に作業できるようにするため、ソースコードは、プロジェクトが拡大しても、常に適切に整理された状態にしておいてください。

簡単な例を見てみましょう。たとえば、カスタムオブジェクト MyObject の分解されたメタデータファイルをデフォルトのパッケージディレクトリ内に配置します。この後、MyObject の新規項目 MyField 用のファイルを別の「拡張」パッケージディレクトリに配置できます。これは、MyObject ファイルを含めなくても行うことができます。コードを整理する方法は多数ありますが、このトピックでは、すべての方法については説明いたしません。これらのブログ投稿にいくつかの考えが示されています。

複数のパッケージディレクトリの設定方法を次に示します。最初に、サンプルの sfdx-project.json スニペットを見てみましょう。

この sfdx-project.json スニペットでは、es-base-custom (デフォルト)、es-base-extes-base-styles の 3 つのパッケージディレクトリが定義されています。たとえば、最上位のローカルプロジェクトディレクトリが easy-spaces-lwc であるとしましょう。このディレクトリの下のディレクトリ階層は、次のようになっています。

easy-spaces-lwd プロジェクトディレクトリのディレクトリ階層を示す画像。

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

easy-spaces-lwc プロジェクトディレクトリの es-base-ext サブディレクトリのディレクトリ階層を示す画像。

開発環境に最も適した方法で、分解されたメタデータソースをこれらの複数のパッケージディレクトリに追加します。

Trailhead のしくみ

いくつかの例を通じて、force:source:push|pullforce:source:deploy|retrieve が複数のパッケージディレクトリを操作する方法を確認しましょう。

このセクションの例では、force:source:deploy|retrieve コマンドと force:source:push|pull コマンドを一緒に使用するものと想定されています。ソース追跡の同期を維持するため、force:source:deploy|retrieve の例では、--tracksource パラメータが使用されています。

メモ

新しい組織に対して force:source:push コマンドは、sfdx-project.json ファイルに指定されている複数のすべてのパッケージディレクトリ内のメタデータをすべてプッシュします。その後、新しいメタデータ、変更されたメタデータ、または削除対象とマークされたメタデータをプッシュします。デフォルトでは、パッケージディレクトリが 1 つだけであるかのように、メタデータを単一のトランザクションでプッシュします。

これに対し、リリースしたいメタデータを対象にするには、force:source:deploy を使用します。リリースできるのは、特定のパッケージディレクトリ、特定のメタデータコンポーネント、マニフェストファイルに指定されているコンポーネントなどです。次の例では、es-base-custom パッケージディレクトリのメタデータがリリースされます。

次の例では、複数のすべてのパッケージディレクトリにある Apex クラスがすべてリリースされます。

force:source:pull を実行すると、組織のすべてのリモートの変更がローカルプロジェクト内にプルされます。コマンドは、取得されたコンポーネントごとにすべてのパッケージディレクトリを調べ、ローカル一致がないかを確認します。一致が見つかった場合、コマンドは、コンポーネントを更新します。一致が見つからなかった場合、コマンドは、ローカルコンポーネントをデフォルトのパッケージディレクトリ (この例では es-base-custom) 内にコピーします。

プルされたファイルは、プロジェクトに適したパッケージディレクトリに移動できます。force:source:push で、移動したファイルを組織に戻すと、Salesforce CLI は、その新しい位置を追跡します。

対象のメタデータを組織から取得するには、force:source:retrieve を使用します。force:source:pull と同様、既存のメタデータは目的のローカルパッケージディレクトリ内に取得され、新しいメタデータはデフォルトのパッケージディレクトリ内に取得されます。次の例では、ローカル es-base-custom パッケージディレクトリに含まれているメタデータコンポーネントのみが取得されます。

次の例では、組織からすべての Apex クラスが取得されます。新しいクラスはデフォルトのパッケージディレクトリに移動し、ローカルに存在するクラスは対応するパッケージディレクトリに移動します。

ソースの順次プッシュ

前述したように、デフォルトでは force:source:push は、すべてのパッケージディレクトリ内のメタデータを、順序を考慮せずに単一のトランザクションでプッシュします。ほとんどのプロジェクトでは、単一のトランザクションを使用した方がはるかに高速になります。ただし、パッケージディレクトリをプッシュする順序を正確に指定することが必要な場合もあります。次のような理由が考えられます。
  • ローカルプロジェクト内の再構成されたメタデータコンポーネントファイルの数が、1 回の取得またはリリースあたり 10,000 ファイルという Salesforce のメタデータの制限を超える。回避策の 1 つとして、メタデータを複数のパッケージディレクトリに分割し、各ディレクトリに含まれるファイル数をこの制限未満にして、各ディレクトリを順次的に別々にプッシュする方法があります。
  • 複数のパッケージディレクトリ間に連動関係があり、各ディレクトリを特定の順序でプッシュする必要がある。
  • 複数のパッケージディレクトリに同じメタデータコンポーネントが含まれており、どれを最後にリリースして上書きされないようにするかを指定したいと考えている。

sdfx-project.json に指定されている順序で複数のパッケージディレクトリを指定するには、このファイルに "pushPackageDirectoriesSequentially": true を追加します。次に例を示します。

force:source:push を実行すると、最初に es-base-custom からのメタデータ、次に es-base-ext からのメタデータ、次に es-base-styles からのメタデータの順序で、3 つのプッシュが個別に実行されます。

pushPackageDirectoriesSequentially プロパティは force:source:deploy の動作に影響を与えません。force:source:deploy コマンドを使用するときに特定の順序で複数のリリースが必要な場合は、-p または -m パラメータを使用して必要な順序でコマンドを複数回実行します。

重要