エクスペリエンス設定を使用すると、サーバーを再起動せずにリアルタイムでゲーム内の値を更新できます:
- 新しいオンボーディングダンジョンの有効化や無効化など、機能をオンまたはオフにします。
- ボスの健康、経験値の獲得、アイテムの価格など、ゲーム内の値を調整します。
- 真夜中に始まるハロウィンイベントなど、時間制限のあるコンテンツを開始します。
- 新しいプレイヤーに追加のアーマーを与えるなど、異なるプレイヤーに異なる値を提供します。
設定はキーと値の形式を取ります。コード内でハードコーディングされた定数を使用する代わりに、キーを使用して値(文字列、数値、ブール値、またはJSONオブジェクト)を取得し、その値をいつでも更新できます。新しいバージョンのエクスペリエンスを公開する必要はありません。必要なコードの変更は最小限です:
local ConfigService = game:GetService("ConfigService")
local configSnapshot = ConfigService:GetConfigAsync()
local myValue = configSnapshot:GetValue("my_key_name")同時に最大1,000のアクティブな設定を持つことができ、Creator HubまたはRoblox Studioで管理できます。

設定の作成と編集
あなたのエクスペリエンスのCreator Hub 設定ページで、設定を作成をクリックします。
キー、タイプ、値を指定し、オプションで設定の目的を後で識別するための説明を追加します。サポートされているタイプは文字列、数値、ブール値、JSONオブジェクトです。次へをクリックします。
(オプション)ターゲティング条件と値を追加します。条件を使用すると、特定の基準に一致する(または一致しない)ユーザーに設定値を適用できます。たとえば、あなたのゲームを一度もプレイしたことがないユーザーやポルトガル語を話すユーザーに適用できます。詳細については、特定のプレイヤーに設定をターゲットを参照してください。
生成されたコードスニペットをあなたのエクスペリエンスのサーバースクリプトにコピーします。おそらくServerScriptServiceにあります。「グローバル」設定でプレイヤーによって異ならない場合、コードは次のようになります:
local ConfigService = game:GetService("ConfigService")local configSnapshot = ConfigService:GetConfigAsync()local MY_KEY = "my_key" -- オプション、設定キーを定数として保存local myValue = configSnapshot:GetValue(MY_KEY)local ConfigService = game:GetService("ConfigService")local Players = game:GetService("Players")local MY_KEY = "my_key" -- オプション、設定キーを定数として保存local function onPlayerAdded(player)local playerConfigSnapshot = ConfigService:GetConfigForPlayerAsync(player)local myValue = playerConfigSnapshot:GetValue(MY_KEY)endPlayers.PlayerAdded:Connect(onPlayerAdded)値を他の変数のように使用します。設定は何もしませんので、コード内で使用しない限り機能しません。
スクリプト内で設定を操作する方法についての詳細は、コードに設定を追加を参照してください。
設定を編集することは、作成することと何ら変わりません。編集ボタンをクリックして、値と説明を必要に応じて更新します。
制限
設定値には、タイプごとに以下の制限があります。
| タイプ | 最大サイズ |
|---|---|
| 文字列 | 100,000文字 |
| 数値 | ±1.7976931348623157e+308、±2^53の正確な整数表現 |
| ブール値 | 該当なし |
| JSON | 100,000文字 |
設定を公開
設定を作成すると、それはステージング状態に移行し、公開前にテストできます。ステージングされた変更は、スタジオのプレイセッションであなたとあなたのチームに利用可能ですが、ライブエクスペリエンスのプレイヤーには利用できません。Creator Hubの設定ページには、すべてのアクティブおよびステージングされた変更が表示されます。

- ステージングされた変更をテストした後、今すぐ公開をクリックして、ほぼ瞬時にすべてのプレイヤーに公開します(約15秒から1分の間)。より長い、徐々に展開する期間を好む場合は、15分で公開を選択することもできます。場合によっては、クライアントが公開後に変更を反映するまでに数分かかることがあります。
- (推奨)更新した内容を示す説明的な公開メッセージを追加します。このメッセージは履歴ページに表示され、後で変更の目的を特定するのに役立ちます。
特定のプレイヤーに設定をターゲット
デフォルトでは、設定はすべての人に同じ値を提供します。条件付き設定を使用すると、プレイヤーの属性(国、在籍期間、言語、支払い状況など)に基づいて異なるプレイヤーに異なる値を提供できます。
条件付き設定には、プレイヤーが受け取る値を決定する3つの部分があります:
- 条件ルールは、誰が一致するかを定義します。各ルールは「最初の30日間のアクティブな支払い者」のような論理式で、プレイヤーの属性を評価します。
- ルールの順序は、プレイヤーが複数のルールに一致する場合にどのように選択するかを定義します。Robloxはルールを上から下に評価し、最初に一致したブランチを適用します。ルールはグローバルに順序付けられ、個々のキーに条件付き値を追加する順序に関係なく適用されます。
- 条件付き値は、一致したプレイヤーが受け取るものを定義します。各条件に対して、値を添付します。プレイヤーがその条件内のルールに一致する場合、関連する値を受け取ります。そうでない場合、設定のデフォルト値を受け取ります。
サポートされている属性
条件付き設定は、以下の属性をサポートしています。これらの属性は、分析ダッシュボードの同等のフィルターおよび内訳と同じ定義を共有します。
| 属性 | 説明 |
|---|---|
| 国 | プレイヤーの地理的位置。 |
| 言語 | プレイヤーの言語設定。 |
| 新規 vs 既存 | プレイヤーがあなたのエクスペリエンスを初めてプレイしているか、以前にプレイしたことがあるか。 |
| ソース | プレイヤーがあなたのエクスペリエンスを見つけた方法(ホームページの推薦、検索、スポンサー広告など)。 |
| ユーザーが最初にプレイした時 | プレイヤーが最初にあなたのエクスペリエンスをプレイしたのがどれくらい前か(0-30日前または31-90日前など)。日次で計算されます。 |
| エクスペリエンス内のアクティブな支払い者の状態 | あなたのエクスペリエンス内でのプレイヤーの支払い活動で、異なる支払いユーザーのセグメントをターゲットにできます。日次で計算されます。 |
| エクスペリエンス内の活動状態 | プレイヤーが最近あなたのエクスペリエンスをプレイしたかどうかで、新規、アクティブ、休止、再活性化したプレイヤーを異なる扱いにできます。日次で計算されます。 |
| ユーザーエンゲージメント | プレイヤーが毎週あなたのエクスペリエンスをどれくらいプレイするかで、最もエンゲージメントの高いプレイヤーとカジュアルなプレイヤーを分けることができます。日次で計算されます。 |
| プラットフォーム支出者の状態 | プレイヤーがRobloxプラットフォーム全体でアクティブな支出者であるかどうか。日次で計算されます。 |
| プラットフォーム活動状態 | プレイヤーがあなたのエクスペリエンスだけでなく、Robloxのどこかで最近プレイしたかどうか。日次で計算されます。 |
条件付き値の作成
条件は、設定を作成または編集する際に追加します。ターゲティングを追加ステップで、条件を追加します:
- 既存の条件を選択するか、新しい条件を作成をクリックします。
- 1つ以上のルールを追加します。
- 一致したプレイヤーが受け取る値を設定します。
たとえば、過去30日以内にプレイを開始したトップアクティブ支払い者に対して、より難しい体験を提供するために、dynamicBossHealthの値を増加させることができます。

コード内でターゲット値にアクセス
ターゲット値を取得するには、ConfigService:GetConfigForPlayerAsync()を使用します。これにより、個々のプレイヤーに対するルールと順序が評価されます。ConfigService:GetConfigAsync()は、特定のプレイヤーに特化していないため、ターゲティングを適用しません。詳細については、コードに設定を追加を参照してください。
ベストプラクティスと制限
- すべての条件付き値は、設定のデフォルト値のデータ型(ブール値、文字列、数値、またはJSON)と一致する必要があります。
- ゲームごとに最大100の条件を持つことができます。
- 各設定キーは最大20の条件をサポートします。
- 公開前にルールの順序を確認してください。ルールはグローバルに順序付けられるため、評価順序が正しく優先されていることを確認してください。順序を確認するには、条件タブをクリックします。
Studioでの設定の作成と編集
好みに応じて、Roblox Studioで設定を作成、編集、ステージング、公開できます。ファイル > 設定を開くをクリックしてウィジェットを開きます。Studioインターフェースは、新しい値のステージングとテストに特に便利です。

別のエクスペリエンスに設定を公開
Studioでは、設定を別のエクスペリエンスに公開でき、そのエクスペリエンスの設定を完全に上書きします。これは、ステージングまたは開発エクスペリエンスからライブエクスペリエンスに設定を同期するのに特に便利です。
Roblox Studioで、上部メニューからファイル > 設定を開くを選択します。
設定ウィジェットの公開済みタブで、⋮アイコンをクリックし、別名で公開を選択します。

表示されるダイアログで、編集権限のあるグループのリストからターゲットエクスペリエンスを見つけて選択します。

履歴を表示し、設定を復元
設定ページで、履歴をクリックして過去の更新を確認します。各更新には、変更の時間と日付、変更を行った人、公開メッセージが含まれています。

- 各行を展開して、キー、変更前の値、変更後の値を確認します。
- キーを検索ボックスを使用してキーを検索します—説明や値ではなく、キーのみを検索します。
履歴ページでは、設定を以前の状態に復元することもできます:
- 変更の隣にある復元をクリックして「前」の値をステージングします。設定を復元すると、既存のステージングされた変更は破棄されることに注意してください。
- 設定ページに戻り、設定を公開します。
コードに設定を追加
設定を操作するための主要なクラスはConfigServiceで、あなたのエクスペリエンスの最新のキーと値を取得します。ConfigServiceはサーバースクリプトでのみ利用可能です。クライアントスクリプトからそのメソッドを呼び出そうとするとエラーが発生します。
設定を操作する最初のステップは、ConfigSnapshotを取得することです。これは、現在の時点でのすべての設定の最新の値です。スナップショットを取得する方法は2つあります:
ConfigService:GetConfigAsync()は、エクスペリエンス内のすべてのプレイヤーに適用したいグローバル設定用です:
local ConfigService = game:GetService("ConfigService")local configSnapshot = ConfigService:GetConfigAsync()local bossHealth = configSnapshot:GetValue("bossHealth")ConfigService:GetConfigForPlayerAsync()は、プレイヤー固有の設定を取得し、異なるプレイヤーが異なる値を取得できるようにします。これは条件付き設定や実験に使用します。
local ConfigService = game:GetService("ConfigService")local Players = game:GetService("Players")local function onPlayerAdded(player)local playerConfigSnapshot = ConfigService:GetConfigForPlayerAsync(player)local bossHealth = playerConfigSnapshot:GetValue("bossHealth")endPlayers.PlayerAdded:Connect(onPlayerAdded)
いずれの場合も、キーが存在しない場合、ConfigSnapshot:GetValue()はnilを返します。
オートコンプリート
設定はスクリプトエディタのオートコンプリートに統合されています。ConfigSnapshot:GetValue()を呼び出すと、エディタは設定キー名を提案し、変数名にカーソルを合わせると各設定のタイプを表示します。
スクリプトが--!strictモードを使用している場合、リンターは型を検出して検証できます。
オートコンプリートは、複雑なネストされたJSONタイプを使用する設定でも機能します。
スナップショットの更新
ConfigSnapshotsは、スナップショットを要求したときの設定の状態を表す時点です。ゲームプレイを妨げないように、設定の更新は自動的にスナップショットに伝播しません。たとえば、競技型シューティングゲームでは、ラウンド間に新しい設定値をのみ適用したい場合があります。そうすることで、試合中に武器の属性が変動しないようにします。
最新の値を手動で取得するには、ConfigSnapshot:Refresh()メソッドを使用します。オプションで、ConfigSnapshot.UpdateAvailableイベントに関数を接続して自動的に更新を行うこともできます:
configSnapshot.UpdateAvailable:Connect(function()
configSnapshot:Refresh()
end)スナップショットを更新した後、ConfigSnapshot:GetValueChangedSignal()を使用して特定のキーの変更をリッスンし、エクスペリエンスのコードを更新できます:
configSnapshot:GetValueChangedSignal("bossHealth"):Connect(function(newHealthValue)
spawnNewBoss(newHealthValue)
end)エラーハンドリング
設定の読み込みに失敗し、以前に読み込まれたことがない場合、ConfigService:GetConfigAsync()はエラーをスローします。
ConfigServiceが以前に読み込まれた後にRobloxサーバーとの接続を失った場合、ConfigService:GetConfigAsync()は最新の利用可能な値を持つスナップショットを返します。これらのスナップショットは再接続を試み、新しい更新を正常に読み込むとUpdateAvailableイベントを発火します。
これらの稀な状況をどのように処理するかはあなた次第です。呼び出しをpcall()でラップし、コード内にフォールバック値を持たせたり、プレイヤーにエラーを表示してスナップショットが再接続するのを待ったり、他の解決策を講じたりできます。
設定をテスト
ConfigServiceには、Studioおよびライブサーバーの両方で設定変更を一時的にテストするための組み込みメソッドがあります。これにより、全体のエクスペリエンスに影響を与えることなくテストできます。
ローカルテスト値を設定するには、サーバースクリプトまたは開発者コンソールを通じてConfigService:SetTestingValue()を呼び出します。テスト値の変更は、設定の更新とConfigSnapshot.UpdateAvailable信号をトリガーします。プロダクションの更新と同様に、テスト値を取得するには既存のスナップショットを更新する必要があります:
local ConfigService = game:GetService("ConfigService")
ConfigService:SetTestingValue("bossHealth", 200)
local configSnapshot = ConfigService:GetConfigAsync()
local bossHealth = configSnapshot:GetValue("bossHealth") -- 現在200!テスト変更は、現在のサーバーのライフタイムに適用され、他のサーバーには伝播しません。Studioでは、現在のプレイセッションに適用され、ライブサーバーには影響を与えません。手動でテスト変更をクリアするには、ConfigService:ClearTestingValue()を使用します。