Robloxは、各ゲーム、グループ、またはアプリの各ユーザーに対して1つの有効なユーザーIDを公開します。ユーザーのそのドメインにおける履歴に応じて、彼らの有効なユーザーIDはグローバルユーザーIDまたはスコープ付きユーザーIDのいずれかです。このページでは、有効なユーザーIDがどのように機能するか、そしてゲームコードで User タイプをどのように使用するかを説明します。
ユーザー識別において中心となる概念は次のとおりです:
| 概念 | 説明 |
|---|---|
| ユーザー | Roblox上の永続的なアカウント。 |
| プレイヤー | 実行中のゲームのデータモデル内のユーザーの表現(Playersを参照)。 |
| User データ型 | ユーザーの有効なユーザーIDとそのドメインコンテキストを持つデータ型。これはゲームコード内でユーザーを参照するための標準識別子です。 |
| グローバルユーザーID | Robloxが各アカウントに割り当てるプラットフォームレベルのユーザーID。Roblox全体で一意です。 |
| スコープ付きユーザーID | 特定のドメイン内で割り当てられたユーザーID。ユーザーのスコープ付きユーザーIDは、各ゲーム、グループ、またはアプリで異なります。 |
| 有効なユーザーID | Robloxがドメイン内のユーザーに公開する単一のユーザーIDです。ドメインを参照してください。 |
| プレロールアウトユーザー | スコープ付きユーザーIDの展開前にドメインに最初に関与したユーザー。そのドメインでは、彼らの有効なユーザーIDはグローバルユーザーIDのままです。 |
| ポストロールアウトユーザー | スコープ付きユーザーIDの展開後にドメインに最初に関与したユーザー。そのドメインでは、彼らの有効なユーザーIDはスコープ付きユーザーIDです。 |
有効なユーザーIDとドメイン
各ユーザーは特定のゲーム、グループ、またはアプリ内に1つの有効なユーザーIDを持っています。Robloxは、そのドメイン内で同じユーザーに対して別々のグローバルおよびスコープ付きユーザーIDを公開しません:
- プレロールアウトユーザーは、グローバルユーザーIDを有効なユーザーIDとして持っています。
- ポストロールアウトユーザーは、スコープ付きユーザーIDを有効なユーザーIDとして持っています。そのIDはそのドメイン内でのみ意味があります。
ゲームコード内では、Player.UserId と Player.User.Id はどちらもこの有効なユーザーIDを返し、常に同じ数値を持っています(Player.User.Id は Player.UserId に等しいため、コードに分岐ロジックを必要としません)。
Robloxは、ユーザーの識別を3つのタイプのドメインにスコープします:
| ドメイン | スコープ対象 | 例 |
|---|---|---|
| エクスペリエンス (Enum.DomainType.EXPERIENCE) | 特定のエクスペリエンス | あなたのエクスペリエンス内のプレイヤーのID |
| グループ | 特定のRobloxグループ(コミュニティ) | あなたのグループ内のメンバーのID |
| OAuthアプリ (Enum.DomainType.OAUTH) | 特定のOAuthアプリケーション | あなたの外部ツール内のユーザーのID |
有効なユーザーIDの動作
プレイヤーがあなたのゲームに参加すると、彼らはそのゲームに対して1つの有効なユーザーIDを持ちます。ポストロールアウトユーザーの有効なユーザーIDは、そのゲームに固有のスコープ付きユーザーIDです。彼らは、他のゲーム、グループ、またはアプリでもポストロールアウトユーザーである場合、異なるスコープ付きユーザーIDを受け取ります。これは次のことを意味します:
- 有効なユーザーIDは整数であり、グローバルまたはスコープ付きのいずれかです。
- 有効なユーザーIDは同じドメイン内のセッション間で安定しています。
- スコープ付きユーザーIDは、既存のグローバルユーザーIDと衝突しません。
- 同じ数値が異なるドメインで異なるユーザーに対して現れることがあります。ユニークなキーは、ドメイン(ドメインタイプとドメインID)の組み合わせと有効なユーザーIDです。
例シナリオ
以下の例は、異なるゲームが同じユーザーをどのように参照するかを示しています:
| シナリオ | ユーザーコンテキスト | ゲームで見られる有効なユーザーID |
|---|---|---|
| ユーザーがゲームAに接続 | プレロールアウトユーザー | 123(グローバルユーザーID、変更なし) |
| ユーザーがゲームBに接続 | ポストロールアウトユーザー | 500789(ゲームBのスコープ付きユーザーID) |
| ユーザーがゲームCに接続 | ポストロールアウトユーザー | 302441(ゲームCのスコープ付きユーザーID) |
プレロールアウトユーザー
プレイヤーがあなたのゲームでプレロールアウトユーザーである場合、その有効なユーザーIDはそのゲーム内でのグローバルユーザーIDのままです。Player.UserId と Player.User.Id はそのグローバルユーザーIDを返します。Robloxは、そのゲーム内でプレイヤーに対して2つ目のユーザーIDを公開しません。これにより、既存のデータストアキー、リーダーボード、およびインベントリが変更なしで機能し続けます。
グループドメイン
各Robloxグループは独自のドメインです。ユーザーは、ゲームやOAuthアプリ内の有効なユーザーIDとは別に、グループ内に1つの有効なユーザーIDを持っています:
- ゲーム内グループチェックは変更されません — Player のエンジンメソッド(Player:IsInGroupAsync()、Player:GetRankInGroupAsync()、Player:GetRoleInGroupAsync()、および GroupService:PromptJoinAsync())は、ユーザーIDを公開することなく内部でアイデンティティを解決します。
- オープンクラウドグループAPIはグループのドメインを使用します — これは、グループメンバーシップや参加リクエストをリストまたは管理するエンドポイントに適用されます。
ユーザータイプの操作
User は、ゲームコード内でユーザーを識別する標準的な方法です。User 値は、有効なユーザーIDとともにドメインタイプおよびドメインIDを持つため、アイデンティティコンテキストは常に識別子と共に移動します。APIの詳細については、User リファレンスを参照してください。
プレイヤーからユーザーを取得する
User を取得する主な方法は、接続された Player から Player.User を介して取得することです:
local Players = game:GetService("Players")
Players.PlayerAdded:Connect(function(player)
local user = player.User
print("有効なユーザーID:", user.Id) -- 常に player.UserId と一致
print("ドメインタイプ:", user.DomainType)
print("ドメインID:", user.DomainId)
end)IDからユーザーを構築する
現在のゲーム内で既知の有効なユーザーIDから User を作成するには、User.fromId() を使用します:
local user = User.fromId(knownUserId)エンジンAPIでのユーザーの使用
ユーザーIDパラメータを受け入れるエンジンAPIは、User 値も直接受け入れます。User の使用が推奨されます:
-- 両方の形式が機能します:
BadgeService:AwardBadge(player.User, badgeId) -- 推奨
BadgeService:AwardBadge(player.UserId, badgeId)-- 両方の形式が機能します:
local target = Players:GetPlayerByUserId(player.User) -- 推奨
local target = Players:GetPlayerByUserId(someUserId)数値のユーザーIDがユーザーIDを受け入れるエンジンAPIに渡されると、それは内部で自動的に User にラップされます。
ユーザーIDを返すエンジンAPI
数値のユーザーIDを返すエンジンAPIは、ユーザーの有効なユーザーIDを返します:
- プレロールアウトユーザー — APIはユーザーのグローバルユーザーIDを返します。
- ポストロールアウトユーザー — APIはユーザーのスコープ付きユーザーIDを返します。
Player.UserId、Player.User.Id、および他のエンジンAPIは、あなたのゲーム内のユーザーに対してこの同じ有効なユーザーIDを返すため、数値のユーザーIDフィールドを読み取る既存のコードは分岐ロジックなしで機能し続けます。
オープンクラウドのリクエストとレスポンスは、ターゲットドメインのために同じ有効なユーザーIDを使用します。同じドメイン内で同じユーザーに対して2つ目のユーザーIDを公開しません。
ユーザーアイデンティティの保存
数値の有効なユーザーIDは、単一のドメイン内でユーザーを識別するためにのみ使用してください。1つのゲーム内のデータストアキーは、user.Id を直接使用できます:
local key = ("player_%d"):format(player.User.Id)
PlayerDataStore:SetAsync(key, data)別のドメインが保存されたアイデンティティを読み取るとき、たとえばユーザーをモデレートするOAuthアプリでは、ToString() からの文字列を保存します。この文字列は、有効なユーザーIDとともにドメインコンテキストをエンコードします。整数だけを使用すると、同じ数が別のドメインで異なるユーザーを識別する場合に、誤ったユーザーにアクションが適用される可能性があります。
local encoded = player.User:ToString()
SomeDataStore:SetAsync("support_ticket_user", encoded)
-- 後で、文字列から復元
local user = User.fromString(encoded)シリアル化の保証に関する詳細については、User リファレンスを参照してください。
ベストプラクティス
- 新しいコードでは Player.User を標準識別子として使用してください。
- 数値の有効なユーザーIDは、単一のドメイン内でのみ使用してください。たとえば、1つのゲームのデータストアキーなどです。
- 別のドメインが保存されたアイデンティティを読み取るときは、ToString() と fromString() を使用してください。