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 PHP SDK

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

インストール

PHPバージョンの互換性

PHP Server SDKはPHP 7.4以降で動作します。

composerを使用してPHP Server SDKをインストールします。

bash
composer require amplitude/experiment-php-server

リモート評価

SDKは、リモート評価をサポートしており、ユーザーのバリアントを取得するために使用します。

クイックスタート

  1. 実験用クライアントを初期化する
  2. ユーザーのバリアントを取得
  3. フラグのバリアントにアクセスする
php
<?php
// (1) Initialize the experiment client
$experiment = new \AmplitudeExperiment\Experiment();
$client = $experiment->initializeRemote('<DEPLOYMENT_KEY>');
// (2) Fetch variants for a user
$user = \AmplitudeExperiment\User::builder()
    ->deviceId('abcdefg')
    ->userId('user@company.com')
    ->userProperties(['premium' => true])
    ->build();
$variants = $client->fetch($user);
// (3) Access a flag's variant
$variant = $variants['FLAG_KEY'] ?? null;
if ($variant) {
    if ($variant->value == 'on') {
        // Flag is on
    } else {
        // Flag is off
    }
}

リモート評価の初期化

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

php
<?php
initializeRemote(string $apiKey, ?RemoteEvaluationConfig $config = null): RemoteEvaluationClient

設定

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

EUデータセンター

AmplitudeのEUデータセンターを使用する場合は、初期化時にserverUrlオプションをhttps://api.lab.eu.amplitude.comに設定してください。

取得

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

php
<?php
fetch(User $user, ?FetchOptions $fetchOptions = null): array<Variant>
// An array of variants is returned on success, an empty array is returned on failure

FetchOptions

php
<?php
$user = \AmplitudeExperiment\User::builder()
    ->deviceId('abcdefg')
    ->userId('user@company.com')
    ->userProperties(['premium' => true])
    ->build();
$variants = $client->fetch($user);

ユーザーのバリアントを取得した後、特定のフラグのバリアントにアクセスしたい場合があります。

php
<?php
$variant = $variants['FLAG-KEY'] ?? null;
if ($variant) {
    if ($variant->value == 'on') {
        // Flag is on
    } else {
        // Flag is off
    }
}

ローカル評価

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

クイックスタート

  1. ローカル評価クライアントを初期化します。
  2. ローカル評価クライアントのフラグ設定を取得します。
  3. ユーザーを評価します。
php
<?php
// (1) Initialize the experiment client
$experiment = new \AmplitudeExperiment\Experiment();
$client = $experiment->initializeLocal('<DEPLOYMENT_KEY>');
// (2) Fetch flags for the local evaluation client.
$client->refreshFlagConfigs();
// (3) Evaluate a user.
$user = \AmplitudeExperiment\User::builder()
    ->deviceId('abcdefg')
    ->userId('user@company.com')
    ->userProperties(['premium' => true])
    ->build();
$variants = $client->evaluate($user);

ローカル評価の初期化

ローカル評価を参照してください。

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

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

php
initializeLocal(string $apiKey, ?LocalEvaluationConfig $config = null): LocalEvaluationClient

設定

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

EUデータセンター

AmplitudeのEUデータセンターを使用している場合は、初期化時のserverUrlオプションをhttps://api.lab.eu.amplitude.comに設定してください

refreshFlagConfigs

評価用に、最新のローカル評価モードフラグ設定を取得します。

php
refreshFlagConfigs(): void

evaluate()を使用する前に、refreshFlagConfigs()を呼び出してフラグ設定が最新のものであることを確認してください。

php
<?php
$client->refreshFlagConfigs();

getFlagConfigs

クライアントで使用されているフラグ設定を返します。

php
getFlagConfigs(): array

返されたフラグ設定を使用して、ローカル評価クライアントをブートストラップすることで起動時間を短縮できます。

php
<?php
$client->getFlagConfigs();

評価する

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

露出の追跡

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

php
evaluate(User $user, array $flagKeys = [], ?EvaluateOptions $options = null): array
php
<?php
// The user to evaluate
$user = \AmplitudeExperiment\User::builder()
        ->deviceId('abcdefg')
        ->build();
// Evaluate all flag variants
$allVariants = $client->evaluate($user);
// Evaluate a specific subset of flag variants
$specificVariants = $client->evaluate($user, [
  'my-local-flag-1',
  'my-local-flag-2',
]);
// Access a flag's variant
$variant = $allVariants['FLAG_KEY'] ?? null;
if ($variant) {
    if ($variant->value == 'on') {
        // Flag is on
    } else {
        // Flag is off
    }
}

EvaluateOptions

割り当ての追跡

廃止されました。 代わりにエクスポージャートラッキングを使用してください。

アサインメントイベントをAmplitudeに送信するようにローカル評価クライアントを設定できます。

AssignmentTrackingProvider

ローカル評価クライアントは、Assignment Tracking Providerを使用して、割り当てイベントをAmplitudeに送信します。AmplitudeはデフォルトのAssignment Tracking Providerを提供しますが、これは同期的な性質のためテストに最適です。Amplitudeでは、柔軟性とパフォーマンスを向上させるためにカスタムプロバイダーを使用することをお勧めしています。

php
<?php
interface AssignmentTrackingProvider {
  public function track(Assignment $assignment): void;
}

ローカル評価クライアントは、追跡されていない割り当てイベントがあると判断した場合にtrack()を呼び出します。evaluate()から得られた割り当て結果を割り当てキャッシュと比較し、キャッシュに存在しない場合にはそれを追跡します。

DefaultAssignmentTrackingProvider

デフォルトの割り当て追跡プロバイダーは、このインターフェースをシンプルに実装したもので、内部Amplitudeパッケージを使用して同期HTTPリクエストを通じて割り当てイベントを送信します。

php
<?php
class DefaultAssignmentTrackingProvider implements AssignmentTrackingProvider {
  public function __construct(Amplitude $amplitude);
}

Amplitude

AmplitudeConfig

php
<?php
$config = \AmplitudeExperiment\Amplitude\AmplitudeConfig::builder()
          ->useBatch(true)
          ->minIdLength(10)
          ->build();
$amplitude = new \AmplitudeExperiment\Amplitude\Amplitude('<API_Key>', $config);
$defaultAssignmentTrackingProvider = new \AmplitudeExperiment\Assignment\DefaultAssignmentTrackingProvider($amplitude);

露出追跡

露出イベントをAmplitudeに送信するように、ローカル評価クライアントを設定できます。

ExposureTrackingProvider

ローカル評価クライアントは、露出追跡プロバイダーを使用して露出イベントを送信します。Amplitudeは、Amplitudeへのイベントを追跡するデフォルトのエクスポージャートラッキングプロバイダーを提供します。カスタムプロバイダーを実装して、他の宛先へのイベントを追跡したり、追跡動作をカスタマイズしたりできます。

php
<?php
interface ExposureTrackingProvider {
  public function track(Exposure $exposure): void;
}

ローカル評価クライアントは、追跡されていない露出イベントがあると判断した場合にtrack()を呼び出します。evaluate()から得られた露出と露出キャッシュを比較し、キャッシュ内に存在しない場合には追跡します。

DefaultExposureTrackingProvider

デフォルトの露出トラッキングプロバイダーは、ExposureTrackingProviderインターフェースの実装であり、同期HTTPリクエストを通じて、内部Amplitudeパッケージを使用して露出イベントをAmplitudeへと送信します。

php
<?php
class DefaultExposureTrackingProvider implements ExposureTrackingProvider {
  public function __construct(Amplitude $amplitude);
}

Amplitude

AmplitudeConfig

php
<?php
$config = \AmplitudeExperiment\Amplitude\AmplitudeConfig::builder()
          ->useBatch(true)
          ->minIdLength(10)
          ->build();
$amplitude = new \AmplitudeExperiment\Amplitude\Amplitude('<API_Key>', $config);
$defaultExposureTrackingProvider = new \AmplitudeExperiment\Exposure\DefaultExposureTrackingProvider($amplitude);

カスタムロガー

ローカルおよびリモートの評価クライアントが、PSRロガーインターフェイスを実装するカスタムロガーを使用するように設定します。 それ以外の場合は、SDKはデフォルトのerror_logベースのロガーを使用します。

ログレベル

SDK は次のログレベルを使用します。

カスタムHTTPクライアント

HTTPClientInterfaceを実装するカスタムHTTPクライアントを使用するように、ローカルおよびリモートの評価クライアントを設定します。それ以外の場合は、SDKはデフォルトのGuzzleベースのHTTPクライアントを使用します。

HTTPClientInterface

GuzzleHTTPClient

RemoteEvaluationConfigおよびLocalEvaluationConfigにあるguzzleClientConfigオプションを使用して、デフォルトのGuzzleクライアントを設定します。

php
<?php
// Configure the default Guzzle client
$config = \AmplitudeExperiment\RemoteEvaluationConfig::builder()
          ->guzzleClientConfig(['timeoutMillis' => 5000, 'retries' => 10])
          ->build();

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

クライアント側でAmplitude Analytics SDKを使用する場合、PHP server SDKから、Amplitudeの識別クッキーを解析および操作するための便利な関数を備えたAmplitudeCookieクラスが提供されます。このクラスは、特にクライアントがまだデバイスIDを生成していない場合に、サーバー上のデバイスIDがクライアント上に設定されているデバイスIDと確実に一致するようにします。

php
<?php
use AmplitudeExperiment\AmplitudeCookie;
// Get the cookie name for the Amplitude API key
// For Browser SDK 2.0 cookies, use true as second parameter:
// $amp_cookie_name = AmplitudeCookie::cookieName('amplitude-api-key', true);
$amp_cookie_name = AmplitudeCookie::cookieName('amplitude-api-key');
$device_id = null;
// Try to get device ID from existing cookie
if (isset($_COOKIE[$amp_cookie_name])) {
  $cookie_data = AmplitudeCookie::parse($_COOKIE[$amp_cookie_name]);
  // For Browser SDK 2.0: AmplitudeCookie::parse($_COOKIE[$amp_cookie_name], true);
  $device_id = $cookie_data['deviceId'];
}
// If no device ID found, generate a new one and set the cookie
if ($device_id === null) {
  $device_id = uniqid('', true);
  $amp_cookie_value = AmplitudeCookie::generate($device_id);
  // For Browser SDK 2.0: AmplitudeCookie::generate($device_id, true);
  setcookie($amp_cookie_name, $amp_cookie_value, [
    'domain' => '.your-domain.com', // this should be the same domain used by the Amplitude JS SDK
    'httponly' => false,
    'secure' => false
  ]);
}

Was this helpful?