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.

Experiment Ruby SDK

Amplitude ExperimentのサーバーサイドRuby SDK実装に関する公式ドキュメントです。

このドキュメントは、リモートローカルでの評価用に2つのセクションに分かれています。

リモート評価

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

インストール

Rubyバージョンの互換性

Ruby Server SDKはRuby 2.0以降で動作します。

Ruby Server SDKをbundlerまたはgemとともに直接インストールします。

gem 'amplitude-experiment'

クイックスタート

  1. 実験用クライアントを初期化する
  2. ユーザーのバリアントを取得
  3. フラグのバリアントにアクセスする
ruby
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パラメーターに渡すデプロイメントキー引数は、アナリティクスイベントの送信先となるプロジェクトと同じプロジェクト内に存在する必要があります。

ruby
initialize_remote(apiKey, config = nil) : Client

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

パフォーマンス要件に最適なタイムアウトと再試行のオプションを設定できます。

ruby
experiment = AmplitudeExperiment.initialize_remote('<DEPLOYMENT_KEY>', AmplitudeExperiment::RemoteEvaluationConfig.new)

設定

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

EUデータセンター

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

取得

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

ruby
fetch_v2(user: AmplitudeExperiment::User, fetch_options: AmplitudeExperiment::FetchOptions = nil) : Variants

FetchOptions

ruby
user = AmplitudeExperiment::User.new(
    user_id: 'user@company.com',
    device_id: 'abcdefg',
    user_properties: {
        'premium' => true
    }
)
variants = experiment.fetch_v2(user)

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

ruby
variant = variants['YOUR-FLAG-KEY']
unless variant.nil?
  if variant.value == 'on'
    # Flag is on
  else
    # Flag is off
  end
end

非同期で取得

フェッチメソッドは同期処理です。非同期的に取得するには、fetch_asyncメソッドを使用できます

ruby
fetch_async_v2(user: AmplitudeExperiment::User, fetch_options: AmplitudeExperiment::FetchOptions = nil, &callback)
ruby
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'

クイックスタート

  1. 実験用クライアントを初期化する
  2. ローカル評価クライアントを起動する
  3. ユーザーを評価する
ruby
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

初期化する

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

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

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

ruby
AmplitudeExperiment.initialize_local(api_key)

フラグポーリング間隔

flag_config_polling_interval_millis設定を使用して、フラグ設定を変更した後更新されるまでにかかる時間を決定します(デフォルトは30秒)。

設定

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

EUデータセンター

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

LocalEvaluationConfig

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つのパラメータを取ります:
        1. event:イベントインスタンス
        1. code:HTTPレスポンスコードの整数値
        1. message:文字列メッセージです。
    • デフォルト値nil
  • server_zone
    • 説明: プロジェクトのサーバーゾーンです。 サポート対象はおEUよび``USです。データレジデンシーがEU域内の場合はEU`に設定します。
    • デフォルト値US
  • server_url
    • 説明:実験がイベントを送信するAPIエンドポイントURLです。この値はserver_zoneuse_batchによって自動的に選択されます。このフィールドにnilではなく文字列値を設定した場合、SDKはserver_zoneuse_batchを無視し、その文字列値を使用します。
    • デフォルト値https://api2.amplitude.com/2/httpapi
  • use_batch
    • 説明バッチ API を使用するかどうか。 デフォルトでは、SDKはデフォルトのserverUrlを使用します。
    • デフォルト値False
  • 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つのパラメータを取ります:
        1. event:イベントインスタンス
        1. code:HTTPレスポンスコードの整数値
        1. message:文字列メッセージです。
    • デフォルト値nil
  • server_zone
    • 説明: プロジェクトのサーバーゾーンです。 サポート対象はおEUよび``USです。データレジデンシーがEU域内の場合はEU`に設定します。
    • デフォルト値US
  • server_url
    • 説明:実験がイベントを送信するAPIエンドポイントURLです。この値はserver_zoneuse_batchによって自動的に選択されます。このフィールドにnilではなく文字列値を設定した場合、SDKはserver_zoneuse_batchを無視し、その文字列値を使用します。
    • デフォルト値https://api2.amplitude.com/2/httpapi
  • use_batch
    • 説明バッチ API を使用するかどうか。 デフォルトでは、SDKはデフォルトのserverUrlを使用します。
    • デフォルト値False
  • storage_provider
    • 説明:ストレージバッファにイベントを保持するためのストレージインスタンスを作成するために使用されます。ストレージバッファ内のイベントは、送信されるまで待機中の状態です。
    • デフォルト値InMemoryStorageProvider
  • opt_out
    • 説明:オプトアウトオプションです。Trueに設定されている場合、クライアントはイベントの処理および送信を実行しません。
    • デフォルト値False

CohortSyncConfig

スタート

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

ruby
start

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

ruby
experiment.start

評価する

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

露出の追跡

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

ruby
evaluate_v2(user: AmplitudeExperiment::User, flag_keys: Array[String] = [], options: AmplitudeExperiment::EvaluateOptions = nil) : Hash[String, Variant]
ruby
# 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

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

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

ruby
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に渡します:

ruby
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)

デフォルトのロガーを使用したデバッグフラグ

ruby
# 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フラグは無視され、ロガーは設定されたレベルを維持します。

ruby
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と一致していることを確認するのに役立ちます。

ruby
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?