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 は、設定しない限り空になります。

テストを作成する

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

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

  2. 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 を設定することもできます。

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

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

テストを開始する

Warning

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

下書きを開始するには、プレースメントといずれか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を確認してください。
4Adaptyがリクエストを拒否した。メッセージに理由が記載されている。Adaptyからのメッセージを参照してください。
5CLIが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

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

ab-tests replace

フラグ必須説明
--titleYes新しいテストのタイトル。
--placementYes新しいテストのプレースメント(ID)。別のプレースメントを指定すると、オーディエンスがそのプレースメントに移動します。
--paywalls または --flowsYescreate と同様に、新しいテストのアーム。
--goalNo新しいテストで検証したい内容。
--yes, -yNo確認なしで置き換えます。--json 使用時またはパイプ経由の場合は必須です。

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

ab-tests archive

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

次のステップ