Code Builderでメタデータを取得する方法

### **Code Builder で `package.xml` を使ってメタデータを取得・デプロイする方法**

`package.xml` を使うことで、**取得（retrieve）** や **デプロイ（deploy）** するメタデータを細かく指定できます。

---

## **1. `package.xml` を使う場合の手順**
Code Builder で `package.xml` を使ってメタデータを取得・デプロイする基本的な流れは以下の通りです。

### **(1) `package.xml` の作成**
まず、`manifest` フォルダを作成し、その中に `package.xml` を作成します。

#### **`package.xml` の作成手順**
1. Code Builder 内で `manifest` フォルダを作成（まだない場合）
   ```sh
   mkdir manifest
   ```
2. `manifest` フォルダ内に `package.xml` を作成
   ```sh
   touch manifest/package.xml
   ```
3. `package.xml` に必要なメタデータの記述を追加（記述方法は後述）

---

### **(2) `package.xml` を使ってメタデータを取得**
Sandbox から **指定したメタデータ** を Code Builder にダウンロードするには、以下のコマンドを実行します。

```sh
sf project retrieve start --manifest manifest/package.xml --target-org MySandbox
```

- `--manifest manifest/package.xml` → `package.xml` を使って取得
- `--target-org MySandbox` → 取得先の Salesforce 組織（Sandbox）を指定

---

### **(3) `package.xml` を使ってメタデータをデプロイ**
開発したクラスや LWC などを **Sandbox にデプロイ** するには、以下のコマンドを実行します。

```sh
sf project deploy start --manifest manifest/package.xml --target-org MySandbox
```

- `--manifest manifest/package.xml` → `package.xml` に記載されたメタデータをデプロイ
- `--target-org MySandbox` → 送信先の Salesforce 組織（Sandbox）を指定

---

## **2. `package.xml` に含めるべきメタデータの基準**
### **(1) 含めるべき Apex クラス・トリガー**
- **開発したクラス・トリガー** だけを取得する（すべて取得すると管理が大変）
- **テストクラス** も含める（特に本番環境にデプロイする場合）

**例**
```xml
<types>
    <members>MyApexClass</members>
    <members>MyTestClass</members>
    <name>ApexClass</name>
</types>
```

---

### **(2) 含めるべきオブジェクト・フィールド**
- **標準オブジェクト** ではなく、**カスタムオブジェクト**（`__c` が付く）を対象にすることが多い
- **カスタムフィールド** も個別に指定可能（オブジェクトごとに管理）

**例**
```xml
<types>
    <members>CustomObject__c</members>
    <name>CustomObject</name>
</types>
<types>
    <members>CustomObject__c.CustomField__c</members>
    <name>CustomField</name>
</types>
```

---

### **(3) 含めるべき LWC（Lightning Web Components）**
- 開発した LWC コンポーネントのみを取得
- `LightningComponentBundle` を指定する

**例**
```xml
<types>
    <members>myLightningComponent</members>
    <name>LightningComponentBundle</name>
</types>
```

---

### **(4) フローやプロセスビルダー**
- **画面フロー（Screen Flow）**
- **オートメーション（プロセスビルダー）**
- フローの名前を指定する

**例**
```xml
<types>
    <members>MyFlow</members>
    <name>Flow</name>
</types>
```

---

### **(5) 設定情報（Custom Metadata, Custom Labels など）**
設定情報（カスタムメタデータ、カスタムラベル）も含めることが可能。

**例**
```xml
<types>
    <members>MyCustomMetadata__mdt</members>
    <name>CustomMetadata</name>
</types>
<types>
    <members>MyCustomLabel</members>
    <name>CustomLabel</name>
</types>
```

---

## **3. `package.xml` の具体的な記述例**
以下は、Apex クラス・トリガー・カスタムオブジェクト・LWC・フローなどを含めた `package.xml` のサンプルです。

```xml
<?xml version="1.0" encoding="UTF-8"?>
<Package xmlns="http://soap.sforce.com/2006/04/metadata">
    <types>
        <members>MyApexClass</members>
        <members>MyTestClass</members>
        <name>ApexClass</name>
    </types>
    <types>
        <members>MyTrigger</members>
        <name>ApexTrigger</name>
    </types>
    <types>
        <members>CustomObject__c</members>
        <name>CustomObject</name>
    </types>
    <types>
        <members>CustomObject__c.CustomField__c</members>
        <name>CustomField</name>
    </types>
    <types>
        <members>myLightningComponent</members>
        <name>LightningComponentBundle</name>
    </types>
    <types>
        <members>MyFlow</members>
        <name>Flow</name>
    </types>
    <types>
        <members>MyCustomMetadata__mdt</members>
        <name>CustomMetadata</name>
    </types>
    <types>
        <members>MyCustomLabel</members>
        <name>CustomLabel</name>
    </types>
    <version>58.0</version>
</Package>
```

---

## **4. `package.xml` を活用した開発のポイント**
1. **適切なメタデータだけを選ぶ**
   - 不要なクラスやオブジェクトを含めると、デプロイの管理が難しくなる
   - **開発したもの、または関連するものだけを指定する**
   
2. **本番環境へのデプロイ時にテストクラスを含める**
   - 本番環境（Production）では `testLevel=RunLocalTests` を指定してテストを実行するのが推奨される

3. **メタデータを追加したら `package.xml` も更新する**
   - 新しいクラスやフィールドを追加した場合、`package.xml` も適宜更新

---

## **5. まとめ**
✅ **`package.xml` を使う場合の基本手順**
1. `manifest/package.xml` を作成
2. `sf project retrieve start --manifest manifest/package.xml --target-org MySandbox`
3. 開発を進める
4. `sf project deploy start --manifest manifest/package.xml --target-org MySandbox`

✅ **含めるべきメタデータの基準**
- **Apex クラス・トリガー**：開発したもの＋テストクラス
- **カスタムオブジェクト・フィールド**：開発対象のもの
- **LWC（Lightning Web Components）**：作成したコンポーネント
- **フロー・プロセスビルダー**：開発対象のフロー
- **設定情報（Custom Metadata, Custom Labels）**：必要なもの

これで、Code Builder で `package.xml` を使ったメタデータ管理ができるようになります！🚀