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クラス本体(トリガ以外のロジック)
ApexTriggerApexトリガオブジェクトトリガ
ApexPageVisualforceページVFページ本体
ApexComponentVisualforceコンポーネントVFコンポーネント
LightningComponentBundleLightning Web ComponentLWC(HTML / JS / XML / CSS の束)
AuraDefinitionBundleAuraコンポーネントAura Component(旧LWC)
CustomObjectカスタムオブジェクトカスタムオブジェクト定義(項目含む)
CustomFieldカスタム項目オブジェクトの項目定義
Layoutページレイアウトレコード詳細画面のレイアウト
RecordTypeレコードタイプレコードタイプ定義
PermissionSet権限セット権限セット
Profileプロファイルプロファイル設定
CustomTabカスタムタブオブジェクト/VF/Webのタブ
FlexiPageLightningページ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

使い方と注意点

  1. 取得したいメタデータを決める: まず、どの種類のメタデータ(Apexクラス、カスタムオブジェクト、プロファイルなど)を取得したいかを決めます。
  2. <types>ブロックを追加: 次に、取得したいメタデータごとに<types>ブロックを用意します。
  3. <name>を指定: そして、<name>タグの中に、対象のメタデータ型(ApexClassCustomObjectなど)を記述します。
  4. <members>*にする: 最後に、<members>タグの中身を*にします。
  5. バージョンを合わせる: また、<version>タグは、お使いの組織のAPIバージョンに合わせてください。

このpackage.xmlを使ってSFDXコマンドやAnt移行ツールなどで取得を実行すれば、指定した種類のメタデータがすべてローカルにダウンロードされます。

注意点として、*を使うと管理パッケージのコンポーネントなど、編集・デプロイができない資材も含まれる場合があります。環境移行などの際は、取得後に不要な資材を手動で除外する必要が出てくることもあるので、その点は留意しておきましょう。

まとめ

このように、package.xmlでワイルドカード(*)を活用すれば、特定のメタデータを一括で、かつ漏れなく取得できるため、開発やバックアップの効率が格段に上がります。

ぜひ試してみてください。

エビデンス・参考ナレッジ

最後に、今回参考にしたSalesforce公式のドキュメントを記載します。

投稿者 てきとうSE

普段はシステムエンジニアとして、SalesforceなどのSaaS製品と日々向き合っています。

コメントを残す

名前は任意です。未入力の場合は「匿名」として投稿されます。