CLIからA/Bテストを実行する
Adapty CLIでは、adapty ab-testsトピック配下のコマンドを使って、ターミナルからペイウォールやフローの通常のA/Bテストを実行できます。テストをドラフトとして作成し、1つのオーディエンスに対してプレースメント上で開始し、勝者を指定して停止し、稼働中のテストを変更済みのものに置き換え、古いテストをアーカイブすることができます。
AIエージェントにテストを実行させたり、複数のアプリにわたるテストをスクリプト化したり、ダッシュボードを開かずにテストを開始・停止したりするために使用できます。
通常のテストは、1つのオーディエンスのユーザーを1つのプレースメントで2つ以上のペイウォール、または2つ以上のフローに振り分けます。複数のプレースメントをまたいだテストを実行するには、ダッシュボードのクロスプレースメントテストを使用してください。ab-tests コマンドはテスト結果を返しません。ベストである確率などの結果を確認するには、ダッシュボードのA/B テストの結果と指標を参照してください。1つのテストのユーザーに対してアナリティクスを確認するには、adapty analytics catalog の A/B tests ディメンションを使ってアナリティクスコマンドをフィルタリングしてください。
始める前に
ab-tests トピックのインストールとログインは、CLI の他のトピックと同じです。まだ設定していない場合は、クイックスタートガイドのステップ 1 と 2 に従ってください。このトピックには CLI バージョン 0.14.0 以降が必要です。バージョンを確認するには、adapty --version を実行してください。
すべてのコマンドは --app にアプリの UUID を指定します。確認するには、次のコマンドを実行してください:
adapty apps list
テストは既存のコンテンツを使用します:
- フロー: フローは公開された状態のときのみテストに参加できます。下書きのフロー、または未公開の変更があるフローは拒否されます。フローを公開するには、
adapty flows publishを実行してください。 - ペイウォール: Adapty にすでに登録されているプロダクトからペイウォールを作成するには、
adapty paywalls createを実行してください。ペイウォールに新しいデザインを適用するには、ペイウォールビルダーを使用してください。 - プレースメント: ペイウォールのテストはペイウォールのプレースメントで実行され、フローのテストはフローのプレースメントで実行されます。プレースメントを作成するには、
adapty placements createを実行してください。新しいプレースメントはアプリのコードがそのプレースメントを取得するまで何も表示されません。 - セグメント: 一部のユーザーのみを対象にテストを実行するには、
adapty segments createを使って事前にセグメントを作成してください。
これらのコマンドについては、コマンドリファレンスを参照してください。
テストの一覧表示と読み取り
list は、--type paywall を指定しない限りフローのテストを表示します。アプリのすべてのテストを確認するには、テストの種類ごとに実行してください:
adapty ab-tests list --app <app-id> --type flow --page-size 100
adapty ab-tests list --app <app-id> --type paywall --page-size 100
テストのステータスは draft、live、completed、inactive、archived のいずれかです。
バリアントを含む特定のテストを取得するには、次のコマンドを実行します:
adapty ab-tests get --app <app-id> <test-id>
get --json では、segment_ids がテストのオーディエンスを表します。[] はすべてのユーザー、null はまだオーディエンス未設定を意味します。各アームには weight とペイウォールまたはフローの ID があります。アームを識別するには paywall_title または flow_name を使用してください。アームの title は、設定しない限り空になります。
テストを作成する
新しいテストはドラフト状態で作成されます。ドラフトはどのユーザーにも表示されないため、いつでも作成・変更できます。
-
adapty paywalls listまたはadapty flows listを使って、テスト対象コンテンツの ID を確認 します。 -
2つ以上のアームで ドラフトを作成 します。各アームはペイウォールまたはフローとウェイトの組み合わせです。ウェイトはそのアームを表示するユーザーの割合を示し、合計が100になる必要があります。
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を設定することもできます。 -
ab-tests getでドラフトを確認します。
ドラフトのプレースメントはあくまで予定です。create には --segment または --all-users でオーディエンスの予定も指定できます。これらの予定値はユーザーには影響しません。テストを開始する際は、プレースメントとオーディエンスを改めて start に渡してください。
テストを開始する
開始は取り消せません。テストが開始した瞬間から、指定したオーディエンスのユーザーは現在のペイウォールやフローが表示されなくなります。
下書きを開始するには、プレースメントといずれか1つのオーディエンスを指定します:--all-users、または--segmentにセグメントIDを1つ指定します:
adapty ab-tests start --app <app-id> <test-id> --placement <placement-id> --segment <segment-id>
CLIは開始内容を表示し、実際に送信する前にApply? [y/N]と確認を求めます。テストがどこで実行されるかは、プレースメントのオーディエンス設定によって異なります:
- プレースメントにそのセグメントのオーディエンスがある場合(または「すべてのユーザー」の場合):そのオーディエンスでテストが実行されます。現在そこで実行中のテストは停止し、
completed状態に移行します。 - プレースメントにそのセグメントのオーディエンスがない場合:
startによってプレースメントに最高優先度の新しいオーディエンスが追加されます。現在別のオーディエンスに一致しているこのセグメントのユーザーは、テストに移行します。
テストに別のオーディエンスより低い優先度を設定するには、まずそのセグメントをそのオーディエンスとして優先度付きで追加してください。現在そのユーザーが見ているペイウォールまたはフローを設定し、そのオーディエンスでテストを開始します。詳細はオーディエンスの優先度を変更するを参照してください。
セグメントオーディエンスへの変更がすべてのユーザーに反映されるまで、最大20分かかることがあります。
起動できるのはドラフト状態のテストのみです。テストを再度実行するには、新しいテストを作成してください:get で既存のテストを取得し、同じアームで create を使用してテストを作成します。
テストを変更する
update はテスト全体を再送信します。--placement を含むすべてのフラグを毎回指定してください。フラグを省略すると、Adapty はその値をクリアします。たとえば、ゴールや予定のオーディエンスが消えます。
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 操作に相当します。
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 はテストを終了します。停止後にそのオーディエンスのユーザーに何を表示するかを選択します。以下のフラグのうち正確に1つを渡してください:
| フラグ | 停止後の動作 |
|---|---|
--winner <id> | オーディエンス全体がテストのいずれかのアームを表示します。アームのペイウォールIDまたはフローIDを渡してください。 |
--other <id> | オーディエンス全体が、テストに含まれていなかった同種のペイウォールまたはフローを表示します。 |
--no-content | オーディエンスがプレースメントから外れ、そのユーザーは次にマッチするオーディエンスを取得します。「すべてのユーザー」テストでは拒否されます。 |
adapty ab-tests stop --app <app-id> <test-id> --winner <paywall-b>
テストは completed 状態に移行します。同じアームで再度テストするには、テストを開始するの説明に従って新しいテストを作成してください。勝者を選ぶ方法については、A/B テストの結果と指標をご覧ください。
テストをアーカイブする
ライブ中でないテストはアーカイブできます。ライブ中のテストをアーカイブするには、先に停止してください。アーカイブしたテストは復元できません。
adapty ab-tests archive --app <app-id> <test-id>
スクリプトやエージェントでの確認
start、stop、replace、archive は元に戻せないため、送信前に実行内容が表示されます。確認の方法はコマンドの実行方法によって異なります。
| コマンドの実行方法 | 動作内容 |
|---|---|
| ターミナルで実行 | CLIは変更内容を表示し、Apply? [y/N] と確認を求めます。y または yes と答えると、CLIがリクエストを送信します。それ以外の回答では、コード1で終了し、何も送信しません。 |
--yes を付けて実行 | CLIは確認なしにリクエストを送信します。 |
--json を付けて実行、またはパイプ経由、もしくはターミナルなしで実行 | CLIは何も送信せず、コード6で終了します。エラーメッセージに変更内容が表示されます。 |
そのため、スクリプトやエージェントはコマンドの効果を事前に確認できます。--yes なしで実行して、メッセージを読み、承認後にはじめて --yes を付けて再実行できます。
エラー
| 終了コード | 原因 | 対処方法 |
|---|---|---|
| 1 | プロンプトで y 以外を入力した。何も送信されていない。 | 意図していた場合は、コマンドを再実行してください。 |
| 2 | 送信前にCLIが入力を拒否した: 無効なUUID、JSON配列でないアーム、IDまたは整数のウェイトがないアーム、--paywalls と --flows の両方またはどちらも指定していない、停止オプションが2つある、などが原因。 | メッセージに記載されているフラグを修正してください。 |
| 3 | ログインしていないか、Adaptyユーザーがアプリにアクセスできない。 | adapty auth login でログインし、adapty apps list でアプリIDを確認してください。 |
| 4 | Adaptyがリクエストを拒否した。メッセージに理由が記載されている。 | 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 テストを停止してください。 |
コマンドリファレンス
すべてのコマンドは --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 使用時またはパイプ経由の場合は必須。 |
次のステップ
- A/B テスト用エージェントスキル — エージェントがテストの計画・開始・停止を行い、取り消しできない各ステップで確認を求めます。
- A/B テストの作成・実行・停止 — ダッシュボードで行う同じ手順の説明です。
- A/B テストの結果と指標 — 結果の読み方と勝者の選び方。