Robloxは各ユーザーに、彼らがインタラクトする各体験またはアプリごとにユニークなドメインスコープのユーザーIDを割り当てます。このページでは、ドメインスコープの識別がどのように機能するか、そしてあなたの体験コードでUserタイプをどのように使用するかについて説明します。
ユーザー識別の中心となる概念は以下の通りです:
| 概念 | 説明 |
|---|---|
| ユーザー | Roblox上の持続的なアカウント。 |
| プレイヤー | 実行中の体験のデータモデル内でのユーザーの表現(プレイヤーを参照)。 |
| Userデータ型 | 特定のドメイン内でのユーザーのアイデンティティを表すデータ型。これは体験コード内でユーザーを参照するための標準識別子です。 |
| ドメインスコープのユーザーID | 特定のドメイン内でユニークにユーザーを識別する数値識別子。この識別子は、各体験とアプリごとに異なります。 |
ドメインスコープのユーザーID
ドメインスコープのユーザーIDとは、特定の体験またはアプリ内でユーザーに割り当てられるユニークな識別子です。グローバルユーザーIDとは異なり、ドメインスコープのユーザーIDはそれを発行したドメイン内でのみ意味を持ち、同じユーザーは各体験またはアプリごとに異なるドメインスコープのユーザーIDを持ちます。スコープ付きIDの展開前にあなたの体験に参加したプレイヤーは、元のグローバルユーザーIDをその体験内で保持します(戻りプレイヤーを参照)。
ドメインタイプはEnum.DomainTypeで表されます:
| ドメインタイプ | スコープ対象 | 例 |
|---|---|---|
| Enum.DomainType.EXPERIENCE | 特定の体験(ユニバース) | あなたの体験内でのプレイヤーのID |
| Enum.DomainType.OAUTH | 特定のOAuthアプリケーション | あなたの外部ツール内でのユーザーのID |
ドメインスコープのIDはどのように機能するか
プレイヤーがあなたの体験に参加すると、彼らはその体験にユニークなドメインスコープのユーザーIDを付与されます。同じプレイヤーが別の体験に参加すると、異なるドメインスコープのユーザーIDが付与されます。これは以下を意味します:
- ドメインスコープのユーザーIDは整数で、既存のグローバルユーザーIDと似ています。
- ドメインスコープのユーザーIDは既存のグローバルユーザーIDと衝突しません。
- 同じ数値が異なるドメインで異なるユーザーに現れることがあります。ユニークキーはドメインタイプ、ドメインID、ドメインスコープのユーザーIDの組み合わせです。
例シナリオ
以下の例は、異なる体験が同じユーザーを参照する方法を示しています:
| シナリオ | ユーザーコンテキスト | 体験が見たユーザーID |
|---|---|---|
| ユーザーが体験Aに接続する | 戻りプレイヤー(スコープ付きID前に訪問済み) | 123(グローバルID、変更なし) |
| ユーザーが体験Bに接続する | スコープ付きIDの展開後の初回訪問 | 500789(体験BのドメインスコープのユーザーID) |
| ユーザーが体験Cに接続する | スコープ付きIDの展開後の初回訪問 | 302441(体験CのドメインスコープのユーザーID) |
戻りプレイヤー
もしプレイヤーがすでにスコープ付きユーザーIDの展開前にあなたの体験に参加していた場合、その体験内では元のグローバルユーザーIDを保持します。これにより、既存のデータストアキー、リーダーボード、およびインベントリが変更なく機能し続けます。
ユーザータイプを扱う
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)
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は、グローバルIDまたはドメインスコープのユーザーIDのどちらかであり、ユーザーがスコープ付きIDの展開前または後に体験に参加したかによって決まります:
- 戻りプレイヤー(スコープ付きIDの展開前に初めて参加した) — APIはユーザーのグローバルユーザーIDを返します。
- 新規プレイヤー(スコープ付きIDの展開後に初めて参加した) — APIはユーザーのドメインスコープのユーザーIDを返します。
グローバルおよびドメインスコープのユーザーIDは標準整数で衝突しないため、これらの数値フィールドを読み取る既存のコードは引き続き機能します。
ユーザーアイデンティティを保存する
単一の体験内でのデータストアキーには、user.Idを直接使用します:
local key = ("player_%d"):format(player.User.Id)PlayerDataStore:SetAsync(key, data)
他のシステムから読み取られる可能性がある値や完全なドメインコンテキストが必要な場合は、UserをToString()でシリアライズします:
local encoded = player.User:ToString()SomeDataStore:SetAsync("support_ticket_user", encoded)-- 後で文字列から復元local user = User.fromString(encoded)
シリアライズの保証に関する詳細は、Userリファレンスを参照してください。
ベストプラクティス
- 新しいコードでの標準識別子としてPlayer.Userを使用してください。
- あるドメインの数値ユーザーIDを使用して別のドメイン内のユーザーを識別しないでください。