プレースメントとセグメントのコマンド

これらのAdapty CLIコマンドは、プレースメント、プレースメント上のオーディエンス、およびオーディエンスが対象とするセグメントを管理します。

プレースメント

プレースメントは、フロー、ペイウォール、オンボーディングがユーザーに届く場所です。プレースメントのコンテンツタイプは作成時に固定されるため、アプリをペイウォールからフローに移行する際は既存のプレースメントを更新するのではなく新しいプレースメントを作成する必要があります。migrate-placements スキルを使用すると、これらのコマンドを一括で実行できます。

adapty placements list

アプリのすべてのプレースメントを一覧表示します。

adapty placements list --app <app-id>
フラグ必須説明
--appはいアプリ ID(UUID)

ページネーションフラグを使用できます。

各アイテムには id、developer_id、title、is_active が含まれます。is_active は有効なプレースメントの場合は true、無効な場合は false です。

adapty placements get

特定のプレースメントの詳細を取得します。

adapty placements get --app <app-id> <placement-id>
引数説明
placement-idプレースメント ID(UUID)
フラグ必須説明
--appはいアプリ ID(UUID)

レスポンスには id、developer_id、title、is_active、および audiences 配列が含まれます。is_active は有効なプレースメントの場合は true、無効な場合は false です。各オーディエンスエントリには content_type、segment_ids、priority、およびコンテンツの ID(paywall の場合は paywall_id、flow の場合は flow_id、A/B テストを実行するオーディエンスの場合は ab_test_id と ab_test_title)が含まれます。デフォルトオーディエンスは segment_ids: [] を持ち、最も高い優先度値(最後に評価)となります。オーディエンスの構造を参照してください。

adapty placements create

新しいプレースメントを作成します。

adapty placements create --app <app-id> --title "Main" --developer-id "main" --audiences '[{"content_type":"paywall","segment_ids":[],"paywall_id":"<paywall-id>","priority":0}]'
フラグ必須説明
--appはいアプリ ID(UUID)
--titleはいプレースメントのタイトル
--developer-idはいアプリのコードでこのプレースメントをリクエストする際に使用する文字列識別子
--audiencesどちらか一方オーディエンスエントリの JSON 配列。各エントリには明示的な content_type が必要です。オーディエンスの形式を参照
--paywall-idどちらか一方非推奨。 ペイウォール ID(UUID)。クライアント側で単一のデフォルトオーディエンスとしてラップされます

--audiences または --paywall-id のどちらか一方のみを指定してください。両方指定するか、どちらも指定しない場合はエラーになります。

Warning

--paywall-id は非推奨であり、将来削除される予定です。渡された場合、CLI は stderr に警告を表示し、その値をデフォルトのオーディエンスに変換します。新しい自動化には --audiences を使用してください。

adapty placements update

既存のプレースメントの全フィールドを置き換えます。

adapty placements update --app <app-id> <placement-id> --title "Main" --developer-id "main" --audiences '[{"content_type":"paywall","segment_ids":[],"paywall_id":"<paywall-id>","priority":0}]'

このコマンドは、オーディエンスの完全なリストを含む、プレースメントの全フィールドを置き換えます。

引数説明
placement-idプレースメント ID(UUID)
フラグ必須説明
--appはいアプリ ID(UUID)
--titleはいプレースメントのタイトル
--developer-idはいアプリのコードでこのプレースメントをリクエストする際に使用する文字列識別子
--audiencesどちらか一方オーディエンスエントリの JSON 配列。各エントリには明示的な content_type が必要です。Audiences shape を参照
--paywall-idどちらか一方非推奨。 ペイウォール ID(UUID)。すべてのオーディエンスを単一のデフォルトオーディエンスに置き換えます
Warning

--paywall-id を渡すと、プレースメント上のすべてのオーディエンスが上書きされます。セグメント固有のオーディエンスは削除されます。保持するには --audiences を使用し、残したいエントリをすべて含めてください。

オーディエンスの構造

--audiences フラグは JSON 配列を受け取ります。各エントリには以下が含まれます:

フィールド型説明
content_typestringすべてのエントリで必須。"paywall"、"flow"、"ab_test"(ペイウォール A/B テスト)、"flow_ab_test"(フロー A/B テスト)、"cross_ab_test"または"flow_cross_ab_test"(クロスプレースメント A/B テスト)。ペイウォールのプレースメントではpaywall、ab_test、cross_ab_testを使用し、フローのプレースメントではflow、flow_ab_test、flow_cross_ab_testを使用する
segment_idsstring[]このオーディエンスのターゲットとなるセグメント ID。長さは0または1。空の配列はデフォルトオーディエンスを示し、他のどのセグメントにもマッチしないユーザーへのフォールバックとなる
paywall_idstringこのオーディエンスのユーザーに表示するペイウォール ID(UUID)。content_typeが"paywall"の場合は必須
flow_idstringこのオーディエンスのユーザーに表示するフロー ID(UUID)。content_typeが"flow"の場合は必須
ab_test_idstringこのオーディエンスのユーザーに対して実行するA/B テスト ID。4つの A/B テストコンテンツタイプすべてで必須
ab_test_titlestringA/B テストのタイトル。読み取り専用:書き込み時は API によって無視される
prioritynumber0始まりで、プレースメント内で一意。オーディエンスは値の低い順に評価され、デフォルトオーディエンスは最も高い値を持つ必要がある

プレースメントには、デフォルトのオーディエンスが必ず1つ必要です。

Warning

placements update はオーディエンスリスト全体を置き換えます。A/B テストを実行中のオーディエンスも対象です。実行中のテストを維持するには、placements get からそのエントリをコピーして、ab_test_id と segment_ids を変更せずに --audiences にそのまま含めてください。エントリを削除または置き換えると、勝者なしでテストが停止します。エントリを別のセグメントに移動するとテストが再開され、別のオーディエンスに ab_test_id を指定するとそこでテストが開始されます。優先順位だけを変更した場合はテストが継続されます。これらのケースについて CLI は警告を表示しません。

クロスプレースメント A/B テスト エントリ(cross_ab_test、flow_cross_ab_test)は読み取り専用です。API は書き込み時にそれらを無視し、保存済みの値を維持します。

プレースメントのコンテンツタイプは作成時に固定されるため、placements update でペイウォールのプレースメントをフローに切り替えたり、その逆を行ったりすることはできません。フロー専用のプレースメントを作成してください — フロー用の新しいプレースメントを作成するをご覧ください。

CLIはリクエストを送信する前にすべてのエントリを確認します。content_type が不明または欠落しているエントリ、あるいはその content_type が必要とするIDが不足しているエントリは、コード2で終了し、何も送信されません。CLIが認識できない content_type の場合、this CLI does not know this audience kind; update the CLI と表示されます。エントリが placements get から取得されたものであれば、エントリを削除するのではなくCLIをアップデートしてください。そのエントリは実行中のA/B テストである可能性があります。

フローをアタッチできるのは、公開済みの場合のみです。draft 状態のフロー、またはまだ最初の公開処理が完了していないフローは、サーバーによって拒否されます。CLI はその拒否を認識し、終了コード 2 で終了し、対象フローの flows publish コマンドを出力します。フローを公開するには、flows publish または フロー&ペイウォールビルダー を使用し、ステータスが published になるまで待ってください。

ターゲットオーディエンスが 1 つとデフォルトが 1 つある場合の例:

adapty placements update <placement-id> --app <app-id> --title "Main" --developer-id "main" \
  --audiences '[{"content_type":"paywall","segment_ids":["<vip-segment-id>"],"paywall_id":"<vip-paywall-id>","priority":0},{"content_type":"paywall","segment_ids":[],"paywall_id":"<default-paywall-id>","priority":1}]'

公開済みのフローをすべてのユーザーに配信するプレースメントの例:

adapty placements create --app <app-id> --title "Onboarding" --developer-id "onboarding" \
  --audiences '[{"content_type":"flow","segment_ids":[],"flow_id":"<flow-id>","priority":0}]'

セグメント固有のルーティングを失わずに複数のプレースメント間でペイウォールを入れ替えるには:

  1. 影響を受けるプレースメントを検索する:

    adapty paywalls placements --app <app-id> <old-paywall-id>
  2. それぞれについて、audiences 配列全体を取得する:

    adapty placements get --app <app-id> <placement-id> --json
  3. 該当する paywall_id の値をクライアント側で置き換える。A/B テストのエントリを含め、他のすべてのエントリは変更しない。

  4. 変更したペイロードを書き戻す:

    adapty placements update --app <app-id> <placement-id> --title "<title>" --developer-id "<developer-id>" --audiences '<modified-payload>'

セグメント

セグメントは、プロファイル属性によってユーザーをグループ化します。以下のコマンドを使用してセグメントを作成したり、プレースメントのオーディエンスを構成する際にセグメントIDを検索したりできます。Apple Ads のキャンペーン、広告グループ、またはキーワードからセグメントを作成するには、代わりに adapty asa segments create を使用してください。Apple IDを自動的に検索し、Ads Manager と同じ方法でセグメントに名前を付けます。

adapty segments list

アプリのすべてのセグメントを一覧表示します。

adapty segments list --app <app-id>
フラグ必須説明
--appはいアプリ ID(UUID)

ページネーションフラグを使用できます。

adapty segments get

特定のセグメントの詳細を取得します。

adapty segments get --app <app-id> <segment-id>
引数説明
segment-idセグメント ID(UUID)
フラグ必須説明
--appYesアプリ ID(UUID)

レスポンスには id、title、description、filters、profile_count、refresh_in_progress、created_at、updated_at が含まれます。list は id、title、description のみを返します。

adapty segments create

セグメントを1つ以上のフィルターから作成します。

adapty segments create --app <app-id> --title "US installs" --filter ip_country:IN:US --filter install_date:>=:2026-01-01
フラグ必須説明
--appはいアプリID(UUID)
--titleはいセグメントのタイトル
--filterはいフィルタールール。繰り返し指定可能。フィルター構文を参照
--descriptionいいえセグメントの説明

ユーザーがセグメントに一致するのは、すべてのフィルターに一致する場合のみです。レスポンスは segments get と同じフィールドを持ちます。profile_count は 0 から始まり、セグメント作成後に Adapty が再計算します。

adapty segments update

既存のセグメントのタイトル、説明、フィルターを置き換えます。

adapty segments update --app <app-id> <segment-id> --title "US installs" --filter ip_country:IN:US,CA
引数説明
segment-idセグメント ID(UUID)
フラグ必須説明
--appYesアプリ ID(UUID)
--titleYesセグメントのタイトル
--filterYesフィルタールール。繰り返し指定可。フィルター構文を参照
--descriptionNoセグメントの説明
Warning

segments update はセグメント全体を置き換えます。変更したいフィルターだけでなく、保持したいすべてのフィルターを渡してください。現在のフィルターを確認するには、adapty segments get --app <app-id> <segment-id> --json を実行してください。

フィルターの構文

各 --filter は field:OPERATOR:value の形式で記述します。複数の値のいずれかに一致させるには、値をカンマで区切ります(例: ip_country:IN:US,CA)。

オペレーター値例
IN, NOT IN1つ以上ip_country:NOT IN:US,CA
>, >=, <, <=1つage:>:18
BETWEEN2つtotal_revenue_usd:BETWEEN:10,100
IS NULL, IS NOT NULLなしage:IS NULL

数値はそのまま渡してください(例:age:>:18)。Adapty は age、total_revenue_usd、float型のカスタム属性などの数値フィールドに対して自動的に変換します。

この短縮形では表現できない値については、フィルターを JSON オブジェクトとして渡してください:

adapty segments create --app <app-id> --title "Adults" --filter '{"field_name":"age","operator":">","value_list":[18]}'

Adapty はフィールド名、演算子、値の型を検証し、無効なフィルターごとにエラーを報告します。既存のフィルターのフィールド名や値のフォーマットを確認するには、ダッシュボードで作成したセグメントに対して adapty segments get --app <app-id> <segment-id> --json を実行してください。

次のステップ