generating-custom-object について
SalesforceカスタムオブジェクトのXMLメタデータ生成について、Metadata APIのデプロイエラーを避けるための要件と確認項目を示すスキルです。用途に応じて命名、共有設定、名前項目、機能設定を導きます。
主な機能
- 01カスタムオブジェクトXMLの生成ルール
- 02共有モデルの判断ロジック
- 03テキストまたは自動採番の名前項目
- 04ユーザー向け機能の設定
- 05命名とリレーションの制約
- 06生成前チェックリスト
活用シーン
- 01Salesforceカスタムオブジェクトの作成
- 02オブジェクト共有動作の設定
- 03デプロイ用オブジェクトメタデータの準備
- 04オブジェクト名や入力規則名の確認
インストール
コマンドをコピーしてターミナルで実行します。
npx skills add https:/ / github.com/ forcedotcom/ sf-skills --skill generating-custom-objectインストール後、Claude Code で/generating-custom-objectを入力して読み込まれたか確認します。
詳細
このスキルを使用するタイミング
次の作業が必要な場合に、このスキルを使用します。
- 新しいカスタムオブジェクトを作成する
- カスタムオブジェクトのメタデータ XML を生成する
- オブジェクトの共有とセキュリティの設定を構成する
- オブジェクトの機能と能力を設定する
- カスタムオブジェクトに関連するデプロイエラーをトラブルシューティングする
仕様
1. 概要と目的
このドキュメントでは、カスタムオブジェクトのメタデータ XML(.object-meta.xml ファイル)を生成する際の必須制約を定義します。メタデータ API のデプロイエラーを防ぐため、エージェントは XML を出力する前にこれらの制約を確認する必要があります。
ファイル拡張子: .object-meta.xml
2. 構文上の必須事項(Tier 1)
XML 本文が正常にデプロイされるには、次の制約を満たす必要があります。
注: API 名(fullName)はタグではなく、ファイル名です(例:Vehicle__c.object-meta.xml)。
必須要素
| 要素 | 要件 | 備考 |
|---|---|---|
<label> | 必須 | UI に表示する単数形の名前 |
<pluralLabel> | 必須 | UI に表示する複数形の名前 |
<sharingModel> | 必須 | 以下の共有モデルのルールを参照 |
<deploymentStatus> | 必須 | 常に Deployed を設定 |
<nameField> | 必須 | 主レコード識別子(<label> と <type> が必要) |
<visibility> | 必須 | 常に Public を設定 |
共有モデルのルール
デフォルト: <sharingModel> を ReadWrite に設定します。
例外: このオブジェクトに主従関係項目が含まれる場合、<sharingModel> は必ず ControlledByParent にします。
判断ロジック:
- オブジェクトに主従関係項目がない場合 →
ReadWriteを使用 - オブジェクトに主従関係項目がある場合 →
ControlledByParentを使用 - 既存の子オブジェクトに主従関係項目を追加する場合 → 既存のそのオブジェクトの
<sharingModel>もControlledByParentに更新する必要があります
❌ 不正 — 次のエラーが発生します:Cannot set sharingModel to ReadWrite on a CustomObject with a MasterDetail relationship field
<CustomObject xmlns="http://soap.sforce.com/2006/04/metadata">
<label>Order Line Item</label>
<pluralLabel>Order Line Items</pluralLabel>
<sharingModel>ReadWrite</sharingModel>
<deploymentStatus>Deployed</deploymentStatus>
</CustomObject>
✅ 正しい例:
<CustomObject xmlns="http://soap.sforce.com/2006/04/metadata">
<label>Order Line Item</label>
<pluralLabel>Order Line Items</pluralLabel>
<sharingModel>ControlledByParent</sharingModel>
<deploymentStatus>Deployed</deploymentStatus>
</CustomObject>
3. 適切なデフォルト値と判断ロジック(Tier 2)
エージェントは、オブジェクトの想定用途に基づいて有効にする機能を選択する必要があります。
A. 名前項目の選択
| 種類 | 使用する場面 | 追加要件 |
|---|---|---|
| Text | 人が名前を付けるエンティティ(プロジェクト、場所、チーム)のデフォルト | なし |
| AutoNumber | トランザクション、ログ、ID(請求書、リクエスト、チケット)に使用 | <displayFormat>(例:INV-{0000})と <startingNumber>1</startingNumber> を含める必要があります |
Text 名前項目の例:
<nameField>
<label>Project Name</label>
<type>Text</type>
</nameField>
AutoNumber 名前項目の例:
<nameField>
<label>Invoice Number</label>
<type>AutoNumber</type>
<displayFormat>INV-{0000}</displayFormat>
<startingNumber>1</startingNumber>
</nameField>
B. オブジェクトの説明
<description>:必須です。すべてのオブジェクトに、専門的な概要を含める必要があります。
目的が曖昧な場合は、次の概要を生成します。
組織内で[目的]を追跡および管理するために使用するオブジェクト。
C. 中間オブジェクトの命名
オブジェクトが2つの親オブジェクト間の多対多のリンクである場合は、スキーマを分かりやすく保つため、2つの親エンティティを組み合わせた名前を付けます。
例:
Position_Candidate__c(Position と Candidate をリンク)Job_Application__c(Job と Application をリンク)
D. 機能の有効化(クリーンな XML)
「クリーンな XML」を維持するため、Salesforce プラットフォームのデフォルトである false から変更する場合に限り、オプションのタグを含めます。
シナリオ A:ユーザーが利用するオブジェクト(アプリ、トラッカー、ビジネスエンティティ)
- 条件:オブジェクトがユーザーとの直接的なやり取りを想定している
- 対応:
<enableSearch>、<enableReports>、<enableActivities>、<enableHistory>をtrueに設定する
シナリオ B:システムが利用するオブジェクト(中間オブジェクト、バックグラウンドログ)
- 条件:技術的な関連付けやバックグラウンドデータのためにオブジェクトが存在する
- 対応:UI を整理し、XML を簡潔に保つため、これらのタグを省略する
4. 重大な制約とよくある失敗
予約語
カスタムオブジェクトやカスタム項目の API 名に予約語を使用しないでください。
| カテゴリ | 予約語(API 名として使用しないでください) |
|---|---|
| SOQL/SQL | Select、From、Where、Limit、Order、Group |
| システム | User、External、View、Type |
| 時間関連 | Date、Number |
リレーションの上限
1 つのオブジェクトに 2 つを超える主従関係を作成しないでください。3 つ目のリレーションが必要な場合は、代わりに参照関係を使用してください。
XML のルート要素
.object-meta.xml ファイルのルートに <fullName> タグを含めないでください。API 名はファイル名から導出されます。
❌ 不正:
<CustomObject xmlns="http://soap.sforce.com/2006/04/metadata">
<fullName>Vehicle__c</fullName>
<label>Vehicle</label>
</CustomObject>
✅ 正しい:
<CustomObject xmlns="http://soap.sforce.com/2006/04/metadata">
<label>Vehicle</label>
</CustomObject>
検証ルールの命名規則
検証ルール名には、カスタム項目とは異なる命名規則が適用されます。
ルール:
- 英数字とアンダースコアのみを使用する必要があります
- 先頭は英字にする必要があります
- アンダースコアで終わることはできません
- アンダースコアを 2 つ連続して含めることはできません
__cで終わってはいけません(カスタム項目とは異なります)
❌ 不正:
<validationRules>
<fullName>Require_Start_Date__c</fullName>
<active>true</active>
<errorMessage>Start Date is required.</errorMessage>
<formula>ISBLANK(Start_Date__c)</formula>
</validationRules>
エラー: 検証ルール名には英数字のみを使用でき、先頭は英字にする必要があり、アンダースコアで終わることはできません...
✅ 正しい:
<validationRules>
<fullName>Require_Start_Date</fullName>
<active>true</active>
<errorMessage>Start Date is required.</errorMessage>
<formula>ISBLANK(Start_Date__c)</formula>
</validationRules>
命名パターンの参照:
| メタデータの種類 | 命名パターン | 例 |
|---|---|---|
| カスタム項目 | __c で終わる | Start_Date__c |
| 検証ルール | 接尾辞なし | Require_Start_Date |
| カスタムオブジェクト | __c で終わる | Vehicle__c |
5. 検証チェックリスト
カスタムオブジェクトの XML を生成する前に、次の項目を確認してください。
構文チェック
-
<label>と<pluralLabel>の両方が含まれていますか? -
<deploymentStatus>はDeployedに設定されていますか? -
<visibility>はPublicに設定されていますか? -
<nameField>に<label>と<type>の両方が含まれていますか? -
<type>がAutoNumberの場合、<displayFormat>と<startingNumber>が含まれていますか?
共有モデルの確認(重要)
- このオブジェクトには主従関係項目がありますか?
- はいの場合 →
<sharingModel>は必ずControlledByParentにしてください - いいえの場合 →
<sharingModel>はReadWriteにしてください
- はいの場合 →
制約の確認
- API 名に予約語が含まれていませんか?
- 主従関係は 2 つ以下ですか?
- XML のルートに
<fullName>が含まれていませんか?
検証ルールの確認(該当する場合)
- 検証ルール名が
__cで終わっていませんか? - 検証ルール名が英数字とアンダースコアのパターンに従っていますか?
アーキテクチャの確認
- 意味のある概要を示す
<description>が含まれていますか? - ユーザー向けの場合、
<enableSearch>と<enableReports>はtrueに設定されていますか? - ファイル名は意図した API 名と一致していますか?