結論
- データ管理が目的なら、カスタムオブジェクトを使用。
- システムや設定情報の管理が目的なら、カスタムメタデータを使用。
1. 基本的な概要
項目 | カスタムオブジェクト | カスタムメタデータ |
---|---|---|
目的 | アプリケーションのデータを保存・管理するため。 | アプリケーションやシステムの設定情報を保存するため。 |
主な用途 | - レコードデータの管理 - ビジネスプロセスの実行用 |
- 設定値や定数の管理 - カスタマイズや動的ロジックの実現 |
保存するデータ例 | - 顧客情報 - 契約情報 - 注文データ |
- デフォルト設定 - 検証ルール - 参照可能な設定値 |
2. 作成および使用の違い
項目 | カスタムオブジェクト | カスタムメタデータ |
---|---|---|
作成・変更方法 | SalesforceのUI、API、またはApex経由でレコードを作成・変更可能。 | メタデータのレコードはAPIやApexでは変更不可(変更セットやメタデータAPI経由で行う)。 |
移行方法 | - データローダー、データインポートウィザードなどでデータを移行 | - 変更セットまたはメタデータAPIを使用してレコードごと移行 |
Apexからの参照 | Apexクラスやトリガーで通常のSOQLクエリで参照可能。 |
getInstance() を利用して直接参照可能(SOQL不要)。 |
クエリ速度 | 通常のSOQLでクエリ。データ量が多い場合はパフォーマンスに影響。 | クエリ速度が速く、Apexコードで直接参照可能(キャッシュされているため)。 |
データ量の制限 | 大量のレコードデータを保存可能(ストレージ制限に依存)。 | 1組織あたりのメタデータレコード数に制限がある(10,000件)。 |
3. 特徴・機能の違い
項目 | カスタムオブジェクト | カスタムメタデータ |
---|---|---|
カスタム設定との違い | 主にデータを管理するために使用。設定の保存には向かない。 | カスタム設定と似ているが、より柔軟に設定やデプロイが可能。 |
デプロイ可能性 | オブジェクト自体はデプロイ可能だが、データは手動またはインポートが必要。 | レコード(設定データ)も含めて変更セットで移行可能。 |
バージョン管理 | 設定変更は容易だが、ソース管理ツールではデータを直接追跡できない。 | ソース管理ツールで追跡可能(メタデータXMLとして保存される)。 |
アクセス制限 | プロファイルや権限セットで制御可能。 | カスタムメタデータ自体にはアクセス権限の設定が不要。 |
主な利用例 | - 顧客データ - 注文情報 - 契約情報 |
- APIキーの保存 - デフォルト値の設定 - 設定ルールの管理 |
4. 主な利用ケース
カスタムオブジェクトを使うべき場合
- アプリケーションで動的に生成・変更されるデータを保存する必要がある場合。
- 大量のレコードを管理する必要がある場合(例: 顧客情報、注文履歴)。
- データをレポートやダッシュボードで分析したい場合。
カスタムメタデータを使うべき場合
- システムやアプリケーションの設定情報を管理したい場合(例: 検証ルール、デフォルト設定)。
- 設定を組織間で移行(デプロイ)する必要がある場合。
- データ量が少なく、アクセス速度が重視される場合。
5. 比較のまとめ
特徴 | カスタムオブジェクト | カスタムメタデータ |
---|---|---|
柔軟性 | 高い(データの追加・変更が可能)。 | 中程度(設定情報向けで変更は制限される)。 |
データ量の制限 | 多量のデータを扱える。 | 制限あり(10,000レコードまで)。 |
用途 | データ管理用 | 設定管理用 |
デプロイの容易さ | データの移行には追加の手間が必要。 | レコード含めて一括デプロイ可能。 |
キャッシュ速度 | 通常のクエリ速度。 | 高速(キャッシュされるため)。 |
結論
- データ管理が目的なら、カスタムオブジェクトを使用。
- システムや設定情報の管理が目的なら、カスタムメタデータを使用。
必要に応じて、両者を組み合わせて活用すると効率的です!
追加
以下にカスタムオブジェクト、カスタムメタデータ、カスタム設定の違いを分かりやすく表でまとめました。
カスタムオブジェクト vs カスタムメタデータ vs カスタム設定
特徴 | カスタムオブジェクト | カスタムメタデータ | カスタム設定 |
---|---|---|---|
主な用途 | データ管理用 | アプリケーションの設定情報を管理 | 設定値の保存、組織ごとやプロファイルごとの設定が可能 |
保存するデータ例 | 顧客情報、契約情報、注文履歴など | デフォルト設定、APIキー、検証ルール | 制限値、システム設定値、デフォルト値 |
レコードの移行 | データローダーやインポートウィザードを使用 | 変更セットやメタデータAPIで移行可能 | 一部移行可能(カスタム階層設定は不可) |
レコードの編集方法 | Salesforce UI、Apex、APIで編集可能 | Salesforce UIで直接編集不可 デプロイで更新 |
UI、Apex、APIで編集可能 |
Apexでの参照方法 | SOQLでクエリ実行 |
getInstance() で直接参照可能(SOQL不要) |
CustomSettingsName__c.getInstance() で参照可能 |
アクセス速度 | 通常(クエリの実行に依存) | 高速(キャッシュされているため) | 高速(キャッシュされているため) |
ストレージ容量 | 組織のデータストレージ容量に依存 | 制限あり(最大10,000レコード) | 制限あり(階層型:最大1,000項目、単純型:10MBまで) |
プロファイルや権限セットでの制御 | 権限セットやプロファイルで制御可能 | 制御不可(管理者がアクセス) | 権限セットやプロファイルで制御可能 |
キャッシュ | キャッシュされない | キャッシュされる | キャッシュされる |
データ構造の柔軟性 | 複数のカスタムフィールドを持てる | 設定情報の保存に特化し、柔軟性は低い | 設定情報の保存に特化し、柔軟性は低い |
適用例 | - 顧客情報、取引情報 - ダッシュボード用データ |
- APIキー管理 - デフォルト設定 - 検証ルール管理 |
- 制限値の保存 - 組織やプロファイルごとの設定情報保存 |
データの共有と移行 | データは手動またはデータローダーで移行が必要 | 設定レコードも含めてデプロイ可能 | データローダーを使って部分的に移行可能 |
それぞれの選択が適しているケース
カスタムオブジェクトを使用すべき場合
- データの保存・管理が必要な場合(例: 顧客情報、売上データ)。
- レポートやダッシュボードでデータを分析する必要がある場合。
カスタムメタデータを使用すべき場合
- アプリケーションやシステムの設定値を保存したい場合(例: APIキー、検証ルール)。
- 設定値を環境間でデプロイする必要がある場合。
カスタム設定を使用すべき場合
- 組織全体やユーザーグループごとに異なる設定値を保存したい場合(例: プロファイルごとの制限値)。
- 高速にアクセス可能な設定値が必要な場合。
簡単なまとめ
選択基準 | カスタムオブジェクト | カスタムメタデータ | カスタム設定 |
---|---|---|---|
動的なデータ管理 | 適している | 適していない | 適していない |
設定値の保存 | 適していない | 非常に適している | 適している |
デプロイの容易さ | 低い | 高い | 中程度 |
キャッシュ性能 | 通常 | 高い | 高い |