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

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

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

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

メモ

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:pushforce:source:pull を使用していますが、force:source:deployforce:source:retrieve も使用できます。

考慮事項

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

  • 前述のとおり、force:source:pushforce: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-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 を実行すると、CLI は、sfdx-project.json ファイルの packageDirectories セクションに指定されている順序で、メタデータを複数のパッケージディレクトリにリリースします。もう一度例を見てみましょう。

このソースを転送すると、組織は、es-base-customes-base-extes-base-styles からの順序でメタデータをリリースします。各パッケージディレクトリに独立した自己完結型のメタデータファイルが含まれている場合、force:source:push は、各パッケージディレクトリで、プロジェクト内の単一のものであるかのように機能します。

ただし、設定が次のようになっているとします。

  • es-base-custom: カスタムオブジェクト MyObject のソースが含まれます。
  • es-base-ext: MyObject のカスタム項目 MyField のソースが含まれます。MyObject のソースは含まれません。

(この例のように) sfdx-project.jsones-base-customes-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 は、その新しい位置を追跡します。