カスタム設定 vs カスタムメタデータ型:Salesforceにおける設定データ管理の違い


Salesforceには、設定データを管理するための2つの異なるツールが提供されています:カスタム設定 (Custom Settings) とカスタムメタデータ型 (Custom Metadata Types) です。それぞれの特徴を理解し、どの状況でどちらを使用すべきかを判断するための比較を以下に示します。


1. データの永続性と移植性

  • カスタム設定:

    • カスタム設定は、組織ごとに格納される設定データです。データは、組織内で永続的に保存されますが、環境間でデータの移行を手動で行う必要があります(例:変更セット、データローダーなど)。
    • 移植性: 環境間での移動が必要な場合、データの移行を手動で行う必要があり、パッケージングに含めることができません。
  • カスタムメタデータ型:

    • カスタムメタデータ型は、パッケージングとデプロイが可能なメタデータ型です。これにより、組織間でデータを移行する際に変更セットやパッケージを使用できます。
    • 移植性: データと構造を一緒にパッケージとして含めることができ、パッケージをインストールすると、データが自動的に作成されます。これにより、ISV(Independent Software Vendor)にとって非常に便利です。

2. クエリ制限とパフォーマンス

  • カスタム設定:

    • カスタム設定はSOQLクエリにカウントされ、SOQL制限に影響を与えます。大量のカスタム設定データをクエリする場合、SOQL制限に達する可能性があるため、大量の設定データを頻繁にアクセスする場合は注意が必要です。
    • パフォーマンス: キャッシュされているため、クエリ結果は迅速に返されますが、SOQLクエリにカウントされる点を考慮する必要があります。
  • カスタムメタデータ型:

    • カスタムメタデータ型のデータはSOQL制限にカウントされません。したがって、設定データを繰り返しクエリするシナリオでパフォーマンスを向上させることができます。
    • パフォーマンス: レコードがメモリにキャッシュされ、クエリが高速であり、SOQL制限を気にせずにデータを頻繁に取得することが可能です。

3. データの可視性とアクセス権

  • カスタム設定:

    • カスタム設定には、階層設定(Hierarchy)機能があり、ユーザーのプロファイルやロールに基づいてデータのアクセスを制御できます。特定のユーザーやプロファイルに対して異なる設定を提供することができます。
    • アクセス権: ユーザーやプロファイルごとに異なるデータを提供したい場合に適しています。
  • カスタムメタデータ型:

    • カスタムメタデータ型は、設定データへのアクセス権が読み取り専用であり、通常はコードまたは管理者のみがアクセス可能です。
    • アクセス権: カスタムメタデータ型は、特にパッケージ化して配布する場合に有効で、ユーザーごとに異なる設定を持たせる用途には適していません。

4. フィールドの保護

  • カスタム設定:

    • カスタム設定のデータフィールドは、保護されていないため、開発者や管理者が直接変更できます。セキュリティ制約がある場合、保護フィールドの使用が必要です。
  • カスタムメタデータ型:

    • カスタムメタデータ型では、特定のフィールドを保護することができます。これにより、管理者以外のユーザーが設定データを変更することを防ぎ、パッケージ内での機密性を維持できます。

5. リレーションシップ

  • カスタム設定:

    • カスタム設定では、他のオブジェクトへの参照リレーションシップを作成できません。これは比較的単純なデータ構造で使用されます。
  • カスタムメタデータ型:

    • カスタムメタデータ型では、リレーションシップ(他のオブジェクトやカスタムメタデータ型への参照)を作成できます。これにより、より複雑なデータ構造を作成することができます。

6. 使用例

  • カスタム設定:

    • 階層的な設定(例えば、組織ごとに異なる設定を管理したい場合)
    • ユーザー設定(例えば、ユーザーに基づいて異なる通知設定を保存する場合)
  • カスタムメタデータ型:

    • アプリケーション設定(例えば、特定の地域に基づいた設定や機能のオン/オフ設定)
    • パッケージ設定(例えば、ISVが提供するアプリケーションでの設定)

まとめ

特徴 カスタム設定 (Custom Settings) カスタムメタデータ型 (Custom Metadata Types)
移植性 手動で移行(データローダー、変更セット) パッケージングおよびデプロイが可能
SOQLクエリ制限 SOQLクエリにカウントされる SOQLクエリにカウントされない
パフォーマンス クエリ結果はキャッシュされるがSOQL制限がある メモリにキャッシュされてクエリ制限がない
アクセス制御 ユーザーやプロファイルに基づいた階層的設定 誰でもアクセス可能だが、変更は管理者のみ
フィールドの保護 保護フィールドがない 保護フィールドを設定可能
リレーションシップ 他のオブジェクトへのリレーションがない 他のオブジェクトやメタデータ型への参照が可能

コメント