asc-ppp-pricing について
購買力平価または独自の地域別戦略に基づき、App Store のサブスクリプションとアプリ内課金の国・地域別価格を設定するスキルです。`asc` による設定、価格の取り込みと算出、検証を案内します。
主な機能
- 01サブスクリプションと IAP の地域別価格設定
- 02基準サブスクリプションからの価格算出
- 03CSV によるサブスクリプション価格の一括取り込み
- 04ドライランで価格ポイントの解決結果を確認
- 05変更後の価格検証
活用シーン
- 01複数地域への PPP 価格展開
- 02月額プランを基準にした年額価格の設定
- 03一部地域への個別価格の適用
- 04更新前後の地域別価格の確認と検証
インストール
コマンドをコピーしてターミナルで実行します。
npx skills add https:/ / github.com/ rorkai/ app-store-connect-cli-skills --skill asc-ppp-pricingインストール後、Claude Code で/asc-ppp-pricingを入力して読み込まれたか確認します。
詳細
PPP 価格設定(地域別価格設定)
このスキルを使用すると、購買力平価(PPP)または独自の地域別価格戦略に基づいて、各地域の価格を作成または更新できます。
現在の高レベルのワークフローを優先してください。
- 親リソースの作成と価格設定には
asc subscriptions setupとasc iap setupを使用し、 その後、バージョンに紐づくメタデータコマンドを実行します - サブスクリプションの価格変更には
asc subscriptions pricing ...を使用します - IAP の価格変更には
asc iap pricing summaryとasc iap pricing schedules ...を使用します
ネイティブの asc コマンドを優先してください。タスクに対応するネイティブコマンドがない場合に限り asc api を使用します。以下の --resolved による読み取りでは、すべての地域について、地域、通貨、顧客価格、収益、価格ポイント ID がすでに返されます。
前提条件
- 認証情報が設定されていることを確認してください(
asc auth loginまたはASC_*環境変数)。 ASC_APP_IDを優先するか、--appを明示的に指定してください。- 基準となる地域(通常は
USA)と基準価格を決めてください。 - 対応している地域 ID が必要な場合は、
asc pricing territories list --paginateを使用してください。
サブスクリプションの PPP ワークフロー
新しいサブスクリプション:setup で親リソースを初期化し、価格を設定する
setup を使用して、グループとサブスクリプションを作成し、App Review のスクリーンショットをアップロードし、均等化された価格マトリックス全体を適用して、販売可否を設定します。その後、API 4.4.1 のグループおよびサブスクリプションのバージョンを作成してください。setup のローカライズフラグは非推奨の v1 リソースを使用するため、新しいワークフローでは使用しないでください。
asc subscriptions setup \
--app "APP_ID" \
--group-reference-name "Pro" \
--reference-name "Pro Monthly" \
--product-id "com.example.pro.monthly" \
--subscription-period ONE_MONTH \
--review-screenshot "./review.png" \
--price "9.99" \
--price-territory "USA" \
--territories "USA,CAN,GBR" \
--no-verify \
--output json
setup の JSON から .groupId と .subscriptionId を取得し、バージョンに紐づくメタデータを追加します。非推奨の v1 ローカライズを使用しない場合、v2 の手順が完了するまで親リソースが MISSING_METADATA のままになることがあるため、ここでの --no-verify は意図的な指定です。
asc subscriptions groups versions list --group-id "GROUP_ID" --state PREPARE_FOR_SUBMISSION --paginate --output json
# If and only if the list has zero matches:
asc subscriptions groups versions create --group-id "GROUP_ID" --output json
# For one match, reuse .data[0].id. For more than one, stop and require an explicit GROUP_VERSION_ID.
asc subscriptions groups versions localizations list --version-id "GROUP_VERSION_ID" --paginate --output json
# If and only if en-US is missing:
asc subscriptions groups versions localizations create --version-id "GROUP_VERSION_ID" --locale "en-US" --name "Pro"
# Otherwise, if and only if the resolved en-US name differs:
asc subscriptions groups versions localizations update --id "GROUP_LOC_ID" --name "Pro"
# Otherwise, do nothing.
asc subscriptions versions list --subscription-id "SUB_ID" --state PREPARE_FOR_SUBMISSION --paginate --output json
# If and only if the list has zero matches:
asc subscriptions versions create --subscription-id "SUB_ID" --output json
# For one match, reuse .data[0].id. For more than one, stop and require an explicit SUBSCRIPTION_VERSION_ID.
asc subscriptions versions localizations list --version-id "SUBSCRIPTION_VERSION_ID" --paginate --output json
# If and only if en-US is missing:
asc subscriptions versions localizations create --version-id "SUBSCRIPTION_VERSION_ID" --locale "en-US" --name "Pro Monthly" --description "Unlock everything"
# Otherwise, if and only if the resolved en-US values differ:
asc subscriptions versions localizations update --id "SUBSCRIPTION_LOC_ID" --name "Pro Monthly" --description "Unlock everything"
# Otherwise, do nothing.
asc subscriptions groups versions localizations list --version-id "GROUP_VERSION_ID" --paginate --output table
asc subscriptions versions localizations list --version-id "SUBSCRIPTION_VERSION_ID" --paginate --output table
asc validate subscriptions --app "APP_ID" --output table
各バージョン一覧では、PREPARE_FOR_SUBMISSION の結果が 1 件だけ返された場合はそれを再利用してください。結果が空の場合に限り作成します。結果が複数返された場合は、削除できないバージョンをさらに作成せず、明示的なバージョン ID の指定を求めてください。各ローカライズの作成・更新も条件付きです。ロケールが存在しない場合は作成し、解決されたローカライズの値が異なる場合に限り更新し、すでに一致している場合は何もしません。
注意:
setupは、選択した基準価格から Apple の均等化された価格マトリックス全体を適用します。この分割ワークフローでは、v2 のローカライズが存在するまで最終確認を保留します。- この分割型の v2 初期化以外では、
--no-verifyを省略して、setup に通常の読み戻し検証を実行させてください。 - ワークフローがティア基準の場合は、
--priceの代わりに--tierまたは--price-point-idを使用してください。 - 既存のサブスクリプションが、選択した基準価格のまま
MISSING_METADATAになっている場合は、入力を変えずに--repairを指定して setup を再実行し、マトリックスを一括で再構築して保存してください。
変更前に現在のサブスクリプション価格を確認する
現在の状態を簡潔に把握したい場合は、まずサマリービューを使用してください。
asc subscriptions pricing summary --subscription-id "SUB_ID" --territory "USA"
asc subscriptions pricing summary --subscription-id "SUB_ID" --territory "IND"
asc subscriptions pricing prices list --subscription-id "SUB_ID" --resolved
変更前後の簡易確認には summary を使用してください。prices list --resolved は、すべての地域の現在有効な価格(顧客価格、通貨、収益、価格ポイント ID)を返します。将来の日付が設定された価格は含まれません。スケジュールされた変更を確認する場合は、未加工のレコードを取得する prices list --paginate を使用してください。
あるサブスクリプションのローカライズ価格を別のサブスクリプションから導出する
対象のサブスクリプションが、すべてのテリトリーでソースのサブスクリプションの固定倍率付近に保たれるようにしたい場合、たとえば年間価格を月間価格の約 10 倍にしたい場合には derive を使用します。Apple の価格ラダーはテリトリーごとに不均等にスケールするため、適用する前に選択されたターゲットポイントと達成される倍率をプレビューしてください。
asc subscriptions pricing derive \
--source-subscription-id "MONTHLY_SUB_ID" \
--target-subscription-id "YEARLY_SUB_ID" \
--multiplier "10" \
--round nearest \
--dry-run \
--output table
Apple が希望する価格を提供していない場合に、その解決方法を選択します:
exactは、計算された金額がターゲットラダーに存在しない限り失敗します。nearestは最も近い金額を選択します。完全な同点の場合は低い方を選択します。upは計算値以上の最小の利用可能な金額を選択します。downは計算値以下の最大の利用可能な金額を選択します。
確定コマンドは現在の価格を取得し、新しいプランを構築します。先行するドライランの結果を再利用することはありません。適用される値がレビューした値と一致する必要がある場合は、確定する直前に --dry-run を再実行してから適用します:
asc subscriptions pricing derive \
--source-subscription-id "MONTHLY_SUB_ID" \
--target-subscription-id "YEARLY_SUB_ID" \
--multiplier "10" \
--round nearest \
--confirm \
--output table
ソースとターゲットは、既存の標準 UPFRONT 価格を持つ異なるサブスクリプションである必要があります。この操作は一度限りのスナップショットであり、永続的なリンクではありません。いずれかのテリトリーが解決できない場合は変更前にフェイルクローズし、すでに一致しているターゲット価格はスキップし、適用された価格を読み戻して検証します。集中的なプレビューや段階的な 1 テリトリーの更新には --territory "SWE" を使用します。省略すると、現在のすべてのソーステリトリーを導出します。
--start-date を指定しない場合、--auto-start-date のデフォルトは true であるため、承認済みまたはライブのターゲットはデフォルトで翌日にスケジュールされます。即時に適用するには --auto-start-date=false を渡すか、ロールアウトを調整する場合は明示的な日付を使用します。
このコマンドはサブスクリプションの販売可用性を変更しません。
推奨される一括 PPP 更新: ドライラン付きで CSV をインポートする
広範な PPP ロールアウトでは、テリトリー価格を手動で 1 つずつ追加するのではなく、サブスクリプション価格のインポートコマンドを優先してください。
CSV の例:
territory,price,start_date,preserved
IND,2.99,2026-04-01,false
BRA,4.99,2026-04-01,false
MEX,4.99,2026-04-01,false
DEU,8.99,2026-04-01,false
まずドライランを実行します:
asc subscriptions pricing prices import \
--subscription-id "SUB_ID" \
--input "./ppp-prices.csv" \
--dry-run \
--output table
実際に適用します:
asc subscriptions pricing prices import \
--subscription-id "SUB_ID" \
--input "./ppp-prices.csv" \
--confirm \
--output table
注意:
--dry-runは行を検証し、価格を作成せずに価格ポイントを解決します。--continue-on-error=falseによりフェイルファストモードになります。- CSV の必須列:
territory、price - CSV の任意列:
currency_code、start_date、preserved、preserve_current_price、price_point_id price_point_idを省略した場合、CLI はその行のテリトリーと価格に一致する価格ポイントを自動的に解決します。- インポートでのテリトリー入力には、3 文字の ID、2 文字のコード、または明確に対応する一般的なテリトリー名を使用できます。
単発のサブスクリプションテリトリー変更
少数の手動オーバーライドには、正規の set コマンドを使用します。
asc subscriptions pricing prices set --subscription-id "SUB_ID" --price "2.99" --territory "IND"
asc subscriptions pricing prices set --subscription-id "SUB_ID" --tier 5 --territory "BRA"
asc subscriptions pricing prices set --subscription-id "SUB_ID" --price-point "PRICE_POINT_ID" --territory "DEU"
注意:
- 将来の変更をスケジュールするには
--start-date "YYYY-MM-DD"を追加します。 - 現在の価格関係を保持したい場合は
--preservedを追加します。 - このコマンドは初回の価格設定とその後の価格変更の両方を処理します。
生の価格ポイントは必要なときだけ検出する
Apple のローカライズされたラダーを直接確認したい場合や、正確な価格ポイント ID を固定したい場合は、価格ポイントの検索とイコライゼーションを使用します。
asc subscriptions pricing price-points list --subscription-id "SUB_ID" --territory "USA" --paginate --price "9.99"
asc subscriptions pricing price-points equalizations --price-point-id "PRICE_POINT_ID" --paginate
asc subscriptions pricing price-points adjusted-equalizations --price-point-id "PRICE_POINT_ID" --upfront-price-point-id "UPFRONT_PRICE_POINT_ID" --plan-type MONTHLY --subscription-id "SUB_ID" --paginate
Apple の標準のローカライズされたラダーには equalizations を使用します。API 4.4.1 のサブスクリプション固有の調整が必要な場合は adjusted-equalizations を使用します。新規の adjusted-equalizations リクエストでは、--upfront-price-point-id と --plan-type の両方を渡します。--subscription-id と --territory は任意のフィルターです。--next は不透明な継続 URL として扱ってください。再開された equalizations または adjusted-equalizations リクエストでは、元のオーナーの --price-point-id、フィルター、スパースフィールド、インクルード、リミットを付けずに --next のみを渡します。継続 URL にすでにそのクエリ状態が含まれているためです。--paginate と明示的な出力フラグは引き続き使用できます。
適用後の検証
変更後にサマリービューと生のリストビューを再実行します。
asc subscriptions pricing summary --subscription-id "SUB_ID" --territory "IND"
asc subscriptions pricing summary --subscription-id "SUB_ID" --territory "BRA"
asc subscriptions pricing prices list --subscription-id "SUB_ID" --resolved
asc subscriptions pricing prices list --subscription-id "SUB_ID" --paginate
バージョンメタデータが存在するようになったら、検証を有効にして asc subscriptions setup を再実行し、親、価格設定、スクリーンショット、可用性の状態を再確認できます。
サブスクリプションの提供状況
基盤となるサブスクリプション提供状況リソースは、App Store Connect API 4.4 で非推奨になりました。通常の前払いによる地域別提供状況を引き続き必要とする場合に限り、互換性のためこのコマンド群を残してください。この用途に対する一対一の代替手段は Apple から提供されていません。Monthly with 12-Month Commitment には、代わりに asc subscriptions pricing monthly-commitment enable|disable|list を使用してください。
asc subscriptions pricing availability edit --subscription-id "SUB_ID" --territories "USA,CAN,IND,BRA"
asc subscriptions pricing availability view --subscription-id "SUB_ID"
IAP PPP ワークフロー
新しい IAP:setup で親商品と価格を初期設定する
setup を使用して、商品と初期価格スケジュールを作成してください。ローカライズ用のフラグは非推奨の v1 リソースを使用するため、setup の後に API 4.4.1 の IAP バージョンを通じてローカライズを追加してください。
asc iap setup \
--app "APP_ID" \
--type NON_CONSUMABLE \
--reference-name "Pro Lifetime" \
--product-id "com.example.pro.lifetime" \
--price "9.99" \
--base-territory "USA" \
--output json
setup の JSON から .iapId を取得し、その後にバージョンとメタデータを作成します。
asc iap versions list --iap-id "IAP_ID" --state PREPARE_FOR_SUBMISSION --paginate --output json
# If and only if the list has zero matches:
asc iap versions create --iap-id "IAP_ID" --output json
# For one match, reuse .data[0].id. For more than one, stop and require an explicit IAP_VERSION_ID.
asc iap versions localizations list --version-id "IAP_VERSION_ID" --paginate --output json
# If and only if en-US is missing:
asc iap versions localizations create --version-id "IAP_VERSION_ID" --locale "en-US" --name "Pro Lifetime" --description "Unlock everything forever"
# Otherwise, if and only if the resolved en-US values differ:
asc iap versions localizations update --localization-id "IAP_LOC_ID" --name "Pro Lifetime" --description "Unlock everything forever"
# Otherwise, do nothing.
PREPARE_FOR_SUBMISSION のバージョンは既存のものを再利用してください。リストが空の場合にのみ作成し、一致するバージョンが複数返された場合は、バージョン ID を明示するまで処理を中止してください。en-US が存在しない場合にのみローカライズを作成し、値が異なる場合にのみ解決済み ID を更新します。それ以外の場合は何もしません。
注:
setupはデフォルトで、作成した IAP と価格スケジュールを検証します。バージョンのローカライズは、バージョンを指定するリストコマンドで検証してください。- 価格設定をスケジュールするには
--start-dateを使用してください。 - 階層または ID に基づく決定的な設定を行うには、
--tierまたは--price-point-idを使用してください。
変更前に現在の IAP 価格を確認する
PPP 作業では、現在の状態を把握するための主なサマリーとして asc iap pricing summary を使用してください。
asc iap pricing summary --iap-id "IAP_ID" --territory "USA"
asc iap pricing summary --iap-id "IAP_ID" --territory "IND"
このコマンドは、指定した地域の基準地域、現在の価格、推定収益、および予定されている変更を返します。
すべての地域のスナップショットを取得するには、--resolved を付けて価格スケジュールを読み取ります。スケジュール ID は schedules view の .data.id から取得してください。通常は IAP ID と同じですが、推測せずに値を読み取ってください。
asc iap pricing schedules view --iap-id "IAP_ID"
asc iap pricing schedules manual-prices --schedule-id "SCHEDULE_ID" --resolved --output table
--resolved は、地域、顧客価格、通貨、収益、価格ポイント ID、および価格が手動設定かどうかを含む行を地域ごとに 1 行返します。manual-prices --resolved と automatic-prices --resolved はどちらも、今日有効な手動価格と自動価格を組み合わせて返します。将来の日付のエントリは含まれません。--resolved を付けない場合、これらのコマンドは未加工のスケジュールレコードを返します。予定されている変更を確認する際にすべてのページを含めるには、--paginate を使用してください。
IAP の候補価格ポイントを探す
price-points list で 1 つの地域の価格階層を調べます。呼び出しごとに地域を 1 つ指定してください。--price は取得した各ページを絞り込むため、必ず --paginate と組み合わせてください。
asc iap pricing price-points list --iap-id "IAP_ID" --territory "IND" --paginate
asc iap pricing price-points list --iap-id "IAP_ID" --territory "IND" --paginate --price "299"
equalizations は、基準価格ポイントに対して Apple が提示する均等化された価格階層を確認する場合にのみ使用してください。各行には価格ポイント ID、顧客価格、収益が含まれますが、地域や通貨は含まれないため、特定の国の価格を調べる用途には使用しないでください。
asc iap pricing price-points equalizations --id "PRICE_POINT_ID" --paginate
IAP の価格スケジュールを作成または更新する
手動 PPP 更新では、価格スケジュールを直接作成してください。
asc iap pricing schedules create --iap-id "IAP_ID" --base-territory "USA" --price "4.99" --start-date "2026-04-01"
asc iap pricing schedules create --iap-id "IAP_ID" --base-territory "USA" --tier 5 --start-date "2026-04-01"
asc iap pricing schedules create --iap-id "IAP_ID" --base-territory "USA" --prices "PRICE_POINT_ID:2026-04-01"
スケジュールのエントリを意図的に作成または置換する場合は、これらを使用してください。より詳しく確認するには:
asc iap pricing schedules view --iap-id "IAP_ID"
asc iap pricing schedules manual-prices --schedule-id "SCHEDULE_ID" --paginate
asc iap pricing schedules automatic-prices --schedule-id "SCHEDULE_ID" --paginate
適用後に検証する
価格変更をスケジュールまたは適用した後、サマリーコマンドを再度使用してください。
asc iap pricing summary --iap-id "IAP_ID" --territory "USA"
asc iap pricing summary --iap-id "IAP_ID" --territory "IND"
asc iap pricing schedules manual-prices --schedule-id "SCHEDULE_ID" --resolved --output table
asc iap pricing schedules manual-prices --schedule-id "SCHEDULE_ID" --paginate
asc iap pricing schedules automatic-prices --schedule-id "SCHEDULE_ID" --paginate
将来の日付のスケジュールでは、変更したすべての地域について summary を実行し、予定されている価格ポイント ID と日付を検証してください。スケジュール全体を把握するには、ページネーションを有効にした未加工データの読み取り結果も保持してください。解決済みスナップショットには、価格が有効になるまでその価格は含まれません。
一般的な PPP 戦略パターン
基準地域から始める
- 基準となる地域を 1 つ選びます。通常は
USAです。 - まず、その地域の基準価格を設定します。
- その基準価格をもとに、各地域の価格目標を引き下げるか引き上げます。
地域別の段階的な価格設定
- 高所得市場では、基準価格に近い価格を維持します。
- 中所得市場では、適度な割引を設定します。
- 低所得市場では、より大幅な PPP 調整を行います。
スプレッドシートを使った展開
- 対象地域のリストを CSV で作成します。
- インポートをドライランします。
- 解決に失敗した項目を修正します。
- インポートを適用します。
- 重要な地域についてサマリー確認を再実行します。
メモ
- ドキュメントや自動化では、正規のコマンドを優先してください:
asc subscriptions pricing ... asc subscriptions pricing ...がサブスクリプションの価格設定でサポートされているコマンド群です。削除済みのasc subscriptions prices ...パスは使用しないでください。- ドキュメントや自動化では、正規のIAPコマンドを優先してください:
asc iap pricing ... - 現時点では、
asc subscriptions pricing prices import --dry-runがサブスクリプションの一括PPP処理で最も安全な方法です。 asc subscriptions setupとasc iap setupには、作成後の検証機能が組み込まれています。- 現時点では、PPPの変更前後を比較する単一の正式な差分コマンドはありません。現在の価格については
--resolvedの読み取り結果を、予定されている変更についてはページネーションされた生のレコードを比較してください。 - 価格変更が App Store Connect や各ストアフロントに反映されるまで、時間がかかる場合があります。