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実験
Amplitude体験のサーバー側Node.js SDK実装に関する公式ドキュメントです。
このドキュメントでは、リモート評価とローカル評価について別々のセクションで説明しています。
リモート評価
リモート評価を使用してユーザーのバリアントを取得する機能を実装しています。
インストール
ノードバージョンの互換性
Node Server SDKは、Node 10以降で動作します。
npm install --save @amplitude/experiment-node-server
クイックスタート
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パラメーターに渡すデプロイメントキー引数は、アナリティクスイベントの送信先となるプロジェクトと同じプロジェクト内に存在する必要があります。
initializeRemote(apiKey: string, config?: RemoteEvaluationConfig): RemoteEvaluationClient
タイムアウトと再試行の設定
デフォルトのタイムアウトと再試行の設定オプションは、ほとんどのサーバー環境では大きすぎます。パフォーマンス要件に最適なタイムアウトとリトライオプションを設定してください。リモート評価のパフォーマンスが低すぎる場合は、ローカル評価の使用を検討してください。
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オプションを設定してください。
| 名前 | 概要 | デフォルト値 |
|---|---|---|
debug | 追加のデバッグロギングを有効にします。 | false |
logLevel | 出力する最小ログレベル。オプション:Verbose、Debug、Info、Warn、Error、Disable。カスタムログに移動します。 | Error |
loggerProvider | カスタムロガーの実装。使用しているログソリューションと統合するため、LoggerProviderインターフェースを実装します。カスタムログに移動します。 | ConsoleLogger |
serverZone | 使用するAmplitudeデータセンター。 "us"または"eu" | "us" |
serverUrl | バリアントを取得するホスト。 | https://api.lab.amplitude.com |
fetchTimeoutMillis | バリアントを取得するためのタイムアウト(ミリ秒単位)。このタイムアウトは最初のリクエストにのみ適用され、その後の再試行には適用されません。 | 10000 |
fetchRetries | バリアントを取得するリクエストが失敗した場合に試行するリトライ回数。 | 8 |
fetchRetryBackoffMinMillis | バリアント取得リクエストが失敗した後の最小(初期)バックオフです。 SDKは、この遅延をfetchRetryBackoffScalarでスケーリングします。 | 500 |
fetchRetryBackoffMaxMillis | 再試行間の最大バックオフ値。スケール済みバックオフが最大値よりも大きくなった場合、SDK はその後のすべてのリクエストに対して最大値を使用します | 10000 |
fetchRetryBackoffScalar | 最小バックオフを指数関数的にスケールします。 | 1.5 |
fetchRetryTimeoutMillis | バリアント取得を再試行するためのリクエストタイムアウトです。 | 10000 |
取得
ユーザーのバリアントを取得し、結果を返します。 この関数は、SDKクライアントの初期化に使用されたデプロイメントに関連付けられているフラグについて、ユーザーを リモートで評価します。
fetchV2(user: ExperimentUser, fetchOptions?: FetchOptions): Promise<Variants>
FetchOptions
| 名前 | 概要 | デフォルト値 |
|---|---|---|
flagKeys | 評価すべき特定のフラグまたは実験。 未定義、NULL、または空の場合、SDKはすべてのフラグと実験を評価します。 | undefined |
tracksExposure | このフェッチ要求のエクスポージャーイベントを追跡するかどうかを指定します。undefinedの場合、サーバーのデフォルト動作を使用します(露出の追跡なし)。 | undefined |
tracksAssignment | このフェッチ要求の割り当てイベントを追跡するかどうかを指定します。 undefinedの場合、サーバーのデフォルト動作を使用します(割り当ての追跡あり)。 | undefined |
const user = {
user_id: 'user@company.com',
device_id: 'abcdefg',
user_properties: {
'premium': true,
},
};
const variants = await experiment.fetchV2(user);
ユーザーのバリアントを取得した後、特定のフラグのバリアントにアクセスできます。
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
クイックスタート
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);
ローカルを初期化する
ローカル評価クライアントを初期化します。
initializeLocal(apiKey: string, config?: LocalEvaluationConfig): LocalEvaluationClient
streamUpdates設定を使用すると、flagConfigPollingIntervalMillisミリ秒ごとにポーリングするのではなく、フラグ設定の更新をSDKにプッシュできます(デフォルトはfalse)。保存後にSDKが更新を受信するまでの時間は、通常1秒未満です。ストリーミングに失敗した場合、SDKはポーリングにフォールバックします。フォールバック用にもflagConfigPollingIntervalMillisの設定を行います。
設定
SDKクライアントは初期化時に設定できます。
EUデータセンター
AmplitudeのEUデータセンターを使用する場合は、初期化時にserverZoneオプションを設定してください。
LocalEvaluationConfig
| 名前 | 概要 | デフォルト値 |
|---|---|---|
debug | trueに設定すると、デバッグログが有効になります。 | false |
logLevel | 出力する最小ログレベル。オプション:Verbose、Debug、Info、Warn、Error、Disable。カスタムログに移動します。 | Error |
loggerProvider | カスタムロガーの実装。使用しているログソリューションと統合するため、LoggerProviderインターフェースを実装します。カスタムログに移動します。 | ConsoleLogger |
serverZone | 使用するAmplitudeデータセンター。 "us"または"eu" | "us" |
serverUrl | フラグ設定を取得するホスト。 | https://api.lab.amplitude.com |
bootstrap | フラグキーとフラグ設定のマップを使用して、クライアントをブートストラップする | {} |
flagConfigPollingIntervalMillis | start()呼び出し後に更新されたフラグ設定をポーリングする間隔(ミリ秒単位) | 30000 |
assignmentConfig | 廃止されました。 評価後に割り当てイベントを自動的に追跡するための設定。 | null |
exposureConfig | 評価後に曝露イベントを追跡するための設定。 | null |
streamUpdates | ストリーミングを有効にすると、フラグ設定の更新を受信するためのポーリングに代わることができます。 Amplitudeサーバーは、毎秒ポーリングを行うのではなく、通常1秒以内にSDKにアップデートをプッシュします。何らかの理由でストリームが失敗した場合、SDKは自動的にポーリングへとフォールバックし、一定の間隔を置いてストリーミングを再試行します。 | false |
streamServerUrl | ストリーム送信元となるストリームサーバーのURL。 | https://stream.lab.amplitude.com |
streamFlagConnTimeoutMillis | 有効なフラグ設定ストリームを確立するためのタイムアウト値です。 これには、ストリームサーバへの接続が確立されるまでの時間と、初期フラグ設定を受信するまでの時間が含まれます。 | 1500 |
cohortSyncConfig | ローカル評価コホートターゲティングのために、コホートのダウンロードを有効にする設定。 | undefined |
AssignmentConfig
| 名前 | 概要 | デフォルト値 |
|---|---|---|
apiKey | 実験デプロイメントキーではなく、アナリティクスAPIキー | 必須 |
cacheCapacity | 割り当てキャッシュに保存される割り当ての最大数 | 65536 |
| アナリティクスSDKオプション | アサインメントイベントの追跡に使用される基盤となるAmplitude Analytics SDKを設定するためのオプション |
ExposureConfig
| 名前 | 概要 | デフォルト値 |
|---|---|---|
apiKey | 実験デプロイメントキーではなく、アナリティクスAPIキー | 必須 |
cacheCapacity | 露出キャッシュに保存される露出の最大数 | 65536 |
| アナリティクスSDKオプション | 露出イベントの追跡に使用される基盤となるAmplitude Analytics SDKを設定するためのオプション |
CohortSyncConfig
| 名前 | 概要 | デフォルト値 |
|---|---|---|
apiKey | 実験デプロイメントキーではなく、アナリティクスAPIキー | 必須 |
secretKey | アナリティクスの秘密鍵 | 必須 |
maxCohortSize | SDKがダウンロードするコホートの最大サイズです。SDK は、このサイズよりも大きいコホートをダウンロードしません。 | 2147483647 |
cohortPollingIntervalMillis | コホート更新についてAmplitudeをポーリングするミリ秒単位での間隔(最小値は60,000)。 | 60000 |
cohortServerUrl | コホートデータを取得するコホートサーバーのエンドポイント。 EUのデータセンターにアクセスするには、serverZoneをeuに設定します。この値を設定すると、デフォルト値がserverZone上書きされます。 | https://cohort-v2.lab.amplitude.com |
スタート
ローカル評価クライアントを起動し、評価用のローカル評価モードのフラグ設定を事前に取得し、設定された間隔でフラグ設定ポーラーを開始します。
start(): Promise<void>
evaluateV2()を呼び出す前に、start()の結果が得られるまで待機し、フラグ設定が使用できる状態であることを確認してください
await experiment.start();
評価する
start()で事前に取得されたフラグを使用して、評価ロジックを実行します。ユーザーオブジェクト引数にevaluateを指定する必要があります。フラグバリアントの特定のサブセットのみが必要な場合は、オプションでフラグキーの配列を渡すことができます。
露出の追跡
露出の追跡を有効にするためにexposureConfigを設定します。次に、evaluateV2()を呼び出す際に、EvaluateOptionsの内のtracksExposureをtrueに設定します。
evaluateV2(user: ExperimentUser, flagKeys?: string[], options?: EvaluateOptions): Record<string, Variant>
// 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
| 名前 | 概要 | デフォルト値 |
|---|---|---|
tracksExposure | trueの場合、SDKは評価されたバリアントの露出イベントを追跡します。 | false |
ローカル評価コホートターゲティング
1.13.4バージョン以降、ローカル評価SDKクライアントは、ローカル評価ターゲット設定用のコホートのダウンロードをサポートしています。このサポートを有効にするには、初期化時にアナリティクスapiKeyおよびsecretKeyでcohortSyncConfigオプションを設定する必要があります。
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インターフェースを実装します。
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に設定されている場合、logLevelはDebugに上書きされます。
Amplitudeのクッキーへのアクセス
クライアント側でAmplitude Analytics SDKを使用する場合、Node.jsサーバーSDKから、Amplitudeの識別クッキーを解析および操作するための便利な関数を備えたAmplitudeCookieクラスが提供されます。このクラスは、次のことが必要な場合にサーバー側レンダリング (SSR) のユースケースに使用してください。
- サーバーでレンダリングされたコードとクライアント側のコード間でデバイス ID の一貫性を維持します。
- ページがレンダリングされる前に、ユーザーのAmplitude IDにアクセスします。
- クッキーがまだ存在していない場合に、サーバー上にクッキーを生成して設定します。
このクラスは、クライアントがまだデバイス ID を生成していない場合でも、サーバ上のデバイス ID がクライアント上に設定されているデバイス ID と一致することを保証します。
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?