Feature Flags の利用を開始する

This product is not supported for your selected Datadog site. ().

概要

Datadog Feature Flags は、組み込みのオブザーバビリティとプラットフォーム全体でのシームレスな統合により、機能のデリバリーを管理するための強力で統合された方法を提供します。

  • リアルタイムメトリクス: どのユーザーがどのバリアントを受け取っているか、またフラグがアプリケーションの健全性やパフォーマンスにどのような影響を与えているかを、すべてリアルタイムで把握できます。

  • 一般的なフラグタイプをサポート: ブール値、文字列、整数、数値 (浮動小数点数/倍精度浮動小数点数)、JSON バリアントを使用できます。JavaScript SDK は整数と数値の両方のバリアントに getNumberValue() を使用しますが、Java、Swift、Kotlin、Python では、整数と浮動小数点数の評価メソッドが個別に公開されています。

  • 実験に最適: A/B テストで特定のオーディエンスをターゲットにし、カナリアリリースで機能を段階的にロールアウトし、リグレッションが検出された場合には自動的にロールバックを行うことも可能です。

  • OpenFeature 互換: OpenFeature 標準に基づいて構築されており、既存の OpenFeature 実装との互換性を確保し、ベンダーニュートラルな Feature Flag 管理アプローチを実現します。

Feature Flags SDK

このガイドでは、例として JavaScript ブラウザ SDK を使用します。Datadog Feature Flags は、以下のいずれかの SDK を使用して任意のアプリケーションに統合できます。

クライアントサイド SDK

Android
Android TV
Angular
Dart and Flutter
iOS
JavaScript
React
React Native
tvOS
Unity

サーバーサイド SDK

.NET
Go
Java
Node.js
PHP
Python
Ruby

環境を設定する

組織には、開発、ステージング、本番環境用に事前設定された環境がすでに用意されていることでしょう。環境クエリ、本番環境のマーキング、および環境の管理に関する詳細については、「環境」を参照してください。

最初の Feature Flags を作成する

Feature Flags MCP Server を使用して、Feature Flags を自動的に設定できます。接続後、AI エージェントに「アプリで Datadog Feature Flags を設定するのを手伝って」と指示してください。MCP サーバーがコードベースをレビューし、使用している言語やフレームワークに必要な SDK およびコードスニペットをインストールします。

ステップ 1: SDK をインポートして初期化する

フラグが評価される環境に適した SDK を選択し、Datadog Feature Flags プロバイダーを初期化します。

プロジェクトの依存関係として、@datadog/openfeature-browser、@openfeature/web-sdk、および@openfeature/core をインストールします。

yarn add @datadog/openfeature-browser @openfeature/web-sdk @openfeature/core

次に、SDK を初期化するために、プロジェクトに以下を追加します。

Browser Feature Flags は、選択された Datadog サイト () ではサポートされていません。
import { DatadogProvider } from '@datadog/openfeature-browser';
import { OpenFeature } from '@openfeature/web-sdk';

// Initialize the provider
const provider = new DatadogProvider({
    // Required client-side Datadog credentials
    applicationId: '<APPLICATION_ID>',
    clientToken: '<CLIENT_TOKEN>',
    site: '<code class="js-region-param region-param" data-region-param="dd_site"></code>',
    env: '<YOUR_ENV>', // Same environment normally passed to the RUM SDK
    service: '<SERVICE_NAME>',
    version: '1.0.0'
});

// Set the provider
await OpenFeature.setProviderAndWait(provider);
ブラウザ SDK は 3 つの独立したテレメトリストリームを出力し、これらはすべてデフォルトで有効になっています。enableExposureLogging 評価ごとのエクスポージャーイベントをエクスポージャーインテークに送信します。enableFlagEvaluationTracking 集計された評価テレメトリをフラグ評価インテークに送信します。enableRumFeatureFlagTracking フラグ評価を RUM イベントに付加します。これは RUM の使用量に影響を与える可能性のある設定です。不要なストリームのみを無効にしてください。

dd-trace と OpenFeature サーバー SDK をインストールします。

npm install dd-trace @openfeature/server-sdk

環境変数を使用してプロバイダーを有効にします。

# Required: Enable the feature flags provider
DD_EXPERIMENTAL_FLAGGING_PROVIDER_ENABLED=true

# Optional: Enable flag evaluation metrics
DD_METRICS_OTEL_ENABLED=true

または、コード内でプロバイダーを有効にします。

import { OpenFeature } from '@openfeature/server-sdk'
import tracer from 'dd-trace';

tracer.init({
  experimental: {
    flaggingProvider: {
      enabled: true,
    }
  }
});

// Wait for the provider to initialize before evaluating flags.
await OpenFeature.setProviderAndWait(tracer.openfeature);

OpenFeature SDK と Datadog OpenFeature プロバイダーの依存関係を追加します。

build.gradle

dependencies {
    // OpenFeature SDK for flag evaluation
    implementation 'dev.openfeature:sdk:1.20.1'

    // Datadog OpenFeature Provider
    implementation 'com.datadoghq:dd-openfeature:1.63.0'
}

プロバイダーを有効にし、Java トレーサーを使用してアプリケーションを起動します。

# Required: Enable the feature flagging provider
# The EXPERIMENTAL_ prefix is historical; the provider is no longer experimental.
export DD_EXPERIMENTAL_FLAGGING_PROVIDER_ENABLED=true

java -javaagent:path/to/dd-java-agent.jar -jar your-application.jar

フラグ評価メトリクスを出力するには、OpenTelemetry SDK の依存関係を追加し、OTLP エンドポイントを設定します。「[サーバーサイドのフラグ評価メトリクスを設定する][9]」を参照してください。

Datadog OpenFeature プロバイダーを登録します。

import dev.openfeature.sdk.OpenFeatureAPI;
import dev.openfeature.sdk.Client;
import datadog.trace.api.openfeature.Provider;

OpenFeatureAPI api = OpenFeatureAPI.getInstance();
api.setProviderAndWait(new Provider());
Client client = api.getClient("my-app");

環境変数を使用してプロバイダーを有効にします。

# Required: Enable the feature flags provider
export DD_EXPERIMENTAL_FLAGGING_PROVIDER_ENABLED=true

# Optional: Enable flag evaluation metrics
export DD_METRICS_OTEL_ENABLED=true

Datadog Python SDK と OpenFeature SDK をインストールします。

pip install ddtrace openfeature-sdk

Datadog OpenFeature プロバイダーを登録します。

from ddtrace import tracer
from openfeature import api
from ddtrace.openfeature import DataDogProvider

# Initialize the tracer (required for Remote Configuration)
tracer.configure()

# Create and register the Datadog provider
provider = DataDogProvider()
api.set_provider(provider)

# Create an OpenFeature client
client = api.get_client()

認証情報の概要

認証情報使用者保存場所機密情報であるか
クライアントトークンブラウザ、モバイル、およびゲーム SDKクライアントアプリケーションの設定いいえ – 公開クライアントコードに含めても安全
アプリケーション IDブラウザおよび RUM 対応クライアント SDKクライアントアプリケーションの設定いいえ – 公開識別子
API キーサーバーサイド Remote Configuration 用の Datadog AgentAgent 設定のみはい – サーバーサイドのみに保持

API キーをブラウザ、モバイル、またはゲームアプリケーションに埋め込まないでください。

OpenFeature SDK の設定オプションに関する詳細は、そのドキュメントを参照してください。クライアントトークンおよびアプリケーション ID の作成に関する詳細は、「API キーとアプリケーションキー」を参照してください。

ステップ 2: Feature Flag を作成する

Datadog で Create Feature Flag に移動し、以下を設定します。

  • 名前とキー: フラグの表示名とコード内で参照されるキー
  • SDK 配信チャネル: フラグ設定を受け取る SDK を制御、「配信チャネル」を参照
  • バリアントタイプおよびバリアント値: 「バリアントとフラグタイプ」を参照
Flag keys、variant keys、および variant values は、クライアント SDK に送信される場合、公開されているものとみなす必要があります。
Feature Flag を作成する

ステップ 3: フラグを評価し、Feature Flag のコードを記述する

アプリケーションコード内で SDK を使用してフラグを評価し、新しい機能をゲート制御します。

Datadog Feature Flags では、評価コンテキスト属性として、文字列、数値、ブール値といったフラットなプリミティブ値を使用する必要があります。ネストされたオブジェクトや配列は渡さないでください。これらはサポートされておらず、エクスポージャーデータが破棄される原因となる可能性があります。
import { OpenFeature } from '@openfeature/web-sdk';

const client = OpenFeature.getClient();

// If applicable, set relevant attributes on the client's global context
// (e.g. org id, user email)
await OpenFeature.setContext({
    org_id: 2,
    user_id: 'user-123',
    email: 'user@example.com',
    targetingKey: 'user-123'
});

// This is what the SDK returns if the flag is disabled in
// the current environment
const fallback = false;

const showFeature = await client.getBooleanValue('show-new-feature', fallback);
if (showFeature) {
    // Feature code here
}
const evaluationContext = {
  targetingKey: req.session?.userID ?? 'unknown',
  companyID: req.session?.companyID
};

const isNewCheckoutEnabled = await client.getBooleanValue(
    'new-checkout-flow', // flag key
    false, // default value
    evaluationContext, // context
);

if (isNewCheckoutEnabled) {
    showNewCheckoutFlow();
} else {
    showLegacyCheckout();
}
import dev.openfeature.sdk.EvaluationContext;
import dev.openfeature.sdk.MutableContext;

EvaluationContext context = new MutableContext("user-123")
    .add("email", "user@example.com")
    .add("tier", "premium");

boolean enabled = client.getBooleanValue("checkout.new", false, context);

if (enabled) {
    // New checkout flow
} else {
    // Old checkout flow
}
from openfeature.evaluation_context import EvaluationContext

eval_ctx = EvaluationContext(
    targeting_key="user-123",
    attributes={
        "email": "user@example.com",
        "tier": "premium"
    }
)

enabled = client.get_boolean_value("new-checkout-flow", False, eval_ctx)

if enabled:
    show_new_checkout()
else:
    show_legacy_checkout()

このステップを完了したら、アプリケーションを再デプロイしてこれらの変更を反映させます。その他の使用例については、上記にリンクされているプラットフォーム固有の SDK ページを参照してください。

ステップ 4: ターゲティングルールを定義し、Feature Flag を有効にする

ターゲティングルールを設定して、どのサブジェクトが各バリアントを受け取るかを定義します。ルールを保存した後、選択した環境でフラグを有効にします。

一般的なベストプラクティスとして、本番環境の前にステージング環境で変更をロールアウトしてください。

パーセンテージベースのロールアウトについては、「トラフィックの分割とランダム化」を参照してください。

ステップ 5: ロールアウトを監視する

Feature Flags の詳細ページから機能のロールアウトを監視します。このページでは、リアルタイムのエクスポージャー追跡や、error rate や page load time などのメトリクスを確認できます。フラグを使用して段階的に機能をリリースする際、Datadog UI のReal-time metric overview パネルを表示して、その機能がアプリケーションのパフォーマンスに与える影響を確認してください。

リアルタイムフラグメトリクスパネル

サーバーサイドアプリケーションの場合、フラグ評価メトリクスを有効にして、各バリアントが返される頻度を追跡し、ダッシュボードでデータをグラフ化することもできます。「サーバーサイドのフラグ評価メトリクスを設定する」を参照してください。Feature Flags データを APM トレースに添付し、フラグのバリアントごとにトレースをフィルタリングする方法については、「Feature Flags のための APM トレースエンリッチメントの設定」を参照してください。

関連資料