
Salesforceの開発や環境移行などで、メタデータを一括で取得したいという状況はありませんか?
特に、「Apexクラスを全部」「フローをすべて」のように、特定の種類の資材をまとめて取得したいケースは多いでしょう。
このような場合に便利なのが、package.xmlファイルでワイルドカード(*)を使う方法です。この記事では、package.xmlを編集して、特定のメタデータをごっそり取得する方法を分かりやすく解説します。
package.xmlの基本
package.xmlは、Salesforceのメタデータを取得(retrieve)したり、デプロイ(deploy)したりする際に、どの資材を対象にするかを定義するマニフェストファイルです。
通常、<members>タグの中に対象となる資材のAPI名を一つひとつ指定しますが、数が多いと非常に手間がかかります。
XML
<types>
<members>MyCustomApexClass1</members>
<members>MyCustomApexClass2</members>
<name>ApexClass</name>
</types>
ワイルドカード「*」で全選択
そこで、役立つのがワイルドカードのアスタリスク(*)です。<members>タグの中身を*にすることで、「その種類のメタデータをすべて選択する」という意味になります。
要するに、API名を一つひとつ調べる手間が省け、簡単かつ確実にすべての資材を取得できます。
サンプルコード
以下は、Apexクラス、承認プロセス、メールアラート、フロー、カスタム表示ラベルをすべて取得する場合のpackage.xmlのサンプルです。
XML
<?xml version="1.0" encoding="UTF-8"?>
<Package xmlns="http://soap.sforce.com/2006/04/metadata">
<!-- Apexクラス -->
<types>
<members>*</members>
<name>ApexClass</name>
</types>
<!-- 承認プロセス -->
<types>
<members>*</members>
<name>ApprovalProcess</name>
</types>
<!-- メールアラート -->
<types>
<members>*</members>
<name>WorkflowAlert</name>
</types>
<!-- フロー -->
<types>
<members>*</members>
<name>Flow</name>
</types>
<!-- カスタム表示ラベル -->
<types>
<members>*</members>
<name>CustomLabel</name>
</types>
<version>60.0</version>
</Package>
上記package.xmlで使用できるメタデータ型の一覧
| 英語メタデータ型 | 日本語名 | 該当する内容・設定例 |
|---|---|---|
| ApexClass | Apexクラス | Apexクラス本体(トリガ以外のロジック) |
| ApexTrigger | Apexトリガ | オブジェクトトリガ |
| ApexPage | Visualforceページ | VFページ本体 |
| ApexComponent | Visualforceコンポーネント | VFコンポーネント |
| LightningComponentBundle | Lightning Web Component | LWC(HTML / JS / XML / CSS の束) |
| AuraDefinitionBundle | Auraコンポーネント | Aura Component(旧LWC) |
| CustomObject | カスタムオブジェクト | カスタムオブジェクト定義(項目含む) |
| CustomField | カスタム項目 | オブジェクトの項目定義 |
| Layout | ページレイアウト | レコード詳細画面のレイアウト |
| RecordType | レコードタイプ | レコードタイプ定義 |
| PermissionSet | 権限セット | 権限セット |
| Profile | プロファイル | プロファイル設定 |
| CustomTab | カスタムタブ | オブジェクト/VF/Webのタブ |
| FlexiPage | Lightningページ | Lightning Record / App / Home のLightningページ |
| Flow | フロー | 画面フロー / 自動起動フローなど |
| FlowDefinition | フロー定義 | 有効な最新バージョンのフロー |
| Workflow | ワークフロー | メールアラート・項目更新等 |
| ApprovalProcess | 承認プロセス | 承認フロー定義 |
| AssignmentRules | 割り当てルール | ケース・リードの割り当てルール |
| AutoResponseRules | 自動返信ルール | ケース・リードの自動返信ルール |
| EscalationRules | エスカレーションルール | ケースのエスカレーションルール |
| EmailTemplate | メールテンプレート | Classic / Lightning メールテンプレ |
| Report | レポート | レポート定義 |
| Dashboard | ダッシュボード | ダッシュボード定義 |
| SharingRules | 共有ルール | レコード共有ルール |
| Role | ロール | ロール階層 |
| Queue | キュー | キューの定義 |
| CustomLabel | カスタム表示ラベル | カスタム表示ラベルの定義 |
| StaticResource | 静的リソース | JS / CSS / 画像 / zip |
| NamedCredential | 認証付き接続設定 | 外部API接続 |
| RemoteSiteSetting | リモートサイト設定 | 外部接続許可URL |
| ConnectedApp | 接続アプリ | OAuth連携アプリ |
| ExternalDataSource | 外部データソース | Salesforce Connect |
使い方と注意点
- 取得したいメタデータを決める: まず、どの種類のメタデータ(Apexクラス、カスタムオブジェクト、プロファイルなど)を取得したいかを決めます。
<types>ブロックを追加: 次に、取得したいメタデータごとに<types>ブロックを用意します。<name>を指定: そして、<name>タグの中に、対象のメタデータ型(ApexClass、CustomObjectなど)を記述します。<members>を*にする: 最後に、<members>タグの中身を*にします。- バージョンを合わせる: また、
<version>タグは、お使いの組織のAPIバージョンに合わせてください。
このpackage.xmlを使ってSFDXコマンドやAnt移行ツールなどで取得を実行すれば、指定した種類のメタデータがすべてローカルにダウンロードされます。
注意点として、*を使うと管理パッケージのコンポーネントなど、編集・デプロイができない資材も含まれる場合があります。環境移行などの際は、取得後に不要な資材を手動で除外する必要が出てくることもあるので、その点は留意しておきましょう。
まとめ
このように、package.xmlでワイルドカード(*)を活用すれば、特定のメタデータを一括で、かつ漏れなく取得できるため、開発やバックアップの効率が格段に上がります。
ぜひ試してみてください。
エビデンス・参考ナレッジ
最後に、今回参考にしたSalesforce公式のドキュメントを記載します。
- Metadata Coverage
- https://developer.salesforce.com/docs/metadata-coverage/66
- メタデータのカバレッジ情報が記載されています
- Salesforce ヘルプ: zip ファイルを使用したメタデータのリリースと取得
- https://developer.salesforce.com/docs/atlas.ja-jp.252.0.api_meta.meta/api_meta/file_based_zip_file.htm
- package.xmlの使用方法と作成方法が記載されています
