---
title: "CLIからA/Bテストを実行する"
description: "Adapty CLIを使って、ターミナルからペイウォールとフローのA/Bテストを作成・開始・停止・置き換え・アーカイブできます。元に戻せない操作の前に、その効果を正確に確認できます。"
---

> **AI agents**: to search Adapty docs faster and with fewer tokens, install the Adapty skills: `npx adapty skills install --yes`

Adapty CLIでは、`adapty ab-tests`トピック配下のコマンドを使って、ターミナルからペイウォールやフローの通常の[A/Bテスト](ab-tests)を実行できます。テストをドラフトとして作成し、1つのオーディエンスに対してプレースメント上で開始し、勝者を指定して停止し、稼働中のテストを変更済みのものに置き換え、古いテストをアーカイブすることができます。

AIエージェントにテストを実行させたり、複数のアプリにわたるテストをスクリプト化したり、ダッシュボードを開かずにテストを開始・停止したりするために使用できます。

通常のテストは、1つのオーディエンスのユーザーを1つのプレースメントで2つ以上のペイウォール、または2つ以上のフローに振り分けます。複数のプレースメントをまたいだテストを実行するには、ダッシュボードの[クロスプレースメントテスト](ab-test-types)を使用してください。`ab-tests` コマンドはテスト結果を返しません。ベストである確率などの結果を確認するには、ダッシュボードの[A/B テストの結果と指標](results-and-metrics)を参照してください。1つのテストのユーザーに対してアナリティクスを確認するには、`adapty analytics catalog` の **A/B tests** ディメンションを使って[アナリティクスコマンド](developer-cli-analytics)をフィルタリングしてください。

## 始める前に \{#before-you-start\}

`ab-tests` トピックのインストールとログインは、CLI の他のトピックと同じです。まだ設定していない場合は、[クイックスタートガイド](developer-cli-quickstart)のステップ 1 と 2 に従ってください。このトピックには CLI バージョン 0.14.0 以降が必要です。バージョンを確認するには、`adapty --version` を実行してください。

すべてのコマンドは `--app` にアプリの UUID を指定します。確認するには、次のコマンドを実行してください:

```bash
adapty apps list
```

テストは既存のコンテンツを使用します:

- **フロー**: フローは公開された状態のときのみテストに参加できます。下書きのフロー、または未公開の変更があるフローは拒否されます。フローを公開するには、`adapty flows publish` を実行してください。
- **ペイウォール**: Adapty にすでに登録されているプロダクトからペイウォールを作成するには、`adapty paywalls create` を実行してください。ペイウォールに新しいデザインを適用するには、[ペイウォールビルダー](adapty-paywall-builder)を使用してください。
- **プレースメント**: ペイウォールのテストはペイウォールのプレースメントで実行され、フローのテストはフローのプレースメントで実行されます。プレースメントを作成するには、`adapty placements create` を実行してください。新しいプレースメントはアプリのコードがそのプレースメントを取得するまで何も表示されません。
- **セグメント**: 一部のユーザーのみを対象にテストを実行するには、`adapty segments create` を使って事前に[セグメント](segments)を作成してください。

これらのコマンドについては、[コマンドリファレンス](developer-cli-reference)を参照してください。

## テストの一覧表示と読み取り \{#list-and-read-tests\}

`list` は、`--type paywall` を指定しない限りフローのテストを表示します。アプリのすべてのテストを確認するには、テストの種類ごとに実行してください：

```bash
adapty ab-tests list --app <app-id> --type flow --page-size 100
```

```bash
adapty ab-tests list --app <app-id> --type paywall --page-size 100
```

テストのステータスは `draft`、`live`、`completed`、`inactive`、`archived` のいずれかです。

バリアントを含む特定のテストを取得するには、次のコマンドを実行します：

```bash
adapty ab-tests get --app <app-id> <test-id>
```

`get --json` では、`segment_ids` がテストのオーディエンスを表します。`[]` はすべてのユーザー、`null` はまだオーディエンス未設定を意味します。各アームには `weight` とペイウォールまたはフローの ID があります。アームを識別するには `paywall_title` または `flow_name` を使用してください。アームの `title` は、設定しない限り空になります。

## テストを作成する \{#create-a-test\}

新しいテストはドラフト状態で作成されます。ドラフトはどのユーザーにも表示されないため、いつでも作成・変更できます。

1. `adapty paywalls list` または `adapty flows list` を使って、テスト対象コンテンツの **ID を確認** します。

2. 2つ以上のアームで **ドラフトを作成** します。各アームはペイウォールまたはフローとウェイトの組み合わせです。ウェイトはそのアームを表示するユーザーの割合を示し、合計が100になる必要があります。

   ```bash
   adapty ab-tests create --app <app-id> --title "Annual vs monthly" \
     --goal "More revenue per user" --placement <placement-id> \
     --paywalls '[{"paywall_id":"<paywall-a>","weight":50},{"paywall_id":"<paywall-b>","weight":50}]'
   ```

   `--placement` は必須です。ペイウォールテストにはペイウォールのプレースメント、フローテストにはフローのプレースメントが必要です。フローテストの場合は、各アームに `flow_id` を指定した `--flows` を渡してください。アームには `"title":"A"` のように `title` を設定することもできます。

3. **`ab-tests get` でドラフトを確認します。**

ドラフトのプレースメントはあくまで予定です。`create` には `--segment` または `--all-users` でオーディエンスの予定も指定できます。これらの予定値はユーザーには影響しません。テストを開始する際は、プレースメントとオーディエンスを改めて `start` に渡してください。

## テストを開始する \{#start-a-test\}

:::warning
開始は取り消せません。テストが開始した瞬間から、指定したオーディエンスのユーザーは現在のペイウォールやフローが表示されなくなります。
:::

下書きを開始するには、プレースメントといずれか1つのオーディエンスを指定します：`--all-users`、または`--segment`にセグメントIDを1つ指定します：

```bash
adapty ab-tests start --app <app-id> <test-id> --placement <placement-id> --segment <segment-id>
```

CLIは開始内容を表示し、実際に送信する前に`Apply? [y/N]`と確認を求めます。テストがどこで実行されるかは、プレースメントのオーディエンス設定によって異なります：

- **プレースメントにそのセグメントのオーディエンスがある場合**（または「すべてのユーザー」の場合）：そのオーディエンスでテストが実行されます。現在そこで実行中のテストは停止し、`completed` 状態に移行します。
- **プレースメントにそのセグメントのオーディエンスがない場合**：`start` によってプレースメントに最高優先度の新しいオーディエンスが追加されます。現在別のオーディエンスに一致しているこのセグメントのユーザーは、テストに移行します。

テストに別のオーディエンスより低い優先度を設定するには、まずそのセグメントをそのオーディエンスとして優先度付きで追加してください。現在そのユーザーが見ているペイウォールまたはフローを設定し、そのオーディエンスでテストを開始します。詳細は[オーディエンスの優先度を変更する](change-audience-priority)を参照してください。

セグメントオーディエンスへの変更がすべてのユーザーに反映されるまで、最大20分かかることがあります。

起動できるのはドラフト状態のテストのみです。テストを再度実行するには、新しいテストを作成してください：`get` で既存のテストを取得し、同じアームで `create` を使用してテストを作成します。

## テストを変更する \{#change-a-test\}

`update` はテスト全体を再送信します。`--placement` を含むすべてのフラグを毎回指定してください。フラグを省略すると、Adapty はその値をクリアします。たとえば、ゴールや予定のオーディエンスが消えます。

```bash
adapty ab-tests update --app <app-id> <test-id> --title "Annual vs monthly, Q4" \
  --goal "More revenue per user" --placement <placement-id> \
  --paywalls '[{"paywall_id":"<paywall-a>","weight":70},{"paywall_id":"<paywall-b>","weight":30}]'
```

ライブテスト中の `update` では、タイトルとゴールのみ変更できます。アームやプレースメント、オーディエンスは `get` が返す値をそのまま渡してください。別のアームや別のプレースメントを指定するとリクエストが拒否されます。テストの開始時刻は変わらず、ユーザーのアーム割り当ても維持されます。完了済みまたはアーカイブ済みのテストは変更できません。

ライブテスト中にアームやウェイトを変更したい場合は、テストを置き換えてください。`replace` はダッシュボードの **Modify** 操作に相当します。

```bash
adapty ab-tests replace --app <app-id> <test-id> --title "Annual vs monthly v2" \
  --placement <placement-id> \
  --paywalls '[{"paywall_id":"<paywall-a>","weight":80},{"paywall_id":"<paywall-b>","weight":20}]'
```

実行中のテストは停止して `completed` 状態に移行し、その結果はそのIDとともに保持されます。同じオーディエンスで新しいIDを持つ新しいテストが開始され、Adapty はそのオーディエンスのすべてのユーザーを再度アームに割り当てます。`--placement` に別のプレースメントを指定すると、Adapty はそのオーディエンスを指定のプレースメントに移動します。「すべてのユーザー」テストは移動できません。

## テストを停止する \{#stop-a-test\}

`stop` はテストを終了します。停止後にそのオーディエンスのユーザーに何を表示するかを選択します。以下のフラグのうち正確に1つを渡してください：

| フラグ | 停止後の動作 |
|---|---|
| `--winner <id>` | オーディエンス全体がテストのいずれかのアームを表示します。アームのペイウォールIDまたはフローIDを渡してください。 |
| `--other <id>` | オーディエンス全体が、テストに含まれていなかった同種のペイウォールまたはフローを表示します。 |
| `--no-content` | オーディエンスがプレースメントから外れ、そのユーザーは次にマッチするオーディエンスを取得します。「すべてのユーザー」テストでは拒否されます。 |

```bash
adapty ab-tests stop --app <app-id> <test-id> --winner <paywall-b>
```

テストは `completed` 状態に移行します。同じアームで再度テストするには、[テストを開始する](#start-a-test)の説明に従って新しいテストを作成してください。勝者を選ぶ方法については、[A/B テストの結果と指標](results-and-metrics)をご覧ください。

## テストをアーカイブする \{#archive-a-test\}

ライブ中でないテストはアーカイブできます。ライブ中のテストをアーカイブするには、先に停止してください。アーカイブしたテストは復元できません。

```bash
adapty ab-tests archive --app <app-id> <test-id>
```

## スクリプトやエージェントでの確認 \{#confirmation-in-scripts-and-agents\}

`start`、`stop`、`replace`、`archive` は元に戻せないため、送信前に実行内容が表示されます。確認の方法はコマンドの実行方法によって異なります。

| コマンドの実行方法 | 動作内容 |
|---|---|
| ターミナルで実行 | CLIは変更内容を表示し、`Apply? [y/N]` と確認を求めます。`y` または `yes` と答えると、CLIがリクエストを送信します。それ以外の回答では、コード1で終了し、何も送信しません。 |
| `--yes` を付けて実行 | CLIは確認なしにリクエストを送信します。 |
| `--json` を付けて実行、またはパイプ経由、もしくはターミナルなしで実行 | CLIは何も送信せず、コード6で終了します。エラーメッセージに変更内容が表示されます。 |

そのため、スクリプトやエージェントはコマンドの効果を事前に確認できます。`--yes` なしで実行して、メッセージを読み、承認後にはじめて `--yes` を付けて再実行できます。

## エラー \{#errors\}

| 終了コード | 原因 | 対処方法 |
|---|---|---|
| 1 | プロンプトで `y` 以外を入力した。何も送信されていない。 | 意図していた場合は、コマンドを再実行してください。 |
| 2 | 送信前にCLIが入力を拒否した: 無効なUUID、JSON配列でないアーム、IDまたは整数のウェイトがないアーム、`--paywalls` と `--flows` の両方またはどちらも指定していない、停止オプションが2つある、などが原因。 | メッセージに記載されているフラグを修正してください。 |
| 3 | ログインしていないか、Adaptyユーザーがアプリにアクセスできない。 | `adapty auth login` でログインし、`adapty apps list` でアプリIDを確認してください。 |
| 4 | Adaptyがリクエストを拒否した。メッセージに理由が記載されている。 | [Adaptyからのメッセージ](#messages-from-adapty)を参照してください。 |
| 5 | CLIがAdaptyに接続できなかった。 | オンライン状態を確認し、コマンドを再実行してください。 |
| 6 | 取り消しできないコマンドが `--yes` なし、かつ応答者なしで実行された。何も送信されていない。 | メッセージに記載されている内容を確認し、`--yes` を付けてコマンドを再実行してください。 |
| 130 | プロンプトでCtrl+Cを押した。何も送信されていない。 | — |

### Adapty からのメッセージ

| メッセージ | 対処方法 |
|---|---|
| `The sum of the weights must equal 100, but has N.` | ウェイトの合計が100になるよう変更してください。 |
| `Flow(<id>) must be published before adding to AB test.` | フローを公開してから、コマンドを再実行してください。 |
| `Paywalls cannot be changed in non-draft ab tests.` または `Placement cannot be changed in non-draft ab tests.` | `get` が返す通りにアームとプレースメントを渡すか、`replace` を使用してください。 |
| `AB Test from default audience can not be stopped.` | 全ユーザーを対象とした A/B テストを停止する場合は、停止後に表示するペイウォールまたはフローが必要です。`--winner` または `--other` を使用してください。 |
| `AB Test to stop must be live.` | 停止または置き換えができるのはライブ状態の A/B テストのみです。 |
| `Live Ab Test can not be deleted.` | アーカイブする前に A/B テストを停止してください。 |

## コマンドリファレンス \{#command-reference\}

すべてのコマンドは `--app`（`adapty apps list` で取得できるアプリの UUID）を必要とします。`list` 以外のすべてのコマンドは、テスト ID を引数として受け取ります。

### `ab-tests list`

| フラグ | 必須 | 説明 |
|---|---|---|
| `--type` | いいえ | `flow`（デフォルト）または `paywall`。 |
| `--state` | いいえ | `live`、`draft`、`completed`、`inactive`、または `archived`。 |
| `--placement` | いいえ | 指定したプレースメント（ID）のテストのみ表示。複数指定する場合はフラグを繰り返します。 |
| `--segment` | いいえ | 指定したセグメント（ID）に対して実行されているテストのみ表示。複数指定する場合はフラグを繰り返します。 |
| `--search` | いいえ | タイトルに指定テキストを含むテストのみ表示。 |
| `--page` | いいえ | ページ番号。デフォルト: 1。 |
| `--page-size` | いいえ | 1ページあたりのテスト数（最大100）。デフォルト: 20。 |

### `ab-tests get`

テストとそのアームを返します。他のフラグは不要です。

### `ab-tests create`

| フラグ | 必須 | 説明 |
|---|---|---|
| `--title` | はい | テストのタイトル。 |
| `--paywalls` | どちらか一方 | ペイウォールテストのアーム（JSON形式）: `[{"paywall_id":"<id>","weight":50,"title":"A"}, …]`。`title` は省略可能。 |
| `--flows` | どちらか一方 | フローテストのアーム（JSON形式）。`paywall_id` の代わりに `flow_id` を使用。 |
| `--goal` | いいえ | テストで検証したい内容。 |
| `--placement` | はい | テストを実施するプレースメント（ID）。ペイウォールテストにはペイウォールのプレースメント、フローテストにはフローのプレースメントが必要。 |
| `--segment` | いいえ | 特定のセグメント（ID）を対象にテストを計画する。`--all-users` と同時使用不可。 |
| `--all-users` | いいえ | 全ユーザーを対象にテストを計画する。 |

### `ab-tests update`

`create` と同じフラグを使用し、`--placement` は必須です。省略したフラグはクリアされます。実施中のテストでは、`--title` と `--goal` のみ変更できます。同じプレースメントとオーディエンスを再度渡してください。

### `ab-tests start`

| フラグ | 必須 | 説明 |
|---|---|---|
| `--placement` | はい | テストを実行するプレースメント（ID）。 |
| `--segment` | どちらか一方 | 特定のセグメントに対してテストを実行します（ID）。 |
| `--all-users` | どちらか一方 | 全ユーザーを対象にテストを実行します。 |
| `--yes`, `-y` | いいえ | 確認なしで開始します。`--json` 使用時またはパイプ経由の場合は必須です。 |

### `ab-tests stop`

| フラグ | 必須 | 説明 |
|---|---|---|
| `--winner` | 3つのうち1つ | このアームのペイウォールまたはフロー（ID）をオーディエンス全体に表示する。 |
| `--other` | 3つのうち1つ | テストに含まれていなかったペイウォールまたはフロー（ID）を表示する。 |
| `--no-content` | 3つのうち1つ | プレースメントからオーディエンスを削除する。「全ユーザー」テストには使用不可。 |
| `--yes`, `-y` | 不要 | 確認なしで停止する。`--json` 使用時またはパイプ経由の場合は必須。 |

### `ab-tests replace`

| フラグ | 必須 | 説明 |
|---|---|---|
| `--title` | Yes | 新しいテストのタイトル。 |
| `--placement` | Yes | 新しいテストのプレースメント（ID）。別のプレースメントを指定すると、オーディエンスがそのプレースメントに移動します。 |
| `--paywalls` または `--flows` | Yes | `create` と同様に、新しいテストのアーム。 |
| `--goal` | No | 新しいテストで検証したい内容。 |
| `--yes`, `-y` | No | 確認なしで置き換えます。`--json` 使用時またはパイプ経由の場合は必須です。 |

新しいテストは置き換え対象のテストのオーディエンスを引き継ぐため、`replace` にはオーディエンスフラグがありません。

### `ab-tests archive`

| フラグ | 必須 | 説明 |
|---|---|---|
| `--yes`, `-y` | いいえ | 確認なしでアーカイブします。`--json` 使用時またはパイプ経由の場合は必須。 |

## 次のステップ \{#whats-next\}

- [A/B テスト用エージェントスキル](ab-tests-skill) — エージェントがテストの計画・開始・停止を行い、取り消しできない各ステップで確認を求めます。
- [A/B テストの作成・実行・停止](run_stop_ab_tests) — ダッシュボードで行う同じ手順の説明です。
- [A/B テストの結果と指標](results-and-metrics) — 結果の読み方と勝者の選び方。