Feature Flag Tracking の設定
Feature Flag データは、ユーザーエクスペリエンスおよびパフォーマンスモニタリングへの可視性を向上させます。これにより、特定の機能がどのユーザーに表示されているかを判断し、導入された変更がユーザーエクスペリエンスに影響を与えているか、パフォーマンスに悪影響を及ぼしているかを評価できます。
Feature Flag データで RUM データを強化することで、バグやパフォーマンス回帰を意図せず引き起こすことなく、機能が正しくリリースされることができます。この追加のインサイトにより、機能リリースとパフォーマンスを相関させ、特定のリリースに問題を絞り込み、迅速にトラブルシューティングできます。
##RUM モニタリングの設定
Feature Flag Trackingは、RUM Browser、iOS、Android、Flutter、React Native SDK で利用可能です。
Browser SDK の Feature Flag データ収集を有効にするには、以下の手順に従います。
RUM Browser Monitoring を設定します。Browser RUM SDK バージョンは 4.25.0 以降である必要があります。
RUM SDK を初期化し、enableExperimentalFeatures 初期化パラメーターに["feature_flags"] を設定します。
npm
import { datadogRum } from '@datadog/browser-rum';
// Initialize Datadog Browser SDK
datadogRum.init({
...
enableExperimentalFeatures: ["feature_flags"],
...
});
CDN 非同期
window.DD_RUM.onReady(function() {
window.DD_RUM.init({
...
enableExperimentalFeatures: ["feature_flags"],
...
})
})
CDN 同期
window.DD_RUM &&
window.DD_RUM.init({
...
enableExperimentalFeatures: ["feature_flags"],
...
})
iOS アプリケーションで Feature Flag データの収集を有効にするには、以下の手順に従います。
- RUM iOS Monitoring を設定します。iOS RUM SDK バージョンは 1.16.0 以降である必要があります。
Android アプリケーションで Feature Flag データの収集を有効にするには、以下の手順に従います。
- RUM Android Monitoring を設定します。Android RUM SDK バージョンは 1.18.0 以降である必要があります。
Flutter アプリケーションで Feature Flag データの収集を有効にするには、以下の手順に従います。
- RUM Flutter Monitoring を設定します。Flutter プラグインのバージョンは 1.3.2 以降である必要があります。
React Native アプリケーションで Feature Flag データ収集を有効にするには、以下の手順に従います。
- RUM React Native Monitoring を設定します。React Native RUM SDK のバージョンは 1.7.0 以降である必要があります。
##Feature Flag インテグレーションの設定
カスタム Feature Flag 管理ソリューション を使用するか、以下に示す Datadog のインテグレーションパートナーのいずれかを使用して Feature Flag データの収集を開始できます。
注意: Feature Flag Tracking には次の特殊文字はサポートされていません: .、:、+、``、=、&&、||、>、<、!、(、)、{、}、[、]、^、"、“、”、~、*、?、\。Datadog は、可能な限りこれらの文字を Feature Flag 名に使用しないことを推奨します。これらの文字のいずれかを使用する必要がある場合は、データを Datadog に送信する前にその文字を置き換えてください。たとえば、以下のとおりです。
datadogRum.addFeatureFlagEvaluation(key.replaceAll(':', '_'), value);
Amplitude インテグレーション
この Feature Flag インテグレーションを初期化する前に、RUM Monitoring をセットアップしてください。
Amplitude の SDK を初期化し、次のコードスニペットを使用して Datadog に Feature Flag の評価を報告するエクスポージャリスナーを作成します。
Amplitude の SDK の初期化については、Amplitude の JavaScript SDK ドキュメント を参照してください。
const experiment = Experiment.initialize("CLIENT_DEPLOYMENT_KEY", {
exposureTrackingProvider: {
track(exposure: Exposure) {
// Send the feature flag when Amplitude reports the exposure
datadogRum.addFeatureFlagEvaluation(exposure.flag_key, exposure.variant);
}
}
})
Amplitude の SDK を初期化し、以下に示すコードスニペットを使用して、インスペクターで Feature Flag の評価を Datadog にレポートする機能を作成します。
Amplitude の SDK の初期化については、Amplitude の iOS SDK ドキュメント を参照してください。
class DatadogExposureTrackingProvider : ExposureTrackingProvider {
func track(exposure: Exposure) {
// Send the feature flag when Amplitude reports the exposure
if let variant = exposure.variant {
RUMMonitor.shared().addFeatureFlagEvaluation(name: exposure.flagKey, value: variant)
}
}
}
// In initialization:
ExperimentConfig config = ExperimentConfigBuilder()
.exposureTrackingProvider(DatadogExposureTrackingProvider(analytics))
.build()
Amplitude の SDK を初期化し、以下に示すコードスニペットを使用して、インスペクターで Feature Flag の評価を Datadog にレポートする機能を作成します。
Amplitude の SDK の初期化については、Amplitude の Android SDK ドキュメント を参照してください。
internal class DatadogExposureTrackingProvider : ExposureTrackingProvider {
override fun track(exposure: Exposure) {
// Send the feature flag when Amplitude reports the exposure
GlobalRumMonitor.get().addFeatureFlagEvaluation(
exposure.flagKey,
exposure.variant.orEmpty()
)
}
}
// In initialization:
val config = ExperimentConfig.Builder()
.exposureTrackingProvider(DatadogExposureTrackingProvider())
.build()
Amplitude はこのインテグレーションをサポートしていません。Amplitude にチケットを作成して、この機能をリクエストしてください。
###ConfigCat インテグレーション
この Feature Flag インテグレーションを初期化する前に、RUM Monitoring をセットアップしてください。
ConfigCat JavaScript SDK を初期化する際は、flagEvaluated イベントにサブスクライブし、Datadog に Feature Flag の評価を報告してください。
const configCatClient = configcat.getClient(
'#YOUR-SDK-KEY#',
configcat.PollingMode.AutoPoll,
{
setupHooks: (hooks) =>
hooks.on('flagEvaluated', (details) => {
datadogRum.addFeatureFlagEvaluation(details.key, details.value);
})
}
);
ConfigCat JavaScript SDK の初期化については、ConfigCat の JavaScript SDK ドキュメント を参照してください。
ConfigCat Swift iOS SDK を初期化する際は、flagEvaluated イベントにサブスクライブし、Datadog に Feature Flag の評価を報告してください。
let client = ConfigCatClient.get(sdkKey: "#YOUR-SDK-KEY#") { options in
options.hooks.addOnFlagEvaluated { details in
RUMMonitor.shared().addFeatureFlagEvaluation(featureFlag: details.key, variation: details.value)
}
}
ConfigCat Swift (iOS) SDK の初期化については、ConfigCat の Swift iOS SDK ドキュメント を参照してください。
ConfigCat Android SDK を初期化する際は、flagEvaluated イベントにサブスクライブし、Datadog に Feature Flag の評価を報告してください。
ConfigCatClient client = ConfigCatClient.get("#YOUR-SDK-KEY#", options -> {
options.hooks().addOnFlagEvaluated(details -> {
GlobalRumMonitor.get().addFeatureFlagEvaluation(details.key, details.value);
});
});
ConfigCat Android SDK の初期化については、ConfigCat の Android SDK ドキュメント を参照してください。
ConfigCat Dart SDK を初期化する際は、flagEvaluated イベントにサブスクライブし、Datadog に Feature Flag の評価を報告してください。
final client = ConfigCatClient.get(
sdkKey: '#YOUR-SDK-KEY#',
options: ConfigCatOptions(
pollingMode: PollingMode.autoPoll(),
hooks: Hooks(
onFlagEvaluated: (details) => {
DatadogSdk.instance.rum?.addFeatureFlagEvaluation(details.key, details.value);
}
)
)
);
ConfigCat Dart (Flutter) SDK の初期化については、ConfigCat の Dart SDK ドキュメント を参照してください。
ConfigCat React SDK を初期化する際は、flagEvaluated イベントに登録し、Feature Flag の評価を Datadog に報告してください。
<ConfigCatProvider
sdkKey="YOUR_SDK_KEY"
pollingMode={PollingMode.AutoPoll}
options={{
setupHooks: (hooks) =>
hooks.on('flagEvaluated', (details) => {
DdRum.addFeatureFlagEvaluation(details.key, details.value);
}),
}}
>
...
</ConfigCatProvider>
ConfigCat React SDK の初期化についての詳細は、ConfigCat の React SDK ドキュメント を参照してください。
###カスタム Feature Flag 管理
カスタム Feature Flag インテグレーションを初期化する前に、RUM Monitoring をセットアップしてください。
Feature Flag が評価されるたびに、以下の関数を追加して、Feature Flag の情報を RUM に送信します。
datadogRum.addFeatureFlagEvaluation(key, value);
Feature Flag が評価されるたびに、以下の関数を追加して、Feature Flag の情報を RUM に送信します。
RUMMonitor.shared().addFeatureFlagEvaluation(key, value);
Feature Flag が評価されるたびに、以下の関数を追加して、Feature Flag の情報を RUM に送信します。
GlobalRumMonitor.get().addFeatureFlagEvaluation(key, value);
Feature Flag が評価されるたびに、以下の関数を追加して、Feature Flag の情報を RUM に送信します。
DatadogSdk.instance.rum?.addFeatureFlagEvaluation(key, value);
Feature Flag が評価されるたびに、以下の関数を追加して、Feature Flag の情報を RUM に送信します。
DdRum.addFeatureFlagEvaluation(key, value);
DevCycle インテグレーション
この Feature Flag インテグレーションを初期化する前に、RUM Monitoring をセットアップしてください。
DevCycle の SDK を初期化し、variableEvaluated イベントに登録します。すべての変数評価 variableEvaluated:* に登録することも、特定の変数評価 variableEvaluated:myvariablekey に登録することもできます。
DevCycle の SDK の初期化についての詳細は、DevCycle の JavaScript SDK ドキュメント を参照し、DevCycle のイベントシステムについての詳細は、DevCycle の SDK イベントドキュメント を参照してください。
const user = { user_id: "<USER_ID>" };
const dvcOptions = { ... };
const dvcClient = initialize("<DVC_CLIENT_SDK_KEY>", user, dvcOptions);
...
dvcClient.subscribe(
"variableEvaluated:*",
(key, variable) => {
// track all variable evaluations
datadogRum.addFeatureFlagEvaluation(key, variable.value);
}
)
...
dvcClient.subscribe(
"variableEvaluated:my-variable-key",
(key, variable) => {
// track a particular variable evaluation
datadogRum.addFeatureFlagEvaluation(key, variable.value);
}
)
DevCycle はこのインテグレーションをサポートしていません。この機能をリクエストするために、DevCycle にチケットを作成してください。
DevCycle はこのインテグレーションをサポートしていません。この機能をリクエストするために、DevCycle にチケットを作成してください。
DevCycle はこのインテグレーションをサポートしていません。この機能をリクエストするために、DevCycle にチケットを作成してください。
DevCycle はこのインテグレーションをサポートしていません。この機能をリクエストするために、DevCycle にチケットを作成してください。
Eppo インテグレーション
この Feature Flag インテグレーションを初期化する前に、RUM Monitoring をセットアップしてください。
Eppo の SDK を初期化し、以下に示すコードスニペットを使用して、Feature Flag の評価を Datadog に報告する追加のアサインメントロガーを作成します。
Eppo の SDK の初期化についての詳細は、Eppo の JavaScript SDK ドキュメント を参照してください。
const assignmentLogger: IAssignmentLogger = {
logAssignment(assignment) {
datadogRum.addFeatureFlagEvaluation(assignment.featureFlag, assignment.variation);
},
};
await eppoInit({
apiKey: "<API_KEY>",
assignmentLogger,
});
Eppo の SDK を初期化し、以下に示すコードスニペットを使用して、Feature Flag の評価を Datadog に報告する追加のアサインメントロガーを作成します。
Eppo の SDK の初期化についての詳細は、Eppo の iOS SDK ドキュメント を参照してください。
func IAssignmentLogger(assignment: Assignment) {
RUMMonitor.shared().addFeatureFlagEvaluation(featureFlag: assignment.featureFlag, variation: assignment.variation)
}
let eppoClient = EppoClient(apiKey: "mock-api-key", assignmentLogger: IAssignmentLogger)
Eppo の SDK を初期化し、以下に示すコードスニペットを使用して、Feature Flag の評価を Datadog に報告する追加のアサインメントロガーを作成します。
Eppo の SDK の初期化についての詳細は、Eppo の Android SDK ドキュメント を参照してください。
AssignmentLogger logger = new AssignmentLogger() {
@Override
public void logAssignment(Assignment assignment) {
GlobalRumMonitor.get().addFeatureFlagEvaluation(assignment.getFeatureFlag(), assignment.getVariation());
}
};
EppoClient eppoClient = new EppoClient.Builder()
.apiKey("YOUR_API_KEY")
.assignmentLogger(logger)
.application(application)
.buildAndInit();
Eppo の SDK を初期化し、以下に示すコードスニペットを使用して、Feature Flag の評価を Datadog に報告する追加のアサインメントロガーを作成します。
Eppo の SDK の初期化については、Eppo の React Native SDK ドキュメント を参照してください。
const assignmentLogger: IAssignmentLogger = {
logAssignment(assignment) {
DdRum.addFeatureFlagEvaluation(assignment.featureFlag, assignment.variation);
},
};
await eppoInit({
apiKey: "<API_KEY>",
assignmentLogger,
});
###Flagsmith インテグレーション
この Feature Flag インテグレーションを初期化する前に、RUM Monitoring をセットアップしてください。
Flagsmith の SDK に datadogRum オプションを付けて初期化すると、以下に示すコードのスニペットを使用して Datadog に Feature Flag の評価を報告することができるようになります。
必要に応じて、Flagsmith の特性を datadogRum.setUser() を使って Datadog に送信するようにクライアントを構成できます。Flagsmith の SDK の初期化については、Flagsmith の JavaScript SDK ドキュメント をご確認ください。
// Initialize the Flagsmith SDK
flagsmith.init({
datadogRum: {
client: datadogRum,
trackTraits: true,
},
...
})
Flagsmith はこのインテグレーションをサポートしていません。Flagsmith にチケットを作成してこの機能をリクエストしてください。
Flagsmith はこのインテグレーションをサポートしていません。Flagsmith にチケットを作成してこの機能をリクエストしてください。
Flagsmith はこのインテグレーションをサポートしていません。Flagsmith にチケットを作成してこの機能をリクエストしてください。
Flagsmith は現在このインテグレーションをサポートしていません。Flagsmith にチケットを作成してこの機能をリクエストしてください。
###GrowthBook インテグレーション
GrowthBook SDK を初期化する際には、onFeatureUsage コールバックを使用して Datadog に Feature Flag の評価を報告します。
GrowthBook の SDK の初期化については、GrowthBook の JavaScript SDK ドキュメント を参照してください。
const gb = new GrowthBook({
...,
onFeatureUsage: (featureKey, result) => {
datadogRum.addFeatureFlagEvaluation(featureKey, result.value);
},
});
gb.init();
GrowthBook はこのインテグレーションをサポートしていません。この機能をリクエストするには、GrowthBook にお問い合わせください。
GrowthBook SDK を初期化する際は、setFeatureUsageCallback を呼び出して、Datadog に Feature Flag の評価を報告してください。
GrowthBook の SDK の初期化については、GrowthBook の Android SDK ドキュメント を参照してください。
val gbBuilder = GBSDKBuilder(...)
gbBuilder.setFeatureUsageCallback { featureKey, result ->
GlobalRumMonitor.get().addFeatureFlagEvaluation(featureKey, result.value);
}
val gb = gbBuilder.initialize()
GrowthBook SDK を初期化する際は、setFeatureUsageCallback を呼び出して、Datadog に Feature Flag の評価を報告してください。
GrowthBook の SDK の初期化については、GrowthBook の Flutter SDK ドキュメント を参照してください。
final gbBuilder = GBSDKBuilderApp(...);
gbBuilder.setFeatureUsageCallback((featureKey, result) {
DatadogSdk.instance.rum?.addFeatureFlagEvaluation(featureKey, result.value);
});
final gb = await gbBuilder.initialize();
GrowthBook SDK を初期化する際には、onFeatureUsage コールバックを使用して Datadog に Feature Flag の評価を報告します。
GrowthBook の SDK の初期化については、GrowthBook の React Native SDK ドキュメント を参照してください。
const gb = new GrowthBook({
...,
onFeatureUsage: (featureKey, result) => {
datadogRum.addFeatureFlagEvaluation(featureKey, result.value);
},
});
gb.init();
###Kameleoon インテグレーション
この Feature Flag インテグレーションを初期化する前に、RUM Monitoring をセットアップしてください。
Kameleoon SDK を作成して初期化した後、Evaluation イベントに onEvent ハンドラーを使用してサブスクライブしてください。
SDK に関する詳細は、Kameleoon JavaScript SDK ドキュメント を参照してください。
client.onEvent(EventType.Evaluation, ({ featureKey, variation }) => {
datadogRum.addFeatureFlagEvaluation(featureKey, variation.key);
});
Kameleoon はこのインテグレーションをサポートしていません。product@kameleoon.com に連絡して、この機能をリクエストしてください。
Kameleoon はこのインテグレーションをサポートしていません。product@kameleoon.com に連絡して、この機能をリクエストしてください。
Kameleoon はこのインテグレーションをサポートしていません。product@kameleoon.com に連絡して、この機能をリクエストしてください。
Kameleoon SDK を作成して初期化した後、Evaluation イベントに onEvent ハンドラーを使用してサブスクライブしてください。
Kameleoon React Native SDK ドキュメント に SDK の初期化の詳細が書かれています。
const { onEvent } = useInitialize();
onEvent(EventType.Evaluation, ({ featureKey, variation }) => {
datadogRum.addFeatureFlagEvaluation(featureKey, variation.key);
});
###LaunchDarkly インテグレーション
この Feature Flag インテグレーションを初期化する前に、RUM Monitoring をセットアップしてください。
LaunchDarkly の SDK を初期化し、以下に示すコードスニペットを使用して、Datadog に Feature Flag の評価を報告するインスペクターを作成します。
LaunchDarkly の SDK の初期化については、LaunchDarkly の JavaScript SDK ドキュメント を参照してください。
const client = LDClient.initialize("<CLIENT_SIDE_ID>", "<CONTEXT>", {
inspectors: [
{
type: "flag-used",
name: "dd-inspector",
method: (key: string, detail: LDClient.LDEvaluationDetail) => {
datadogRum.addFeatureFlagEvaluation(key, detail.value);
},
},
],
});
LaunchDarkly はこのインテグレーションをサポートしていません。LaunchDarkly にチケットを作成して、この機能をリクエストしてください。
LaunchDarkly はこのインテグレーションをサポートしていません。LaunchDarkly にチケットを作成して、この機能をリクエストしてください。
LaunchDarkly はこのインテグレーションをサポートしていません。LaunchDarkly にチケットを作成して、この機能をリクエストしてください。
LaunchDarkly は現在このインテグレーションをサポートしていません。LaunchDarkly にチケットを作成して、この機能をリクエストしてください。
###Split インテグレーション
この Feature Flag インテグレーションを初期化する前に、RUM Monitoring をセットアップしてください。
Split の SDK を初期化し、以下のコードスニペットを使用して、Feature Flag の評価を Datadog に報告するインプレッションリスナーを作成します。
Split の SDK の初期化については、Split の JavaScript SDK ドキュメント を参照してください。
const factory = SplitFactory({
core: {
authorizationKey: "<APP_KEY>",
key: "<USER_ID>",
},
impressionListener: {
logImpression(impressionData) {
datadogRum
.addFeatureFlagEvaluation(
impressionData.impression.feature,
impressionData.impression.treatment
);
},
},
});
const client = factory.client();
Split の SDK を初期化し、以下に示すコードスニペットを使用して、Datadog に Feature Flag の評価を報告するインスペクターを作成します。
Split の SDK の初期化については、Split の iOS SDK ドキュメント を参照してください。
let config = SplitClientConfig()
// Send the feature flag when Split reports the impression
config.impressionListener = { impression in
if let feature = impression.feature,
let treatment = impression.treatment {
RUMMonitor.shared().addFeatureFlagEvaluation(name: feature, value: treatment)
}
}
Split の SDK を初期化し、以下に示すコードスニペットを使用して、Datadog に Feature Flag の評価を報告するインスペクターを作成します。
Split の SDK の初期化については、Split の Android SDK ドキュメント を参照してください。
internal class DatadogSplitImpressionListener : ImpressionListener {
override fun log(impression: Impression) {
// Send the feature flag when Split reports the impression
GlobalRumMonitor.get().addFeatureFlagEvaluation(
impression.split(),
impression.treatment()
)
}
override fun close() {
}
}
// In initialization:
val apikey = BuildConfig.SPLIT_API_KEY
val config = SplitClientConfig.builder()
.impressionListener(DatadogSplitImpressionListener())
.build()
Split の SDK を初期化し、以下に示すコードスニペットを使用して、Datadog に Feature Flag の評価を報告するインスペクターを作成します。
Split の SDK の初期化については、Split の Flutter プラグインドキュメント を参照してください。
StreamSubscription<Impression> impressionsStream = _split.impressionsStream().listen((impression) {
// Send the feature flag when Split reports the impression
final split = impression.split;
final treatment = impression.treatment;
if (split != null && treatment != null) {
DatadogSdk.instance.rum?.addFeatureFlagEvaluation(split, treatment);
}
});
Split の SDK を初期化し、以下のコードスニペットを使用して、Feature Flag の評価を Datadog に報告するインプレッションリスナーを作成します。
Split の SDK の初期化については、Split の React Native SDK ドキュメント を参照してください。
const factory = SplitFactory({
core: {
authorizationKey: "<APP_KEY>",
key: "<USER_ID>",
},
impressionListener: {
logImpression(impressionData) {
DdRum
.addFeatureFlagEvaluation(
impressionData.impression.feature,
impressionData.impression.treatment
);
},
},
});
const client = factory.client();
###Statsig インテグレーション
この Feature Flag インテグレーションを初期化する前に、RUM Monitoring をセットアップしてください。
Statsig の SDK を statsig.initialize で初期化します。
ブラウザ RUM SDK バージョン 4.25.0 以降に更新します。
RUM SDK を初期化し、enableExperimentalFeatures 初期化パラメーターを ["feature_flags"] で構成します。
Statsig の SDK (v4.34.0 以降) を初期化し、以下のように gateEvaluationCallback オプションを実装します。
await statsig.initialize('client-<STATSIG CLIENT KEY>',
{userID: '<USER ID>'},
{
gateEvaluationCallback: (key, value) => {
datadogRum.addFeatureFlagEvaluation(key, value);
}
}
);
Statsig はこのインテグレーションをサポートしていません。support@statsig.com に連絡してこの機能をリクエストしてください。
Statsig はこのインテグレーションをサポートしていません。support@statsig.com に連絡してこの機能をリクエストしてください。
Statsig はこのインテグレーションをサポートしていません。support@statsig.com に連絡してこの機能をリクエストしてください。
Statsig は現在このインテグレーションをサポートしていません。support@statsig.com に連絡してこの機能をリクエストしてください。
###次のステップ
Feature Flag の 表示と分析。
##参考資料