がとーしょこらの技術録(旧)

記録や技術的な記事を書いていきます

VRChatのインスタンス参加の複雑性

VRChatではいろんな人と交流することができる。
この交流の場は実際はインスタンスという名前がついている。
これはワールドという型から作られたものであり、
VRChatのユーザーなら誰でも新しく作成して開くことができる。

インスタンスパーミッション

このインスタンスには誰が参加できるかに応じて5つのレベルがある。
このレベルを本記事では便宜上パーミッションとする。
またパーミッションインスタンスを建てる際に建てるユーザー(以下、Organizer)が決めることができる。

  • Public:誰でも入れる
  • Friend+インスタンスにいるユーザーのフレンドなら入れる
  • FriendOnly:Organizerのフレンドなら入れる
  • Invite+インスタンスにいるユーザーの承認が通れば入れる
  • InviteOnly:Organizerの承認が通れば入れる

表にすると以下のようになる。

名称 参加できるユーザー 承認必要
Public 誰でも ×
Friend+ インスタンスにいるユーザーのフレンド ×
FriendOnly Organizerのフレンド ×
Invite+ インスタンスにいるユーザーのフレンド
InviteOnly Organizerのフレンド

ここで承認という概念が出てきた。
これはある人をそのインスタンスに参加(Join)させてよいかというものである。
ここでいうある人はそのインスタンスにいる人のフレンドである。
そのフレンドは会いに行きたいフレンド(以下、Joinee)に対して、
そのインスタンスに参加したいという承認要求メッセージ(Request Invite)を送ることができる。

このメッセージはJoineeがPrivate表記になっているときに送ることになる。
Private表記ではないときには承認なしにJoin可能である。
Private表記になるのは

である。
(蛇足だが、2020年2月25日現在の仕様では3つ目の状態の場合、
Organizerと参加したい人がフレンドでない場合、インスタンスに参加することはできない。)

ユーザーステータス

ユーザーの現状態を示すユーザーステータス機能がある。
これはユーザーが自由に設定でき、フレンドはそれを見ることができる。
今までは3種類だったものが、近々アップデートで4種類になる。
Upcoming Status System Changes - VRChat - Medium

ユーザーステータスは以下の4つの種類がある。

  • 青:現在地を隠さないし、絶対承認する
  • 緑:現在地は隠さないし、承認できる
  • 橙:現在地は隠すけど、承認できる
  • 赤:現在地は隠すし、絶対承認しない

表にすると以下のようになる。

現在地の表示 承認する
×
× ×

現在地を隠すということはフレンドから見たときにPrivate表記になる。
そして、参加したい人がRequestInviteを送ったときにそれを承認するかどうかも異なっている。
青は自動で承認され、赤は自動で非承認される。
緑と橙はRequestInviteを受け取ったユーザーが承認するか選択する。

パーミッションとユーザーステータスの関連性

ユーザーステータスは
「ユーザーレベルでプライバシーを確保するもの」 だと言える。
それに対して、インスタンスパーミッション
インスタンスレベルでプライバシーを確保するもの」 だと言える。

ユーザーはそれぞれの思想の元、どの程度プライバシーを守るか設定する。
インスタンスにいるユーザーAが「フレンドにJoinしてほしい」という思想の元、青ステータスにしていたとしても
Organizerが「自分の知らない人が入ってほしくない」という思想の元、FriendOnlyで開いていた場合、
ユーザーAのフレンドはOrganizerとフレンドでなければインスタンスに参加できない。
よって、Organizerの思想のほうが実際のインスタンス運用に関しては影響を受けやすい。

また、パーミッションというインスタンスレベルのプライバシーが背景にあって、
実際に誰を入れるかという部分の最終決定はJoineeのRequestInviteの承認可否に委ねている。
これはインスタンスに参加するためにはそのインスタンスにいる人が窓口になるという設計によるものである。

(Public, FriendOnly, Friend+はワールドのインスタンス一覧からも参加することができるが、
実際のところ基本的にはフレンドからのJoinが多いように感じる。)

このようなシステム設計によってユーザーコミュニティの形成にどのような影響があるのか気になるので今後も考察していきたい。

その他

承認が不要という観点でインスタンスのプライバシーレベルは

Public > Friend+ > FriendOnly > Invite+ > InviteOnly

であるが、
Organizerとフレンドであるかという観点から
そのインスタンスに参加できる可能性があるユーザーの総数は

Public > Friend+ = Invite+ > FriendOnly = InviteOnly

である。

しかし、Invite+はインスタンスにいるユーザー全員がPrivate表記になり、
FriendOnlyはOrganizerとフレンドであり、そのインスタンスにいるユーザーが青または緑ステータスの場合、場所が表示された状態になる。
よって、FriendOnlyのほうが承認なしでJoin可能であることを確認でき、参加しようとするユーザーが多いように感じる。