正式なドキュメントは英語版であり、この日本語訳はAI支援翻訳により作成された参考用のものです。日本語訳の一部の内容は人間によるレビューがまだ行われていないため、翻訳のタイミングにより英語版との間に差異が生じることがあります。最新かつ正確な情報については、英語版をご参照ください。
ドキュメントに関する現在のご利用体験についてお聞かせください。アンケートにご協力ください

実験API

  • プラン: Free、Premium、Ultimate
  • 提供形態: GitLab.com

このAPIを使用してA/B実験を操作します。このAPIは内部使用のみを目的としています。匿名ユーザーや認証されていないユーザーとは使用できません。匿名ユーザーが関わる実験の場合は、代わりにglex_forceクエリパラメータを使用してください。

前提条件:

すべての実験をリスト表示

GitLabインスタンス上のすべての実験をリスト表示します。各実験には、enabledステータスがあり、その実験がグローバルに有効になっているか、特定のコンテキストでのみ有効になっているかを示します。

各実験は、実験が宣言するコンテキストキーを含むcontext配列も公開します。usernamespaceネームスペース、project、またはactorです。バリアントの割り当てを強制、読み取り、またはクリアする際に、これらのキーを渡します。actorキーの場合、GitLabがユーザーからアクターを解決するため、context[user]パラメータを渡します。コンテキストキーを宣言しない実験の場合、配列は空です。

GET /experiments
curl --request GET \
  --header "PRIVATE-TOKEN: <your_access_token>" \
  --url "https://gitlab.example.com/api/v4/experiments"

レスポンス例:

[
  {
    "key": "code_quality_walkthrough",
    "context": ["user"],
    "definition": {
      "name": "code_quality_walkthrough",
      "introduced_by_url": "https://gitlab.com/gitlab-org/gitlab/-/merge_requests/58900",
      "rollout_issue_url": "https://gitlab.com/gitlab-org/gitlab/-/issues/327229",
      "milestone": "13.12",
      "type": "experiment",
      "group": "group::activation",
      "default_enabled": false
    },
    "current_status": {
      "state": "conditional",
      "gates": [
        {
          "key": "boolean",
          "value": false
        },
        {
          "key": "percentage_of_actors",
          "value": 25
        }
      ]
    }
  },
  {
    "key": "ci_runner_templates",
    "context": ["user", "namespace"],
    "definition": {
      "name": "ci_runner_templates",
      "introduced_by_url": "https://gitlab.com/gitlab-org/gitlab/-/merge_requests/58357",
      "rollout_issue_url": "https://gitlab.com/gitlab-org/gitlab/-/issues/326725",
      "milestone": "14.0",
      "type": "experiment",
      "group": "group::activation",
      "default_enabled": false
    },
    "current_status": {
      "state": "off",
      "gates": [
        {
          "key": "boolean",
          "value": false
        }
      ]
    }
  }
]

キャッシュされた割り当てを削除

キャッシュストアから、実験のすべてのキャッシュされたバリアントの割り当てを削除します。このエンドポイントを使用して、コードベースからコードが削除されても、キャッシュされた割り当てが残っている完了した実験をクリーンアップします。

DELETE /experiments/:name/cache

サポートされている属性:

属性タイプ必須説明
name文字列はいクリアする実験のキャッシュキー。

成功すると、204 No Contentを返します。

指定された名前にキャッシュされた割り当てが存在しない場合でも、リクエストは204 No Contentを返します。名前が実験ではないキャッシュキーを参照している場合、リクエストは400 Bad Requestを返します。リクエストが認証されていない場合、リクエストは401 Unauthorizedを返します。ユーザーがGitLabチームメンバーではない場合、リクエストは403 Forbiddenを返します。

nameの値は、キャッシュキーとして直接使用されます。このエンドポイントは、現在定義されている実験に属していない場合でも、一致するすべてのキャッシュエントリをクリアします。この動作は、コードが削除された孤立した実験のクリーンアップをサポートします。このエンドポイントを呼び出す前に、名前を確認してください。

リクエスト例:

curl --request DELETE \
  --header "PRIVATE-TOKEN: <your_access_token>" \
  --url "https://gitlab.example.com/api/v4/experiments/code_quality_walkthrough/cache"

実験の割り当て

これらのエンドポイントを使用して、GLEX Redisキャッシュ内の実験バリアントの割り当てを強制および読み取ります。これは、リクエスト/レスポンスサイクル外で実行され、glex_forceクエリパラメータが利用できないバックエンド専用の実験に役立ちます。

実験は、app/experiments内の実験クラスでcontext_keysを宣言する必要があります。詳細については、バリアントの割り当てを強制するを参照してください。

バリアントの割り当てを強制する

指定されたコンテキストの実験キャッシュにバリアントの割り当てを書き込みます。

POST /experiments/:experiment_name/assignments

パラメータは以下のとおりです:

属性タイプ必須説明
experiment_name文字列はい実験の名前。
variant文字列はい割り当てるバリアント名(例: controlcandidate)。
context[user]文字列いいえコンテキストのユーザー名。
context[namespace]文字列いいえコンテキストのネームスペースのフルパス。
context[project]文字列いいえコンテキストのプロジェクトのフルパス。

contextパラメータを省略した場合、APIは認証済みユーザーを使用します。

curl --request POST \
  --header "PRIVATE-TOKEN: <your_access_token>" \
  --url "https://gitlab.example.com/api/v4/experiments/my_experiment/assignments" \
  --data "variant=candidate" \
  --data "context[user]=sidney-jones"

レスポンス例:

{
  "experiment": "my_experiment",
  "variant": "candidate",
  "context_key": "my_experiment:a1b2c3d4e5f6"
}

現在の割り当てを取得する

指定された実験およびコンテキストに対して、現在キャッシュされているバリアントの割り当てを読み取ります。

GET /experiments/:experiment_name/assignments

パラメータは以下のとおりです:

属性タイプ必須説明
experiment_name文字列はい実験の名前。
context[user]文字列いいえコンテキストのユーザー名。
context[namespace]文字列いいえコンテキストのネームスペースのフルパス。
context[project]文字列いいえコンテキストのプロジェクトのフルパス。

context[user]パラメータを省略した場合、APIは認証済みユーザーを使用します。

実験がそのcontext_keysactorを宣言している場合、アクターはcontext[user]から解決されます。個別のcontext[actor]パラメータはありません。

実験では、例えばcontext_keys :user, :namespaceのように複数のコンテキストキーを宣言できます。その場合、宣言されたすべてのキーを渡してください。yalnızca user ve actorキーが認証済みユーザーにフォールバックします。namespaceネームスペースとprojectは常に明示的に渡す必要があります。

userコンテキストを持つ実験のリクエスト例:

curl --request GET \
  --header "PRIVATE-TOKEN: <your_access_token>" \
  --url "https://gitlab.example.com/api/v4/experiments/my_experiment/assignments?context[user]=sidney-jones"

namespaceコンテキストを持つ実験のリクエスト例:

curl --request GET \
  --header "PRIVATE-TOKEN: <your_access_token>" \
  --url "https://gitlab.example.com/api/v4/experiments/my_experiment/assignments?context[namespace]=my-group"

context_keys :user, :namespaceを宣言する実験のリクエスト例:

curl --request GET \
  --header "PRIVATE-TOKEN: <your_access_token>" \
  --url "https://gitlab.example.com/api/v4/experiments/my_experiment/assignments?context[user]=sidney-jones&context[namespace]=my-group"

レスポンス例:

{
  "experiment": "my_experiment",
  "variant": "candidate",
  "context_key": "my_experiment:a1b2c3d4e5f6",
  "cached": true
}

バリアントの割り当てをクリアする

指定されたコンテキストの実験キャッシュから強制されたバリアントの割り当てを削除し、アクターを通常のロールアウトの割り当てに戻します。

DELETE /experiments/:experiment_name/assignments

パラメータは以下のとおりです:

属性タイプ必須説明
experiment_name文字列はい実験の名前。
context[user]文字列いいえコンテキストのユーザー名。
context[namespace]文字列いいえコンテキストのネームスペースのフルパス。
context[project]文字列いいえコンテキストのプロジェクトのフルパス。

コンテキストの解決は、現在の割り当てを取得すると一致します。context[user]を省略した場合、APIは認証済みユーザーを使用し、実験がactorを宣言している場合、アクターはcontext[user]から解決されます。

成功すると、204 No Contentを返します。

この操作はべき等です。キャッシュされた割り当てがないコンテキストをクリアしても、204 No Contentが返されます。

リクエスト例:

curl --request DELETE \
  --header "PRIVATE-TOKEN: <your_access_token>" \
  --url "https://gitlab.example.com/api/v4/experiments/my_experiment/assignments?context[user]=sidney-jones"