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.
Experiment Ruby SDK
Amplitude ExperimentのサーバーサイドRuby SDK実装に関する公式ドキュメントです。
このドキュメントは、リモートとローカルでの評価用に2つのセクションに分かれています。
リモート評価
リモート評価を使用してユーザーのバリアントを取得する機能を実装しています。
インストール
Rubyバージョンの互換性
Ruby Server SDKはRuby 2.0以降で動作します。
Ruby Server SDKをbundlerまたはgemとともに直接インストールします。
gem 'amplitude-experiment'
クイックスタート
require 'amplitude-experiment'
# (1) Initialize the experiment client
experiment = AmplitudeExperiment.initialize_remote('<DEPLOYMENT_KEY>', AmplitudeExperiment::RemoteEvaluationConfig.new)
# (2) Fetch variants for a user
user = AmplitudeExperiment::User.new(
user_id: 'user@company.com',
device_id: 'abcdefg',
user_properties: {
'premium' => true
}
)
variants = experiment.fetch_v2(user)
# (3) Access a flag's variant
variant = variants['YOUR-FLAG-KEY']
unless variant.nil?
if variant.value == 'on'
# Flag is on
else
# Flag is off
end
end
初期化する
スタートアップ時にサーバーでSDKクライアントを初期化します。apiKeyパラメーターに渡すデプロイメントキー引数は、アナリティクスイベントの送信先となるプロジェクトと同じプロジェクト内に存在する必要があります。
initialize_remote(apiKey, config = nil) : Client
タイムアウトと再試行の設定
パフォーマンス要件に最適なタイムアウトと再試行のオプションを設定できます。
experiment = AmplitudeExperiment.initialize_remote('<DEPLOYMENT_KEY>', AmplitudeExperiment::RemoteEvaluationConfig.new)
設定
SDKクライアントは初期化時に設定できます。
EUデータセンター
AmplitudeのEUデータセンターを使用する場合は、初期化時にserver_zoneオプションを設定してください。
| 名前 | 概要 | デフォルト値 |
|---|---|---|
debug | trueの場合、ロガーレベルをDEBUGに設定します。 | false |
logger | SDK ロギング用のカスタム Logger インスタンス。 | ERRORレベル付きのデフォルトロガー |
server_zone | 使用するAmplitudeデータセンター。 ServerZone::USまたはServerZone::EU | ServerZone::US |
server_url | バリアントを取得するホスト。 | https://api.lab.amplitude.com |
fetch_timeout_millis | バリアントを取得するためのタイムアウト(ミリ秒単位)。このタイムアウトは最初のリクエストにのみ適用され、その後の再試行には適用されません。 | 10000 |
fetch_retries | バリアントを取得するリクエストが失敗した場合に試行するリトライ回数。 | 0 |
fetch_retry_backoff_min_millis | バリアント取得リクエストが失敗した後の最小(初期)バックオフです。 SDKは、この遅延をfetchRetryBackoffScalarでスケーリングします。 | 500 |
fetch_retry_backoff_max_millis | 再試行間の最大バックオフ値。スケール済みバックオフが最大値よりも大きくなった場合、SDK はその後のすべてのリクエストに対して最大値を使用します | 10000 |
fetch_retry_backoff_scalar | 最小バックオフを指数関数的にスケールします。 | 1.5 |
fetch_retry_timeout_millis | バリアント取得を再試行するためのリクエストタイムアウトです。 | 10000 |
取得
ユーザーのバリアントを取得し、結果を返します。 この関数は、SDKクライアントの初期化に使用されたデプロイメントに関連付けられているフラグについて、ユーザーを リモートで評価します。
fetch_v2(user: AmplitudeExperiment::User, fetch_options: AmplitudeExperiment::FetchOptions = nil) : Variants
FetchOptions
| 名前 | 概要 | デフォルト値 |
|---|---|---|
tracks_exposure | このフェッチ要求のエクスポージャーイベントを追跡するかどうかを指定します。nilの場合、サーバーのデフォルト動作を使用します(露出の追跡なし)。 | nil |
tracks_assignment | このフェッチ要求の割り当てイベントを追跡するかどうかを指定します。 nilの場合、サーバーのデフォルト動作を使用します(割り当ての追跡あり)。 | nil |
user = AmplitudeExperiment::User.new(
user_id: 'user@company.com',
device_id: 'abcdefg',
user_properties: {
'premium' => true
}
)
variants = experiment.fetch_v2(user)
ユーザーのバリアントを取得した後、特定のフラグのバリアントにアクセスできます。
variant = variants['YOUR-FLAG-KEY']
unless variant.nil?
if variant.value == 'on'
# Flag is on
else
# Flag is off
end
end
非同期で取得
フェッチメソッドは同期処理です。非同期的に取得するには、fetch_asyncメソッドを使用できます
fetch_async_v2(user: AmplitudeExperiment::User, fetch_options: AmplitudeExperiment::FetchOptions = nil, &callback)
experiment.fetch_async_v2(user) do |_, variants|
variant = variants['sdk-ci-test']
unless variant.nil?
if variant.value == 'on'
# Flag is on
else
# Flag is off
end
end
end
ローカル評価
ローカル評価を使用して、ユーザーのバリアント評価を実装します。 ローカル評価を使用する予定がある場合は、そのトレードオフを理解してください。
インストール
Ruby Server SDK のローカル評価版をインストールします。
オペレーティングシステムとアーキテクチャのサポート
ローカル評価パッケージは、次のOSとアーキテクチャをサポートしています(OS/ARCH)。
対応済み
- darwin/amd64
- darwin/arm64
- Linux/AMD64
- linux/arm64
ローカル評価パッケージは現時点では Alpine Linux をサポートしていません。
サポートされている別のOS/Archが必要な場合は、GitHubでイシューを報告するか、experiment@amplitude.comにメールしてください。
Ruby Server SDKをbundlerまたはgemとともに直接インストールします。
Rubyバージョンの互換性
Ruby Server SDKはRuby 2.0以降で動作します。
gem 'amplitude-experiment'
クイックスタート
require 'amplitude-experiment'
# (1) Initialize the local evaluation client with a server deployment key.
experiment = AmplitudeExperiment.initialize_local('DEPLOYMENT_KEY',
# (Recommended) Enable local evaluation cohort targeting.
AmplitudeExperiment::LocalEvaluationConfig.new(
cohort_sync_config: AmplitudeExperiment::CohortSyncConfig.new(
api_key: 'API_KEY',
secret_key: 'SECRET_KEY'
)
)
)
# (2) Start the local evaluation
experiment.start
# (3) Evaluate a user
user = AmplitudeExperiment::User.new(
user_id: 'user@company.com',
device_id: 'abcdefg',
user_properties: {
'premium' => true
}
)
variants = experiment.evaluate_v2(user)
variant = variants['YOUR-FLAG-KEY']
unless variant.nil?
if variant.value == 'on'
# Flag is on
else
# Flag is off
end
end
初期化する
ローカル評価クライアントを初期化します。
AmplitudeExperiment.initialize_local(api_key)
フラグポーリング間隔
flag_config_polling_interval_millisの設定を使用して、フラグ設定を変更した後更新されるまでにかかる時間を決定します(デフォルトは30秒)。
設定
SDKクライアントは初期化時に設定できます。
EUデータセンター
AmplitudeのEUデータセンターを使用する場合は、初期化時にserver_zoneオプションを設定してください。
LocalEvaluationConfig
| 名前 | 概要 | デフォルト値 |
|---|---|---|
server_zone | 使用するAmplitudeデータセンター。 ServerZone::USまたはServerZone::EU | ServerZone::US |
server_url | フラグ設定を取得するホスト。 | https://api.lab.amplitude.com |
bootstrap | フラグキーとフラグ設定のマップを使用して、クライアントをブートストラップする | {} |
flag_config_polling_interval_millis | startの呼び出し後に更新されたフラグ設定をポーリングする間隔 | 30000 |
debug | trueの場合、ロガーレベルをDEBUGに設定します。 | false |
logger | SDK ロギング用のカスタム Logger インスタンス。 | ERRORレベル付きのデフォルトロガー |
assignment_config | 廃止されました。 評価後に割り当てイベントを自動的に追跡するための設定。 | nil |
exposure_config | 評価後に曝露イベントを追跡するための設定。 | nil |
cohort_sync_config | ローカル評価コホートターゲティングのために、コホートのダウンロードを有効にする設定。 | nil |
AssignmentConfig
api_key- 説明:これはアナリティクスAPIキーであり、実験デプロイメントキーではありません
- デフォルト値:必須
cache_capacity- 説明: 割り当てキャッシュに保存される割り当ての最大数
- デフォルト値:
65536
flush_queue_size- 説明: イベントはバッファ内で待機しており、実験はそれらをバッチで送信します。 イベント数が
flush_queue_sizeに達するとバッファはフラッシュされます。 - デフォルト値:
200
- 説明: イベントはバッファ内で待機しており、実験はそれらをバッチで送信します。 イベント数が
flush_interval_millis- 説明: イベントはバッファ内で待機しており、実験はそれらをバッチで送信します。 バッファは
flush_interval_millisミリ秒ごとにフラッシュされます。 - デフォルト値:
10 seconds
- 説明: イベントはバッファ内で待機しており、実験はそれらをバッチで送信します。 バッファは
flush_max_retries- 説明: 要求がエラーを返した場合にクライアントがイベントを再試行する回数。
- デフォルト値:
12
logger- 説明: Amplitudeクライアントで使用されるロガーインスタンス。
- デフォルト値: デフォルトのRubyロガー
min_id_length- 説明:
user_idおよびdevice_idの最小長です。 - デフォルト値:
5
- 説明:
callback- 説明:
- クライアントレベルのコールバック機能。 3つのパラメータを取ります:
- event:イベントインスタンス
- code:HTTPレスポンスコードの整数値
- message:文字列メッセージです。
- デフォルト値:
nil
- 説明:
server_zone- 説明: プロジェクトのサーバーゾーンです。 サポート対象はお
EUよび``USです。データレジデンシーがEU域内の場合はEU`に設定します。 - デフォルト値:
US
- 説明: プロジェクトのサーバーゾーンです。 サポート対象はお
server_url- 説明:実験がイベントを送信するAPIエンドポイントURLです。この値は
server_zoneとuse_batchによって自動的に選択されます。このフィールドにnilではなく文字列値を設定した場合、SDKはserver_zoneとuse_batchを無視し、その文字列値を使用します。 - デフォルト値:
https://api2.amplitude.com/2/httpapi
- 説明:実験がイベントを送信するAPIエンドポイントURLです。この値は
use_batch- 説明:バッチ API を使用するかどうか。 デフォルトでは、SDKはデフォルトの
serverUrlを使用します。 - デフォルト値:
False
- 説明:バッチ API を使用するかどうか。 デフォルトでは、SDKはデフォルトの
storage_provider- 説明:ストレージバッファにイベントを保持するためのストレージインスタンスを作成するために使用されます。ストレージバッファ内のイベントは、送信されるまで待機中の状態です。
- デフォルト値:
InMemoryStorageProvider
opt_out- 説明:オプトアウトオプションです。
Trueに設定されている場合、クライアントはイベントの処理および送信を実行しません。 - デフォルト値:
False
- 説明:オプトアウトオプションです。
ExposureConfig
api_key- 説明:これはアナリティクスAPIキーであり、実験デプロイメントキーではありません
- デフォルト値:必須
cache_capacity- 説明:露出キャッシュに保存される露出の最大数
- デフォルト値:
65536
flush_queue_size- 説明: イベントはバッファ内で待機しており、実験はそれらをバッチで送信します。 イベント数が
flush_queue_sizeに達するとバッファはフラッシュされます。 - デフォルト値:
200
- 説明: イベントはバッファ内で待機しており、実験はそれらをバッチで送信します。 イベント数が
flush_interval_millis- 説明: イベントはバッファ内で待機しており、実験はそれらをバッチで送信します。 バッファは
flush_interval_millisミリ秒ごとにフラッシュされます。 - デフォルト値:
10 seconds
- 説明: イベントはバッファ内で待機しており、実験はそれらをバッチで送信します。 バッファは
flush_max_retries- 説明: 要求がエラーを返した場合にクライアントがイベントを再試行する回数。
- デフォルト値:
12
logger- 説明: Amplitudeクライアントで使用されるロガーインスタンス。
- デフォルト値: デフォルトのRubyロガー
min_id_length- 説明:
user_idおよびdevice_idの最小長です。 - デフォルト値:
5
- 説明:
callback- 説明:
- クライアントレベルのコールバック機能。 3つのパラメータを取ります:
- event:イベントインスタンス
- code:HTTPレスポンスコードの整数値
- message:文字列メッセージです。
- デフォルト値:
nil
- 説明:
server_zone- 説明: プロジェクトのサーバーゾーンです。 サポート対象はお
EUよび``USです。データレジデンシーがEU域内の場合はEU`に設定します。 - デフォルト値:
US
- 説明: プロジェクトのサーバーゾーンです。 サポート対象はお
server_url- 説明:実験がイベントを送信するAPIエンドポイントURLです。この値は
server_zoneとuse_batchによって自動的に選択されます。このフィールドにnilではなく文字列値を設定した場合、SDKはserver_zoneとuse_batchを無視し、その文字列値を使用します。 - デフォルト値:
https://api2.amplitude.com/2/httpapi
- 説明:実験がイベントを送信するAPIエンドポイントURLです。この値は
use_batch- 説明:バッチ API を使用するかどうか。 デフォルトでは、SDKはデフォルトの
serverUrlを使用します。 - デフォルト値:
False
- 説明:バッチ API を使用するかどうか。 デフォルトでは、SDKはデフォルトの
storage_provider- 説明:ストレージバッファにイベントを保持するためのストレージインスタンスを作成するために使用されます。ストレージバッファ内のイベントは、送信されるまで待機中の状態です。
- デフォルト値:
InMemoryStorageProvider
opt_out- 説明:オプトアウトオプションです。
Trueに設定されている場合、クライアントはイベントの処理および送信を実行しません。 - デフォルト値:
False
- 説明:オプトアウトオプションです。
CohortSyncConfig
| 名前 | 概要 | デフォルト値 |
|---|---|---|
api_key | 実験デプロイメントキーではなく、アナリティクスAPIキー | 必須 |
secret_key | アナリティクスの秘密鍵 | 必須 |
max_cohort_size | SDKがダウンロードするコホートの最大サイズです。SDK は、このサイズよりも大きいコホートをダウンロードしません。 | 2147483647 |
cohort_polling_interval_millis | コホート更新についてAmplitudeをポーリングするミリ秒単位での間隔(最小値は60,000)。 | 60000 |
cohort_server_url | コホートデータを取得するコホートサーバーのエンドポイント。 EUのデータセンターにアクセスするには、server_zoneをEUに設定します。この値を設定すると、デフォルト値がserver_zone上書きされます。 | https://cohort-v2.lab.amplitude.com |
スタート
ローカル評価クライアントを起動し、評価用のローカル評価モードのフラグ設定を事前に取得し、設定された間隔でフラグ設定ポーラーを開始します。
start
evaluate()を呼び出す前に、startの結果が得られるまで待機し、フラグ設定が使用できる状態であることを確認してください
experiment.start
評価する
startで事前に取得されたフラグを使用して評価ロジックを実行します。ユーザーオブジェクト引数にevaluateを指定する必要があります。フラグバリアントの特定のサブセットのみが必要な場合は、オプションでフラグキーの配列を渡すことができます。
露出の追跡
露出の追跡を有効にするためにexposure_configを設定します。次に、evaluate_v2()を呼び出す際に、EvaluateOptionsの内のtracks_exposureをtrueに設定します。
evaluate_v2(user: AmplitudeExperiment::User, flag_keys: Array[String] = [], options: AmplitudeExperiment::EvaluateOptions = nil) : Hash[String, Variant]
# The user to evaluate
user = AmplitudeExperiment::User.new(user_id: 'test-user')
# Evaluate all flag variants
all_variants = experiment.evaluate_v2(user)
# Evaluate a specific subset of flag variants
specific_variants = experiment.evaluate_v2(user, ["<FLAG_KEY_1>", "<FLAG_KEY_2>"])
# Access a variant
variant = all_variants["<FLAG_KEY>"]
if variant.value == 'on':
# Flag is on
else:
# Flag is off
end
EvaluateOptions
| 名前 | 概要 | デフォルト値 |
|---|---|---|
tracks_exposure | trueの場合、SDKは評価されたバリアントの露出イベントを追跡します。 | false |
ローカル評価コホートターゲティング
1.5.0バージョン以降、ローカル評価SDKクライアントは、ローカル評価ターゲット設定用のコホートのダウンロードをサポートしています。このサポートを有効にするには、初期化時にアナリティクスapi_keyおよびsecret_keyでcohort_sync_configオプションを設定する必要があります。
experiment = AmplitudeExperiment.initialize_local('DEPLOYMENT_KEY',
# (Recommended) Enable local evaluation cohort targeting.
AmplitudeExperiment::LocalEvaluationConfig.new(
cohort_sync_config: AmplitudeExperiment::CohortSyncConfig.new(
api_key: 'API_KEY',
secret_key: 'SECRET_KEY'
)
)
)
カスタムログ記録
ログの動作を制御するには、独自のロガーインスタンスを提供します。
カスタムロガー
カスタムLoggerインスタンスをRemoteEvaluationConfigまたはLocalEvaluationConfigに渡します:
require 'logger'
require 'amplitude-experiment'
# Create a custom logger
custom_logger = Logger.new('experiment.log')
custom_logger.level = Logger::WARN
custom_logger.formatter = proc do |severity, datetime, progname, msg|
"#{datetime}: #{severity} - #{msg}\n"
end
# Remote evaluation with custom logger
remote_config = AmplitudeExperiment::RemoteEvaluationConfig.new(
logger: custom_logger
)
experiment = AmplitudeExperiment.initialize_remote('DEPLOYMENT_KEY', remote_config)
# Provide Local evaluation with your Rails logger
local_config = AmplitudeExperiment::LocalEvaluationConfig.new(
logger: Rails.logger
)
experiment = AmplitudeExperiment.initialize_local('DEPLOYMENT_KEY', local_config)
デフォルトのロガーを使用したデバッグフラグ
# Without custom logger, debug=false uses ERROR level
config = AmplitudeExperiment::RemoteEvaluationConfig.new(
debug: false
)
# Default logger level is ERROR
# Without custom logger, debug=true uses DEBUG level
config = AmplitudeExperiment::RemoteEvaluationConfig.new(
debug: true
)
# Default logger level is DEBUG
カスタムロガーが提供されると、SDKによってdebugフラグは無視され、ロガーは設定されたレベルを維持します。
custom_logger = Logger.new($stdout)
custom_logger.level = Logger::WARN
# Custom logger maintains its WARN level regardless of debug flag
config = AmplitudeExperiment::RemoteEvaluationConfig.new(
logger: custom_logger,
debug: true
)
# Logger level stays WARN (debug flag is ignored)
Amplitudeのクッキーへのアクセス
クライアント側でAmplitude Analytics SDKを使用する場合、Ruby server SDKから、Amplitudeの識別クッキーを解析および操作するための便利な関数を備えたAmplitudeCookieクラスが提供されます。これは、特にクライアントがデバイスIDをまだ生成していない場合に、サーバー上のデバイスIDがクライアントに設定されているデバイスIDと一致していることを確認するのに役立ちます。
require 'amplitude-experiment'
require 'securerandom'
# Get the cookie name for the Amplitude API key
# Use new_format: true for Browser SDK 2.0 cookies
amp_cookie_name = AmplitudeExperiment::AmplitudeCookie.cookie_name('amplitude-api-key')
# For Browser SDK 2.0: AmplitudeExperiment::AmplitudeCookie.cookie_name('amplitude-api-key', new_format: true)
device_id = nil
# Try to get device ID from existing cookie
unless cookies[amp_cookie_name].nil?
device_id = AmplitudeExperiment::AmplitudeCookie.parse(cookies[amp_cookie_name]).device_id
# For Browser SDK 2.0: AmplitudeExperiment::AmplitudeCookie.parse(cookies[amp_cookie_name], new_format: true).device_id
end
# If no device ID found, generate a new one and set the cookie
if device_id.nil?
device_id = SecureRandom.uuid
amp_cookie_value = AmplitudeExperiment::AmplitudeCookie.generate(device_id)
# For Browser SDK 2.0: AmplitudeExperiment::AmplitudeCookie.generate(device_id, new_format: true)
cookies[amp_cookie_name] = {
value: amp_cookie_value,
domain: '.your-domain.com', # this should be the same domain used by the Amplitude JS SDK
httponly: false,
secure: false
}
end
Was this helpful?