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をインストールします。
composer require amplitude/experiment-php-server
リモート評価
SDKは、リモート評価をサポートしており、ユーザーのバリアントを取得するために使用します。
クイックスタート
<?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
initializeRemote(string $apiKey, ?RemoteEvaluationConfig $config = null): RemoteEvaluationClient
設定
SDKクライアントは初期化時に設定できます。
| 名前 | 概要 | デフォルト値 |
|---|---|---|
serverUrl | バリアントを取得するホスト。 | https://api.lab.amplitude.com |
logger | カスタムロガーを使用するように設定します。 設定されていない場合、SDKはデフォルトのロガーを使用します。 | null |
logLevel | ロガーに使用するログレベル。 | LogLevel::ERROR |
httpClient | リクエストに使用する、基盤となるHTTPクライアント。設定されていない場合、SDKはデフォルトのHTTPクライアントを使用します。 | null |
guzzleClientConfig | 基礎となるデフォルトGuzzleHTTPClientの設定(使用されている場合)。 | デフォルト値 |
EUデータセンター
AmplitudeのEUデータセンターを使用する場合は、初期化時にserverUrlオプションをhttps://api.lab.eu.amplitude.comに設定してください。
取得
ユーザーのバリアントを取得し、結果を返します。 この関数は、SDKクライアントの初期化に使用されたデプロイメントに関連付けられているフラグについて、ユーザーを リモートで評価します。
<?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
| 名前 | 概要 | デフォルト値 |
|---|---|---|
flagKeys | 評価すべき特定のフラグまたは実験。 空の場合、Amplitudeはすべてのフラグと実験を評価します。 | [] |
tracksExposure | このフェッチリクエストの露出イベントを追跡するか、追跡しないかを指定します。nullの場合、サーバーのデフォルト動作を使用します(露出の追跡なし)。 | null |
tracksAssignment | このフェッチ要求の割り当てイベントを追跡するか追跡しないかを指定します。 nullの場合、サーバーのデフォルト動作を使用します(割り当ての追跡あり)。 | null |
<?php
$user = \AmplitudeExperiment\User::builder()
->deviceId('abcdefg')
->userId('user@company.com')
->userProperties(['premium' => true])
->build();
$variants = $client->fetch($user);
ユーザーのバリアントを取得した後、特定のフラグのバリアントにアクセスしたい場合があります。
<?php
$variant = $variants['FLAG-KEY'] ?? null;
if ($variant) {
if ($variant->value == 'on') {
// Flag is on
} else {
// Flag is off
}
}
ローカル評価
ローカル評価を通じてユーザーのバリアント評価を実装します。 ローカル評価を使用する予定がある場合は、そのトレードオフを理解しておく必要があります。
クイックスタート
<?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);
ローカル評価の初期化
ローカル評価を参照してください。
initializeLocal(string $apiKey, ?LocalEvaluationConfig $config = null): LocalEvaluationClient
設定
SDKクライアントは初期化時に設定できます。
| 名前 | 概要 | デフォルト値 |
|---|---|---|
serverUrl | フラグ設定を取得するホスト。 | https://api.lab.amplitude.com |
logger | カスタムロガーを使用するように設定します。 設定されていない場合、SDKはデフォルトのロガーを使用します。 | null |
logLevel | ロガーに使用するログレベル。 | LogLevel::ERROR |
httpClient | リクエストに使用する、基盤となるHTTPクライアント。設定されていない場合、SDKはデフォルトのHTTPクライアントを使用します。 | null |
guzzleClientConfig | 基礎となるデフォルトGuzzleHTTPClientの設定(使用されている場合)。 | デフォルト値 |
bootstrap | フラグキーとフラグ設定のペア配列を使用して、クライアントをブートストラップします | [] |
assignmentConfig | 廃止されました。 評価後に割り当てイベントを自動的に追跡するための設定。 | null |
exposureConfig | 評価後に曝露イベントを追跡するための設定。 | null |
EUデータセンター
AmplitudeのEUデータセンターを使用している場合は、初期化時のserverUrlオプションをhttps://api.lab.eu.amplitude.comに設定してください
refreshFlagConfigs
評価用に、最新のローカル評価モードフラグ設定を取得します。
refreshFlagConfigs(): void
evaluate()を使用する前に、refreshFlagConfigs()を呼び出してフラグ設定が最新のものであることを確認してください。
<?php
$client->refreshFlagConfigs();
getFlagConfigs
クライアントで使用されているフラグ設定を返します。
getFlagConfigs(): array
返されたフラグ設定を使用して、ローカル評価クライアントをブートストラップすることで起動時間を短縮できます。
<?php
$client->getFlagConfigs();
評価する
refreshFlagConfigs()で取得したフラグを使用して、評価ロジックを実行します。evaluate()にはユーザーオブジェクト引数を渡します。必要なフラグバリアントの特定のサブセットのみが必要な場合は、オプションでフラグキーの配列を渡します。
露出の追跡
露出の追跡を有効にするためにexposureConfigを設定します。次に、evaluate()を呼び出す際に、EvaluateOptionsの内のtracksExposureをtrueに設定します。
evaluate(User $user, array $flagKeys = [], ?EvaluateOptions $options = null): array
<?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
| 名前 | 概要 | デフォルト値 |
|---|---|---|
tracksExposure | trueの場合、SDKは評価されたバリアントの露出イベントを追跡します。 | false |
割り当ての追跡
廃止されました。 代わりにエクスポージャートラッキングを使用してください。
アサインメントイベントをAmplitudeに送信するようにローカル評価クライアントを設定できます。
| 名前 | 概要 | デフォルト値 |
|---|---|---|
assignmentTrackingProvider | アサインメントイベントの送信に使用される AssignmentTrackingProvider。 | 必須 |
cacheCapacity | アサインメントキャッシュに保存されるアサインメントの最大数。 | 65536 |
apiKey | アナリティクスAPIキー。実験デプロイメントキーと混同しないでください。 | 必須 |
minIdLength | userIdおよびdeviceIdの最小長です。 | 5 |
AssignmentTrackingProvider
ローカル評価クライアントは、Assignment Tracking Providerを使用して、割り当てイベントをAmplitudeに送信します。AmplitudeはデフォルトのAssignment Tracking Providerを提供しますが、これは同期的な性質のためテストに最適です。Amplitudeでは、柔軟性とパフォーマンスを向上させるためにカスタムプロバイダーを使用することをお勧めしています。
<?php
interface AssignmentTrackingProvider {
public function track(Assignment $assignment): void;
}
ローカル評価クライアントは、追跡されていない割り当てイベントがあると判断した場合にtrack()を呼び出します。evaluate()から得られた割り当て結果を割り当てキャッシュと比較し、キャッシュに存在しない場合にはそれを追跡します。
| パラメータ | 要件 | 概要 |
|---|---|---|
assignment | 必須 | 実験の割り当てイベントを表すオブジェクト |
DefaultAssignmentTrackingProvider
デフォルトの割り当て追跡プロバイダーは、このインターフェースをシンプルに実装したもので、内部Amplitudeパッケージを使用して同期HTTPリクエストを通じて割り当てイベントを送信します。
<?php
class DefaultAssignmentTrackingProvider implements AssignmentTrackingProvider {
public function __construct(Amplitude $amplitude);
}
Amplitude
| 名前 | 概要 | デフォルト値 |
|---|---|---|
apiKey | アナリティクスAPIキー。実験デプロイメントキーと混同しないでください。 | 必須 |
config | 設定オプション | |
null |
AmplitudeConfig
| 名前 | 概要 | デフォルト値 |
|---|---|---|
flushQueueSize | イベントはバッファ内で待機し、実験はそれらをバッチで送信します。イベント数がflushQueueSizeに到達すると、実験はバッファをフラッシュします。 | 200 |
minIdLength | userIdおよびdeviceIdの最小長です。 | 5 |
serverZone | プロジェクトのサーバーゾーン。 EUおよびUSをサポートしています。データレジデンシーがEU域内の場合はEUに設定します。 | US |
serverUrl | 実験がイベントを送信するAPIエンドポイントURL。serverZoneとuseBatchによって自動的に選択されます。このフィールドをnullではなく文字列値で設定した場合、SDKはserverZoneおよびuseBatchを無視し、文字列値を使用します。 | https://api2.amplitude.com/2/httpapi |
useBatch | バッチ API を使用するかどうか。 デフォルトでは、SDKはデフォルトのserverUrlを使用します。 | false |
httpClient | リクエストに使用する、基盤となるHTTPクライアント。設定されていない場合、SDKはデフォルトのHTTPクライアントを使用します。 | null |
guzzleClientConfig | 基礎となるデフォルトGuzzleHTTPClientの設定(使用されている場合)。 | デフォルト値 |
logger | カスタムロガーを使用するように設定します。 設定されていない場合、SDKはデフォルトのロガーを使用します。 | null |
logLevel | ロガーに使用するログレベル。 | LogLevel::ERROR |
<?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 | 露出イベントの送信に使用されるExposureTrackingProvider。 | 必須 |
cacheCapacity | エクスポージャーキャッシュに保存されているエクスポージャーの最大数。 | 65536 |
apiKey | アナリティクスAPIキー。実験デプロイメントキーと混同しないでください。 | 必須 |
minIdLength | userIdおよびdeviceIdの最小長です。 | 5 |
ExposureTrackingProvider
ローカル評価クライアントは、露出追跡プロバイダーを使用して露出イベントを送信します。Amplitudeは、Amplitudeへのイベントを追跡するデフォルトのエクスポージャートラッキングプロバイダーを提供します。カスタムプロバイダーを実装して、他の宛先へのイベントを追跡したり、追跡動作をカスタマイズしたりできます。
<?php
interface ExposureTrackingProvider {
public function track(Exposure $exposure): void;
}
ローカル評価クライアントは、追跡されていない露出イベントがあると判断した場合にtrack()を呼び出します。evaluate()から得られた露出と露出キャッシュを比較し、キャッシュ内に存在しない場合には追跡します。
| パラメータ | 要件 | 概要 |
|---|---|---|
exposure | 必須 | 実験露出イベントを表すオブジェクト。 |
DefaultExposureTrackingProvider
デフォルトの露出トラッキングプロバイダーは、ExposureTrackingProviderインターフェースの実装であり、同期HTTPリクエストを通じて、内部Amplitudeパッケージを使用して露出イベントをAmplitudeへと送信します。
<?php
class DefaultExposureTrackingProvider implements ExposureTrackingProvider {
public function __construct(Amplitude $amplitude);
}
Amplitude
| 名前 | 概要 | デフォルト値 |
|---|---|---|
apiKey | アナリティクスAPIキー。実験デプロイメントキーと混同しないでください。 | 必須 |
config | 設定オプション | |
null |
AmplitudeConfig
| 名前 | 概要 | デフォルト値 |
|---|---|---|
flushQueueSize | イベントはバッファ内で待機し、実験はそれらをバッチで送信します。イベント数がflushQueueSizeに到達すると、実験はバッファをフラッシュします。 | 200 |
minIdLength | userIdおよびdeviceIdの最小長です。 | 5 |
serverZone | プロジェクトのサーバーゾーン。 EUおよびUSをサポートしています。データレジデンシーがEU域内の場合はEUに設定します。 | US |
serverUrl | 実験がイベントを送信するAPIエンドポイントURL。serverZoneとuseBatchによって自動的に選択されます。このフィールドをnullではなく文字列値で設定した場合、SDKはserverZoneおよびuseBatchを無視し、文字列値を使用します。 | https://api2.amplitude.com/2/httpapi |
useBatch | バッチ API を使用するかどうか。 デフォルトでは、SDKはデフォルトのserverUrlを使用します。 | false |
httpClient | リクエストに使用する、基盤となるHTTPクライアント。設定されていない場合、SDKはデフォルトのHTTPクライアントを使用します。 | null |
guzzleClientConfig | 基礎となるデフォルトGuzzleHTTPClientの設定(使用されている場合)。 | デフォルト値 |
logger | カスタムロガーを使用するように設定します。 設定されていない場合、SDKはデフォルトのロガーを使用します。 | null |
logLevel | ロガーに使用するログレベル。 | LogLevel::ERROR |
<?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 は次のログレベルを使用します。
| レベル | 概要 |
|---|---|
NO_LOG | ログをオフにする |
ERROR | エラーレベルのメッセージが記録される |
DEBUG | デバッグおよびエラーレベルのメッセージが記録される |
カスタムHTTPクライアント
HTTPClientInterfaceを実装するカスタムHTTPクライアントを使用するように、ローカルおよびリモートの評価クライアントを設定します。それ以外の場合は、SDKはデフォルトのGuzzleベースのHTTPクライアントを使用します。
HTTPClientInterface
| メソッド | 戻り値の型 | 概要 |
|---|---|---|
getClient | Psr\HTTP\Client\ClientInterface | 基盤となる PSR HTTP クライアントを返します。 |
createRequest | Psr\HTTP\Message\RequestInterface | 基盤となる PSR HTTP クライアントから送信される PSR 要求を返します。 |
GuzzleHTTPClient
RemoteEvaluationConfigおよびLocalEvaluationConfigにあるguzzleClientConfigオプションを使用して、デフォルトのGuzzleクライアントを設定します。
| 名前 | 概要 | デフォルト値 |
|---|---|---|
timeoutMillis | リクエストに対するタイムアウト時間をミリ秒単位で指定します。 このタイムアウトは最初の要求に適用され、その後の再試行には適用されません。 | 10000 |
retries | リクエストが失敗した場合に試行するリトライ回数。 | 8 |
retryBackoffMinMillis | リクエストが失敗した後の最小(初期)バックオフ値。 SDKは、retryBackoffScalar設定に従ってこの遅延をスケーリングします。 | 500 |
retryBackoffMaxMillis | 再試行間の最大バックオフ値。スケールされたバックオフが最大値よりも大きくなった場合、実験はその後のすべてのリクエストに対して最大値を使用します。 | 10000 |
retryBackoffScalar | 最小バックオフを指数関数的にスケールします。 | 1.5 |
retryTimeoutMillis | リクエストを再試行するためのリクエストタイムアウトです。 | 10000 |
<?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
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?