同期時のソースの除外方法
.forceignore ファイルは、project deploy start、project retrieve start、project convert source、project delete source など、ほとんどの project コマンドの実行時にファイルを除外します。
.forceignore ファイルの構造
.forceignore ファイルの構造は .gitignore の構造によく似ています。.forceignore の各行には 1 つ以上のファイルに対応するパターンを指定します。通常、このファイルはメタデータコンポーネントを表しますが、LWC 設定 JSON ファイルやテストなどの除外する任意のファイルにすることができます。
.forceignore ファイルを解析する場合に、project コマンドは、.gitignore ファイルと同じルールおよびパターンを使用します。これらのルールとパターンの共通の例を次にいくつか示します。
- ディレクトリ区切り文字には必ずスラッシュ (/) を使用します。これは、Microsoft Windows などのバックスラッシュを使用するオペレーティングシステムの場合であっても同じです。
- アスタリスク (*) は、スラッシュ (/) を除くすべての文字に一致します。
- パターン内の 2 つの連続するアスタリスク (**) は、パス名内の位置に応じて特別な意味を持ちます。例を参照してください。
- 読みやすさのため、.forceignore ファイルでは、空白行を区切り文字として使用します。
他にも多くのルールとパターンがあります。詳細は、git のドキュメントを参照してください。
メタデータコンポーネントの正確なファイル名の判別
.forceignore ファイルを作成するときは、除外するメタデータコンポーネントの正確な名前が必要になる場合があります。特定のコンポーネントの名前を判断する最も簡単な方法は、デフォルトの force-app ディレクトリなど、ソースファイルを含むパッケージディレクトリを確認することです。
たとえば、プロファイルのメタデータコンポーネントは main/default/profiles ディレクトリにあります。このディレクトリに NotUsedProfile.profile-meta.xml というソースファイルがあるとします。project コマンドでこのコンポーネントを除外することを指定するには、.forceignore に次のエントリを追加します。
ソース追跡も使用している場合は、project コマンドの出力を確認してメタデータコンポーネントの正確な名前を判別するという方法もあります。たとえば、ローカルまたはリモートで変更が行われた場合、project deploy preview または project retrieve preview コマンドを実行すると、変更されたコンポーネントのフルパス名が表示されます。この出力には、Dreamhouse 権限セットのファイル名と、Will Deploy セクションの Path 列の Settings カスタムタブが示されています。
source コマンドで無視されるその他のファイル
source コマンドでは、.forceignore ファイルに含まれていなくても、次のファイルが無視されます。
- 「ドット」で始まるソースファイルまたはディレクトリ (.DS_Store や .sf など)
- .dup で終了するファイル
- package2-descriptor.json
- package2-manifest.json
ローカルソースとまだ同期されていないリモートの変更の除外
場合によっては、組織で直接変更したものを、ローカルの DX プロジェクトで取得したくないことがあります。リモートのメタデータ変更を除外するには、メタデータソースファイルを表すエントリを .forceignore に追加します。メタデータソースファイルは、それを実際に取得すれば作成されます。
たとえば、「Dreamhouse」という名前の権限セットがある場合は、.forceignore に次のエントリを追加します。
MetadataWithContent Types 種別の除外
ApexClass や EmailTemplate などのコンテンツを含むメタデータコンポーネントは、MetadataWithContent 種別を拡張します。これらのコンポーネントには 2 つのソースファイルがあります。Apex コードやメールテンプレートなどのコンテンツ自体のソースファイルとそれに付随するメタデータファイルです。たとえば、HelloWorld Apex クラスのソースファイルは HelloWorld.cls と HelloWorld.cls-meta.xml です。
バンドルおよびファイルグループの除外
1 つの .forceignore エントリのみで複数のディレクトリにあるファイルを無視するには、2 つの連続するアスタリスク (**) を使用します。
たとえば、myLwcComponent という Lightning Web コンポーネントに関連するリソースファイルをすべて除外する場合は、次のエントリを追加することにより、コンポーネントバンドル全体が除外されます。
すべての Apex クラスを除外するには、次のようにします。
特殊文字を含むメタデータ
メタデータ名に特殊文字 (スラッシュ、バックスラッシュ、引用符など) が含まれる場合、すべてのオペレーティングシステムでローカルファイルシステム上のファイル名がエンコードされます。たとえば、Custom: Marketing Profile というカスタムプロファイルを取得する場合、生成されるファイル名のコロンはエンコードされます。
Custom%3A Marketing Profile.profile-meta.xml
.forceignore で特殊文字を含むファイル名を参照する場合は、エンコードされたファイル名を使用します。
.forceignore を配置する場所
.forceignore に指定するパスは、必ず .forceignore ファイルが含まれるディレクトリに対する相対���スにします。.forceignore ファイルが機能するためには、実行するコマンドに応じて適切な場所に配置する必要があります。
- project ソース追跡コマンドの場合、.forceignore ファイルをプロジェクトのルートに追加します。
- project convert mdapi の場合、ファイルをメタデータ retrieve ディレクトリ (package.xml を含む) に追加します。
現在無視されているファイルやディレクトリのリスト
project list ignore コマンドを使用して、プロジェクトのファイルやディレクトリのうち、現在 project コマンドで無視されているものをリストします。project list ignored コマンドは .forceignore ファイルを参照して、無視されているファイルをリストアップします。
すべてのパッケージディレクトリにある、無視されているすべてのファイルを一覧表示するには、フラグを付けずにコマンドを実行します。--source-dir フラグを使用した場合は、特定のファイルまたはディレクトリのみにチェックが制限されます。ディレクトリを指定すると、コマンドがすべてのサブディレクトリを再帰的にチェックします。
次の例では、特定のファイルが無視されているかどうかがチェックされます。
この例では、特定のディレクトリ内の無視されているすべてのファイルのリストを取得します。
無視されているファイルが見つかった場合の出力例:
ファイルが無視されていない場合の出力例: