サブスクリプションゲーム内では、月額料金でユーザーに継続的な特典を提供することを可能にします。サブスクリプションはパスに似ていますが、パスの特典が無期限に付与されるのに対して、サブスクリプションの特典はユーザーが月額料金を支払うことに依存します。
Robloxのサブスクリプションには以下の特長があります:
- 自動更新: サブスクリプションは自動更新であり、一回限りの購入ではなく、現地通貨またはRobuxで価格設定できます。
- Robuxの支払い: サブスクリプションが現地通貨またはRobuxで購入された場合でも、サブスクリプション収益はRobuxで受け取ります。詳細については、サブスクリプションで稼ぐを参照してください。
- シングルティア: ゲーム内のすべてのサブスクリプションは、ユーザーによって同時に所有できます。相互排他的なサブスクリプションはサポートされていません。
- 地域価格設定: Robuxで販売されるサブスクリプションにはデフォルトで地域価格設定が有効になっており、オフにすることはできません。現地通貨で販売されるサブスクリプションには地域価格設定は適用されません。
サブスクリプションのガイドライン
サブスクリプションを作成する前に、それがRobloxの利用規約に一致し、現地の法律に従っていることを確認してください。詐欺行為、ユーザーを誤解させる偽のオファーの試み、またはコミュニティ基準に違反するゲームは削除されます。
また、サブスクリプションが以下のガイドラインに従っていることを確認する必要があります:
- 明確で識別可能なサブスクリプションオプションを提供する: サブスクリプションオプションを区別できる短く簡潔で自己説明的な名前を使用してください。ゲーム内での販売時に各オプションの価格と期間を指定してください。
- プラットフォームやデバイスごとに同じ特典を提供する: サブスクリプションがどこで購入された場合でも、ユーザーが特定のサブスクリプションプランについて同じ特典を受け取れるようにしてください。
- サブスクリプションを相互に関連付け、全体のゲームのオファリングにフィットさせる: "ブロンズ"、"シルバー"、"ゴールド"のような相互排他的な階層を提供することは現在利用できません。サブスクリプションが異なる特典のセットを表すようにしてください。
- サブスクリプションの全期間中に特典を提供する: サブスクリプションのオファーがライブになったら、記載された特典を尊重し、裏で特典を取り消さないでください。
- ゲーム内で他のプラットフォーム(モバイル、Webなど)で購入するようユーザーを誘導しない: オフプラットフォームでユーザーとコミュニケーションを取ることは自由ですが、Robloxアプリを使用して他の場所での購入を促すことは禁止されています。
- ユーザーが支払った後に追加の要件によってサブスクリプション特典を制限しない: ソーシャルメディアに投稿するなどの追加タスクをユーザーに要求して支払った特典へのアクセスを得ることは禁止されています。このガイドラインは、サブスクリプション購入として作成されたバトルパスには影響しないことが許可されています。
Robuxと現地通貨
サブスクリプションはRobuxまたは現地通貨で価格設定できます。以下の表は、2つの支払いオプションを比較したものです。
| Robux | 現地通貨 | |
|---|---|---|
| 資格 | すべてのクリエイター | IDまたは電話番号で確認されたアカウントが必要です |
| プラットフォーム | すべてのプラットフォームで利用可能 | Web、App Store、Google Playで利用可能 |
| 国 | Robloxをサポートするすべての国で利用可能 | アルゼンチン、中国、コロンビア、インド、インドネシア、 日本、ロシア、台湾、トルコ、UAE、ウクライナ、ベトナムでは未利用 |
| 価格 | 49 Robux以上の任意の金額 | $2.99、$4.99、$7.99、$9.99、または$14.99 |
| 地域価格設定 | デフォルトで有効 | 未利用 |
| 収益 | 毎月のサブスクリプション収益の70% | 初月は70%、その後の月は100% |
サブスクリプションの作成
サブスクリプションを作成するには:
- サブスクリプションの作成をクリックします。
- カバー画像をアップロードします。
- 一意の名前を入力します。同じゲーム内に同じ名前のサブスクリプションを2つ作成することはできません。
- 提供する特典を明確に説明した説明を入力します。
- 次のいずれかの支払いオプションを選択します:
- サブスクリプターがRobuxを支払う: ユーザーにRobuxで繰り返しのサブスクリプション料金を請求します。このオプションを選択すると、49 Robux以上のカスタム価格を入力する必要があります。地域価格設定はデフォルトでサブスクリプションに対して有効になっており、オフにすることはできません。
- サブスクリプターが現地通貨を支払う: ユーザーに現地通貨で繰り返しのサブスクリプション料金を請求します。このオプションを選択すると、5つの利用可能な価格帯の中からサブスクリプション価格を選択する必要があります。
- 次のいずれかの製品タイプを選択します:
- 耐久性あり: 使用または取得後も持続する永久アイテム(武器などの物理アイテム)。サブスクリプションに異なる種類の商品のバンドルが含まれている場合、耐久性のある商品が1つ以上ある場合は、製品タイプとして耐久性ありを選択します。
- 消耗品: 使用または取得後に期限切れになる一時的に再購入可能なアイテム(期限切れの一時的なブーストを与える消耗品ポーションなど)。
- 通貨: ユーザーがゲーム内のアイテムを購入するために使用できる交換手段。
- サブスクリプションの作成をクリックします。
サブスクリプションの有効化
アクティブおよび非アクティブのサブスクリプションの間で、ゲームごとに最大50個のサブスクリプションを持つことができます。
サブスクリプションを販売するには、アクティブにしたいサブスクリプションの横にある**⋮をクリックし、アクティブ化を選択します。アクティブなサブスクリプションは自動的にゲームの詳細ページのストア**タブで販売され、MarketplaceService関数を通じてゲームに追加できます。
初めてサブスクリプションを有効化する前に、ゲーム名の短縮版を確認する必要があります。この短縮ゲーム名は、ユーザーがサブスクリプションに登録したときに表示され、サブスクリプションの作成で作成したサブスクリプション名と共に表示されます。
サブスクリプションの状態
サブスクリプションには2つの状態があります:
- アクティブ: アクティブなサブスクリプションは販売可能であり、登録者は次の期間の開始時にサブスクリプションを更新できます。
- 非アクティブ: 非アクティブなサブスクリプションは販売不可です。
サブスクリプションの状態を変更するには、サブスクリプションタイルの右上隅にある**⋯をクリックし、サブスクリプションが現在非アクティブの場合はアクティブ化を選択し、アクティブな場合は販売停止**を選択します。
販売停止を選択すると、既存のサブスクリプションの更新を許可するか、現在のサブスクリプションの将来の更新をキャンセルするかのオプションが表示されます。ゲームから関連するサブスクリプション特典を恒久的に削除する予定がない場合は、既存のサブスクリプションの更新を許可することをお勧めします。
サブスクリプションの編集
編集できるフィールドは、支払い方法によって異なります。
| 編集可能なフィールド | Robuxで販売されるサブスクリプション | 現地通貨で販売されるサブスクリプション |
|---|---|---|
| カバー画像 | はい | はい |
| 名前 | いいえ | いいえ |
| 説明 | はい | はい |
| 支払い方法 | はい(現地通貨に切り替え可) | はい(Robuxに切り替え可) |
| 価格 | はい(60日ごとに1回) | いいえ |
| 製品タイプ | いいえ | いいえ |
| アクティブ状態 | はい | はい |
支払い方法を変更すると、新しいサブスクリプションにのみ影響します。既存の登録者は元の支払い方法に残り、切り替えるにはキャンセルして再登録する必要があります。
サブスクリプションの削除
サブスクリプションを削除するには、削除したいサブスクリプションの横にある**⋮**をクリックし、削除を選択します。
アクティブなサブスクリプションを削除すると、アクティブな登録者に対して全額返金され、あなたには0 Robuxが返ってきます。ほとんどの状況では、サブスクリプションを削除したい場合は、まず販売を停止し、すべての更新をキャンセルするオプションを選択し、現在の期間が終了するのを待つことをお勧めします。
サブスクリプションを削除するには、確認のためにサブスクリプションIDの最後の4桁が必要です。
ゲームにサブスクリプションを統合する
ユーザーのサブスクリプション状態を確認する
以下のコードサンプルは、ゲーム内でのサブスクリプション検出を実装しています:
-- このコードはサーバーで実行します
local MarketplaceService = game:GetService("MarketplaceService")
local Players = game:GetService("Players")
local SUBSCRIPTION_ID = "EXP-11111111" -- サブスクリプションIDに置き換えてください
local function grantAward(player: Player)
-- サブスクリプションに関連する賞をここで付与します
end
local function revokeAwardIfGranted(player: Player)
-- このメソッドは、サブスクリプションを持たないすべてのプレイヤーに対して呼び出されます
-- データストアにサブスクリプションを保存するコードや、
-- '取り消す'必要がある特典を提供する場合にこのメソッドを使用して処理します
end
local function checkSubStatus(player)
local success, response = pcall(function()
return MarketplaceService:GetUserSubscriptionStatusAsync(player, SUBSCRIPTION_ID)
end)
if not success then
warn(`プレイヤーがサブスクリプションを持っているか確認中にエラーが発生しました: {response}`)
return
end
if response.IsSubscribed then
grantAward(player)
else
revokeAwardIfGranted(player)
end
end
local function onUserSubscriptionStatusChanged(player: Player, subscriptionId: string)
if subscriptionId == SUBSCRIPTION_ID then
checkSubStatus(player)
end
end
Players.PlayerAdded:Connect(checkSubStatus)
Players.UserSubscriptionStatusChanged:Connect(onUserSubscriptionStatusChanged)
パスをサブスクリプションに置き換える
ゲーム内でのサブスクリプション展開の一つのオプションは、既存のパスをサブスクリプションに置き換えることです。新しい機能や特典を追加せずにサブスクリプションを迅速に実装したい場合に最適なオプションです。
パスをサブスクリプションに置き換える際に考慮すべき点は以下の通りです:
- パスの既存の保持者は、彼らが支払った特典を引き続き受け取るべきです。
- 新しいユーザーがサブスクリプションを購入できるように、パスの販売を停止する必要があります。
- サブスクリプションは取り消すことができるため、従来のパスがデータストアに特典を保存していた場合、これらの特典を「取り消す」必要があります。この考慮はすべてのパスの実装に適用されるわけではなく、より複雑なものに適用されるかもしれません。
以下のコードサンプルは、パスをサブスクリプションに置き換えます:
-- このコードはサーバーで実行します
local MarketplaceService = game:GetService("MarketplaceService")
local Players = game:GetService("Players")
local LEGACY_GAME_PASS_ID = 1234 -- サブスクリプションに置き換えるパスのIDに置き換えてください
local SUBSCRIPTION_ID = "EXP-11111111" -- サブスクリプションIDに置き換えてください
local function awardBenefit(player: Player)
-- サブスクリプションをここで授与します
end
local function revokeBenefitIfGranted(player: Player)
-- このメソッドは、サブスクリプションを持たないすべてのプレイヤーに対して呼び出されます
-- データストアにサブスクリプションを保存するコードや、
-- '取り消す'必要がある特典を提供する場合にこのメソッドを使用して処理します
end
local function checkSubscriptionStatus(player: Player)
local success, result = pcall(function()
return MarketplaceService:GetUserSubscriptionStatusAsync(player, SUBSCRIPTION_ID)
end)
if not success then
print(`サブスクリプションの状態取得中にエラーが発生しました: {result}`)
return
end
if result.IsSubscribed then
awardBenefit(player)
else
revokeBenefitIfGranted(player)
end
end
local function onPlayerAdded(player: Player)
local success, result = pcall(function()
return MarketplaceService:UserOwnsGamePassAsync(player.UserId, LEGACY_GAME_PASS_ID)
end)
if not success then
print(`パスの状態取得中にエラーが発生しました: {result}`)
return
end
if result then
-- プレイヤーがレガシーパスを購入している場合、サブスクリプションの状態を調べる必要はありません
-- 彼らは生涯にわたって特典が付与されます
awardBenefit(player)
return
end
checkSubscriptionStatus(player)
end
local function onUserSubscriptionStatusChanged(player: Player, subscriptionId: string)
if subscriptionId == SUBSCRIPTION_ID then
checkSubscriptionStatus(player)
end
end
local function onPromptGamePassPurchaseFinished(player: Player, purchasedPassID: number, purchaseSuccess: boolean)
if purchaseSuccess and purchasedPassID == LEGACY_GAME_PASS_ID then
awardBenefit(player)
end
end
Players.PlayerAdded:Connect(onPlayerAdded)
Players.UserSubscriptionStatusChanged:Connect(onUserSubscriptionStatusChanged)
-- パスがまだ販売されている場合に備えて、パスの購入を監視し続けます
MarketplaceService.PromptGamePassPurchaseFinished:Connect(onPromptGamePassPurchaseFinished)
サブスクリプション購入の促進
ユーザーはゲームの詳細ページのストアタブから直接サブスクリプションを購入できますが、ゲーム内でもサブスクリプションを購入する方法を追加するべきです。
サブスクリプション購入を促すと、プレイヤーが既にサブスクリプションを所有している場合にUserSubscriptionStatusChangedが発火します。これは、プレイヤーがすでにゲーム内にいる間にゲームの詳細ページのストアタブからサブスクリプションを購入するシナリオをキャッチするのに役立ちます。
ユーザーがサブスクリプションを購入するプロンプトを表示することはクライアントから行えますが、ユーザーがすでにサブスクリプションを持っているかどうかの確認はサーバーから行う必要があります。
以下のコードサンプルは、ユーザーがサブスクリプションのステータスをリクエストするためにクライアントが使用できるRemoteFunctionを作成します:
-- このコードはサーバーで実行する必要があります
local ReplicatedStorage = game:GetService("ReplicatedStorage")
-- クライアントがサブスクリプションのステータスをリクエストするために使用できるRemoteFunctionを作成します
local getSubscriptionStatusRemote = Instance.new("RemoteFunction")
getSubscriptionStatusRemote.Name = "GetSubscriptionStatus"
getSubscriptionStatusRemote.Parent = ReplicatedStorage
getSubscriptionStatusRemote.OnServerInvoke = function(player: Player, subscriptionId: string)
assert(typeof(subscriptionId) == "string")
return MarketplaceService:GetUserSubscriptionStatusAsync(player, subscriptionId)
end
-- このコードはクライアントで実行する必要があります
local MarketplaceService = game:GetService("MarketplaceService")
local Players = game:GetService("Players")
local SUBSCRIPTION_ID = "EXP-11111111" -- サブスクリプションIDに置き換えてください
local getSubscriptionStatusRemote = ReplicatedStorage:WaitForChild("GetSubscriptionStatus")
local purchaseSubscriptionButton = script.Parent.PromptPurchaseSubscription -- あなたのボタンに置き換えてください
local function playerHasSubscription()
-- あなたのサブスクリプションがパスを置き換えている場合は、ここでパスを持っているかどうかも確認する必要があります
local success, result = pcall(function()
return getSubscriptionStatusRemote:InvokeServer(SUBSCRIPTION_ID)
end)
if not success then
print(`サブスクリプションの状態取得中にエラーが発生しました: {result}`)
return
end
return result.IsSubscribed
end
-- プレイヤーがすでにサブスクリプションを持っている場合はボタンを隠す
local function hideButtonIfPlayerHasSubscription()
if playerHasSubscription() then
purchaseSubscriptionButton.Visible = false
end
end
local function onPromptSubscriptionPurchaseFinished(player: Player, subscriptionId: string, didTryPurchasing: boolean)
if didTryPurchasing then
-- サブスクリプションが登録されるまでには時間がかかることがあるため、購入が完了したかどうかを10秒後に確認します
-- そして、完了していればボタンを隠します
task.delay(10, hideButtonIfPlayerHasSubscription)
end
end
-- プレイヤーがすでにサブスクリプションを持っている場合は、ボタンを全く表示したくない
hideButtonIfPlayerHasSubscription()
purchaseSubscriptionButton.Activated:Connect(function()
MarketplaceService:PromptSubscriptionPurchase(Players.LocalPlayer, SUBSCRIPTION_ID)
-- プレイヤーがすでにサブスクリプションを持っている場合はボタンを隠します
hideButtonIfPlayerHasSubscription()
end)
MarketplaceService.PromptSubscriptionPurchaseFinished:Connect(onPromptSubscriptionPurchaseFinished)
その他の関連関数
MarketplaceServiceには、次の関連関数が用意されています:
- GetSubscriptionProductInfoAsync : サブスクリプションの製品情報を返します。サブスクリプションがRobuxまたは現地通貨で価格設定されているかを含みます。
- GetUserSubscriptionPaymentHistoryAsync : ユーザーのサブスクリプションの支払い履歴を返します。
- GetUserSubscriptionStatusAsync : ユーザーのサブスクリプションの状態を返します。
サブスクリプションで稼ぐ
現地通貨で価格設定されたサブスクリプションに関しては、基本プラットフォームの価格に応じてUS $0.01から1 Robuxの率でRobuxを稼ぎます。あなたは初月にサブスクリプションの価値の70%を得て、それ以降の2ヶ月目から100%を得ます。この収益の分配は、すべてのプラットフォームで一貫しています。
例えば、月額サブスクリプションがUSD $5の場合:
- 初月: 350 Robuxを稼ぎます(500 * 0.7 = 350)
- 2ヶ月目以降: 500 Robuxの全額を得ます(500 * 1.0 = 500)
Robuxで価格設定されたサブスクリプションにについては、毎月サブスクリプションの価値の70%を得ます。この収益の分配は、すべてのプラットフォームで一貫しています。
例えば、月額サブスクリプションが500 Robuxの場合:
- 初月: 350 Robuxを稼ぎます(500 * 0.7 = 350)
- 2ヶ月目以降: 350 Robuxを稼ぎ続けます(500 * 0.7 = 350)
現地通貨のサブスクリプションからの収益は、30日の保留期間の対象となり、サブスクリプションの全期間が提供された後にRobux残高に追加されます。
Robuxのサブスクリプションからの収益は、パスおよび開発者向け製品と同じ保留期間に従い、約5日間です。
返金
現地通貨でのサブスクリプションについて、ユーザーが30日の保留期間内に銀行やアプリストアを通じて返金をリクエストした場合、保留はキャンセルされ、その取引の支払いを受け取ることはできません。
保留ウィンドウ外で受け取った返金は、返金された取引の支払い額がRobux残高から差し引かれます。ゲームがグループによって所有されている場合、グループの残高が差し引くべき金額未満である場合は、その残りがグループオーナーのRobux残高から差し引かれます。
ユーザーがアクティブなサブスクリプションをキャンセルしたり更新しなかったりしても、自動で返金されることはありません。ユーザーは手動で返金をリクエストする必要があり、そのリクエストはケースバイケースで処理されます。ユーザーサブスクリプションの返金プロセスの詳細については、ヘルプセンターをご確認ください。
収益
サブスクリプションの収益は、Robux残高 ⟩ マイトランザクションで確認できます。
サブスクリプションおよびグループサブスクリプションの収益は、Incoming Robuxとして表示され、返金はOutgoing RobuxとしてPayout Reversalの下にグループ化されて表示されます。サブスクリプションとグループサブスクリプションのサブページでは、それぞれのカテゴリーに対する追加情報が提供されています。

特定のユーザーに対する返金情報を確認するには、GetUserSubscriptionPaymentHistoryAsyncを使用します。
サブスクリプション分析
サブスクリプション分析は、個々のサブスクリプションの成功を評価し、トレンドを特定し、将来の収益を予測するのに役立ちます。サブスクリプションは、初めてアクティブ化された後、分析ページに追加されます。非アクティブ化または削除された場合も削除されることはありません。クリエイターダッシュボードから即時分析にアクセスするか、Webhookを使用してリアルタイムでサブスクリプションの更新をキャッチできます。
クリエイターダッシュボードから
クリエイターダッシュボードでサブスクリプション分析にアクセスするには:
- クリエイターダッシュボードのクリエイションページに移動し、ゲームを選択します。
- マネタイズ ⟩ サブスクリプションに進みます。
- 分析タブを選択します。
サブスクリプション分析は以下の指標を追跡します:
- サブスクリプション: ゲーム内のアクティブなサブスクリプションの総数。
- 推定収益: 手数料を差し引いた後のゲームから得られた純収益。返金情報は含まれません。
- 登録者の内訳: 異なるタイプの登録者。
- 新規: 初めての登録者によるサブスクリプションの購入数。
- 更新: 前回の期間に購入された更新サブスクリプションの数。
- 復活: 以前にキャンセルされたユーザーによって購入された新しいサブスクリプションの数。
- キャンセル: 更新されなかったサブスクリプションの数。この数には、ユーザーによるキャンセル、クリエイターによるサブスクリプションの非アクティブ化など、すべてのキャンセルが含まれます。
- キャンセルは返金とは異なります。キャンセルされたサブスクリプションはもはや更新されず、請求サイクルの残りの期間については全額支払われていますが、返金は支払われたサブスクリプションの金額をユーザーに返します。
- プラットフォーム別サブスクリプション: 各プラットフォームで購入されたサブスクリプションの数。
- プラットフォーム収益: 各プラットフォームで購入されたサブスクリプションによって得られた純収益。
この情報はトレンドタブの下の期間に基づくチャートとして表示され、履歴タブの下に提供された総サブスクリプションの包括的なリストとして表示されます。

Webhookを通じて
Cloud APIのWebhook機能には、キャンセル、購入、返金、更新の4つのサブスクリプションイベントのトリガーが含まれています。これらの通知は即時に発火するため、リアルタイムで反応したり、自分自身のカスタム分析を作成したりすることができます。Webhookの設定方法については、Webhook通知を参照してください。