メインコンテンツへスキップ
実験が有効な場合、Experiment Center はサポート対象の Action トリガーに ExperimentContext オブジェクトを注入します。
Beta 期間中、Experiment Center は開発テナントでのみ実行されます。本番テナントはサポート対象外です。

サポート対象のトリガー

実験コンテキストは、次の Auth0 Actions のトリガーで使用できます。

event.experiment オブジェクト

サポート対象のトリガーでは、Experiment Center により、イベントオブジェクトに experiment フィールドが追加されます:
interface ExperimentContext {
  experiment_id: string;   // アクティブな実験ID
  variation_id: string;    // 割り当てられたバリエーションID
  config: {                // マージされた設定: ベースライン + オーバーライド
    [paramName: string]: { value: unknown };
  };
  is_control: boolean;     // コントロールバリエーションの場合はtrue
}
有効な実験がない場合 (またはその機能がテナントで有効になっていない場合) 、event.experimentnull になります (undefined ではありません) 。

config オブジェクトには、完全にマージされた設定が含まれます

config オブジェクトには、機能フラグで定義されたすべてのパラメーターが含まれており、割り当てられたバリエーションの上書き設定がマージされています。ベースライン値を参照したり、フォールバックロジックを実装したりする必要はありません。機能フラグに存在するパラメーターは、config にも必ず存在します。

null安全パターン

プロパティを読み取る前に、有効な実験があることを確認します。
exports.onExecutePostLogin = async (event, api) => {
  const ec = event.experiment;
  if (!ec) return; // アクティブな実験なし。処理不要

  // ここで ec.config、ec.variation_id、ec.is_control に安全にアクセス可能
};
このパターンは、サポート対象の3つのトリガーすべてで使用してください。早期リターンを使うことで、Action を簡潔に保ちつつ、実験を実施していない期間でも正しく動作させられます。

例: post_login — 条件付きMFAポリシー

この例では、真偽値のパラメーターを読み取り、その値に応じて異なるMFAポリシーを適用します。
// post_login Action
exports.onExecutePostLogin = async (event, api) => {
  const ec = event.experiment;
  if (!ec) return;

  const enforceMfa = ec.config?.require_mfa?.value;

  if (enforceMfa === true) {
    // トリートメントバリエーション: このユーザーにMFAを強制する
    api.multifactor.enable("any", { allowRememberBrowser: false });
  }
  // コントロールバリエーション: MFA強制の変更なし(ベースラインの動作)
};
ec.config.require_mfa.value は、トリートメントバリエーションのユーザーでは true、コントロールバリエーションのユーザーでは false (ベースライン) になります。フォールバックロジックは不要です。

例: post_login — バリエーションに基づいてカスタムクレームを設定する

この例では、実験の割り当て情報をカスタムクレームとしてユーザーのIDトークンに埋め込みます。分析パイプラインによっては、テナントログではなくトークン内のクレームを読み取ります。
// post_login Action
exports.onExecutePostLogin = async (event, api) => {
  const ec = event.experiment;
  if (!ec) return;

  // IDトークンに実験の割り当てを追加する
  api.idToken.setCustomClaim("https://example.com/experiment", {
    experiment_id: ec.experiment_id,
    variation_id: ec.variation_id,
  });
};
OIDC のカスタムクレーム規約に従って、名前空間付きクレームの URL を使用します。これにより、受け取り側 (アプリケーション) はテナントログを照会しなくても、トークンからそのクレームを読み取れます。

例: pre_user_registration — バリエーション別のメタデータ

この例では、登録フローの実験を使用して、登録中のユーザーがどのバリエーションに割り当てられたかに応じて user_metadata を設定します。
// pre_user_registration Action
exports.onExecutePreUserRegistration = async (event, api) => {
  const ec = event.experiment;
  if (!ec) return;

  const onboardingVariant = ec.config?.onboarding_variant?.value;

  if (onboardingVariant) {
    api.user.setUserMetadata("onboarding_variant", onboardingVariant);
    api.user.setUserMetadata("onboarding_experiment_id", ec.experiment_id);
  }
};
メタデータは登録時に書き込まれるため、セッションをまたいでもユーザーに紐づいて保持されます。後からこれを照会して、ユーザーがどの登録グループに属しているかを把握できます。

例: post_user_registration — 下流側の登録をトリガーする

この例では、新しいユーザーに割り当てられたバリエーションに応じて、登録後に webhook を送信します。
// post_user_registration Action
exports.onExecutePostUserRegistration = async (event, api) => {
  const ec = event.experiment;
  if (!ec) return;

  const enrollInNewProgram = ec.config?.enroll_welcome_program?.value;

  if (enrollInNewProgram === true) {
    await fetch("https://your-backend.example.com/api/enrollment", {
      method: "POST",
      headers: { "Content-Type": "application/json" },
      body: JSON.stringify({
        user_id: event.user.user_id,
        email: event.user.email,
        experiment_id: ec.experiment_id,
        variation_id: ec.variation_id,
      }),
    });
  }
};
トリートメントバリエーションのユーザーのみが登録 Webhook をトリガーします。コントロールのユーザーは標準の登録後フローに従います。

is_control を使用する

パラメーター is_control は、ユーザーがコントロールグループに属している場合に true になります (ベースラインが適用され、オーバーライドは適用されません) 。変更されていないエクスペリエンスをどのユーザーが見たかを追跡する必要がある場合や、コントロールユーザーに対する任意の処理をスキップしたい場合に使用します。
exports.onExecutePostLogin = async (event, api) => {
  const ec = event.experiment;
  if (!ec) return;

  if (!ec.is_control) {
    // 分析システムではトリートメントユーザーのみを追跡する
    // (コントロールユーザーはActionの外部で個別に追跡される)
    await logTreatmentEvent(ec.experiment_id, ec.variation_id, event.user.user_id);
  }
};
挙動で分岐する場合 (分析用途ではない場合) は、config パラメーターの値を直接確認してください。その方が、より明確で読みやすくなります。