On this page

For AI agents: a documentation index is available at /docs/llms.txt. Append .md to any page URL for markdown, or send Accept: text/markdown.

Node.js SDK実験

npmv1.13.628.4 kB gzip

Amplitude体験のサーバー側Node.js SDK実装に関する公式ドキュメントです。

このドキュメントでは、リモート評価とローカル評価について別々のセクションで説明しています。

リモート評価

リモート評価を使用してユーザーのバリアントを取得する機能を実装しています。

インストール

ノードバージョンの互換性

Node Server SDKは、Node 10以降で動作します。

npm install --save @amplitude/experiment-node-server

クイックスタート

  1. 実験用クライアントを初期化する
  2. ユーザーのバリアントを取得
  3. フラグのバリアントにアクセスする
js
import { Experiment } from '@amplitude/experiment-node-server';
// (1) Initialize the experiment client
const experiment = Experiment.initializeRemote('<DEPLOYMENT_KEY>', {
    fetchTimeoutMillis: 500,
    fetchRetries: 1,
    fetchRetryBackoffMinMillis: 0,
    fetchRetryTimeoutMillis: 500,
});
// (2) Fetch variants for a user
const user = {
    user_id: 'user@company.com',
    device_id: 'abcdefg',
    user_properties: {
        'premium': true,
    },
};
const variants = experiment.fetchV2(user);
// (3) Access a flag's variant
const variant = variants['YOUR-FLAG-KEY'];
if (variant?.value === 'on') {
    // Flag is on
} else {
    // Flag is off
}

リモートの初期化

スタートアップ時にサーバーでSDKクライアントを初期化します。apiKeyパラメーターに渡すデプロイメントキー引数は、アナリティクスイベントの送信先となるプロジェクトと同じプロジェクト内に存在する必要があります。

js
initializeRemote(apiKey: string, config?: RemoteEvaluationConfig): RemoteEvaluationClient

タイムアウトと再試行の設定

デフォルトのタイムアウトと再試行の設定オプションは、ほとんどのサーバー環境では大きすぎます。パフォーマンス要件に最適なタイムアウトとリトライオプションを設定してください。リモート評価のパフォーマンスが低すぎる場合は、ローカル評価の使用を検討してください。

js
import { Experiment } from '@amplitude/experiment-node-server';
const experiment = Experiment.initializeRemote('<DEPLOYMENT_KEY>', config: {
    fetchTimeoutMillis: 500,
    fetchRetries: 1,
    fetchRetryBackoffMinMillis: 0,
    fetchRetryTimeoutMillis: 500,
});

設定

初期化時にSDKクライアントを設定します。

EUデータセンター

AmplitudeのEUデータセンターを使用する場合は、初期化時にserverZoneオプションを設定してください。

取得

ユーザーのバリアントを取得し、結果を返します。 この関数は、SDKクライアントの初期化に使用されたデプロイメントに関連付けられているフラグについて、ユーザーを リモートで評価します

js
fetchV2(user: ExperimentUser, fetchOptions?: FetchOptions): Promise<Variants>

FetchOptions

js
const user = {
    user_id: 'user@company.com',
    device_id: 'abcdefg',
    user_properties: {
        'premium': true,
    },
};
const variants = await experiment.fetchV2(user);

ユーザーのバリアントを取得した後、特定のフラグのバリアントにアクセスできます。

js
const variant = variants['YOUR-FLAG-KEY'];
if (variant?.value === 'on') {
    // Flag is on
} else {
    // Flag is off
}

ローカル評価

ローカル評価を使用して、ユーザーのバリアント評価を実装します。 ローカル評価を使用する予定がある場合は、そのトレードオフを理解してください

インストール

npmまたは yarnを使用して Node.js Server SDK をインストールします。

npm install --save @amplitude/experiment-node-server

クイックスタート

  1. ローカル評価クライアントを初期化します。
  2. ローカル評価クライアントを起動します。
  3. ユーザーを評価します。
js
import { Experiment } from '@amplitude/experiment-node-server';
// (1) Initialize the local evaluation client with a server deployment key.
const experiment = Experiment.initializeLocal('<DEPLOYMENT_KEY>', {
  // (Recommended) Enable local evaluation cohort targeting.
  cohortSyncConfig: {
    apiKey: '<API_KEY>',
    secretKey: '<SECRET_KEY>'
  }
});
// (2) Start the local evaluation client.
await experiment.start();
// (2) Evaluate a user.
const user = { device_id: 'abcdefg' };
const variants = experiment.evaluateV2(user);

ローカルを初期化する

ローカル評価クライアントを初期化します。

サーバーデプロイメントキー

ローカル評価フラグ設定にアクセスするには、サーバーデプロイメントキーを使用してローカル評価クライアントを初期化する必要があります。

js
initializeLocal(apiKey: string, config?: LocalEvaluationConfig): LocalEvaluationClient

streamUpdates設定を使用すると、flagConfigPollingIntervalMillisミリ秒ごとにポーリングするのではなく、フラグ設定の更新をSDKにプッシュできます(デフォルトはfalse)。保存後にSDKが更新を受信するまでの時間は、通常1秒未満です。ストリーミングに失敗した場合、SDKはポーリングにフォールバックします。フォールバック用にもflagConfigPollingIntervalMillis設定を行います。

設定

SDKクライアントは初期化時に設定できます。

EUデータセンター

AmplitudeのEUデータセンターを使用する場合は、初期化時にserverZoneオプションを設定してください。

LocalEvaluationConfig

AssignmentConfig

ExposureConfig

CohortSyncConfig

スタート

ローカル評価クライアントを起動し、評価用のローカル評価モードのフラグ設定を事前に取得し、設定された間隔でフラグ設定ポーラーを開始します。

js
start(): Promise<void>

evaluateV2()を呼び出す前に、start()の結果が得られるまで待機し、フラグ設定が使用できる状態であることを確認してください

js
await experiment.start();

評価する

start()で事前に取得されたフラグを使用して、評価ロジックを実行します。ユーザーオブジェクト引数にevaluateを指定する必要があります。フラグバリアントの特定のサブセットのみが必要な場合は、オプションでフラグキーの配列を渡すことができます。

露出の追跡

露出の追跡を有効にするためにexposureConfigを設定します。次に、evaluateV2()を呼び出す際に、EvaluateOptionsの内のtracksExposuretrueに設定します。

js
evaluateV2(user: ExperimentUser, flagKeys?: string[], options?: EvaluateOptions): Record<string, Variant>
js
// The user to evaluate
const user = { device_id: 'abcdefg' };
// Evaluate all flag variants
const allVariants = experiment.evaluateV2(user);
// Evaluate a specific subset of flag variants
const specificVariants = experiment.evaluateV2(user, [
  'my-local-flag-1',
  'my-local-flag-2',
]);

EvaluateOptions

ローカル評価コホートターゲティング

1.13.4バージョン以降、ローカル評価SDKクライアントは、ローカル評価ターゲット設定用のコホートのダウンロードをサポートしています。このサポートを有効にするには、初期化時にアナリティクスapiKeyおよびsecretKeycohortSyncConfigオプションを設定する必要があります。

js
const experiment = Experiment.initializeLocal('<DEPLOYMENT_KEY>', {
  // (Recommended) Enable local evaluation cohort targeting.
  cohortSyncConfig: {
    apiKey: '<API_KEY>',
    secretKey: '<SECRET_KEY>'
  }
});

サービスのメモリ不足を引き起こす可能性がある大量のコホートをダウンロードしないように maxCohortSizeを設定することを検討してください。 SDK は、大きすぎるコホートをダウンロードしません。

カスタムログ記録

logLevel設定を使用してログの冗長性を制御するか、独自のロガーを統合するためのLoggerProviderインターフェイスを実装してください。

ログレベル

  • Verbose: 詳細なデバッグログ
  • Debug:開発およびトラブルシューティング用ログ
  • Info:一般情報
  • Warn:警告
  • Error:エラー(デフォルト)
  • Disable:ログなし

カスタムロガー

独自のロギングソリューションを使用できるように、LoggerProviderインターフェースを実装します。

ts
import { Experiment, LogLevel, LoggerProvider } from '@amplitude/experiment-node-server';
class MyCustomLogger implements LoggerProvider {
  verbose(message, ...optionalParams) {
    // Implement verbose logging
  }
  debug(message, ...optionalParams) {
    // Implement debug logging
  }
  info(message, ...optionalParams) {
    // Implement info logging
  }
  warn(message, ...optionalParams) {
    // Implement warn logging
  }
  error(message, ...optionalParams) {
    // Implement error logging
  }
}
// Initialize with custom logger
const experiment = Experiment.initializeLocal(
  '<DEPLOYMENT_KEY>',
  {
    logLevel: LogLevel.Debug,
    loggerProvider: new MyCustomLogger()
  }
);

下位互換性

debug設定フィールドは引き続きサポートされています。trueに設定されている場合、logLevelDebugに上書きされます。

Amplitudeのクッキーへのアクセス

クライアント側でAmplitude Analytics SDKを使用する場合、Node.jsサーバーSDKから、Amplitudeの識別クッキーを解析および操作するための便利な関数を備えたAmplitudeCookieクラスが提供されます。このクラスは、次のことが必要な場合にサーバー側レンダリング (SSR) のユースケースに使用してください。

  • サーバーでレンダリングされたコードとクライアント側のコード間でデバイス ID の一貫性を維持します。
  • ページがレンダリングされる前に、ユーザーのAmplitude IDにアクセスします。
  • クッキーがまだ存在していない場合に、サーバー上にクッキーを生成して設定します。

このクラスは、クライアントがまだデバイス ID を生成していない場合でも、サーバ上のデバイス ID がクライアント上に設定されているデバイス ID と一致することを保証します。

js
import { AmplitudeCookie } from '@amplitude/experiment-node-server';
import { v4 as uuidv4 } from 'uuid';
// Get the cookie name for the Amplitude API key
// For Browser SDK 2.0 cookies, pass true as second parameter:
// const ampCookieName = AmplitudeCookie.cookieName('amplitude-api-key', true);
const ampCookieName = AmplitudeCookie.cookieName('amplitude-api-key');
let deviceId = null;
// Try to get device ID from existing cookie
if (req.cookies[ampCookieName]) {
  deviceId = AmplitudeCookie.parse(req.cookies[ampCookieName]).device_id;
  // For Browser SDK 2.0: AmplitudeCookie.parse(req.cookies[ampCookieName], true).device_id;
}
// If no device ID found, generate a new one and set the cookie
if (!deviceId) {
  deviceId = uuidv4();
  const ampCookieValue = AmplitudeCookie.generate(deviceId);
  // For Browser SDK 2.0: AmplitudeCookie.generate(deviceId, true);
  res.cookie(ampCookieName, ampCookieValue, {
    domain: '.your-domain.com', // this should be the same domain used by the Amplitude JS SDK
    httpOnly: false,
    secure: false
  });
}

Was this helpful?