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>

使い方と注意点

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

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

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

まとめ

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

投稿者 てきとうSE

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

コメントを残す

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