---
# System prepended metadata

title: VRC実績システムメモ

---

# VRC実績システムメモ

## 概要

- VRChat内で何かを達成したら、称号を受け取ることができる「実績システム」を作る
  - 実績例：「アスタリスクの花言葉クリア」、「Pandora ep1 Master」、「電脳飲食店組合10店舗制覇」など
- 形態はWebアプリ。Twitter連携してログインする。
  - 既存のVRChat向けのWebアプリでは、VRChatアカウントでログインさせるものもあるが、VRChatの仕様上、そのサイトにVRChatのIDとパスワードを入力する必要があるため、利用者のハードルが高い。
- ドメインは「vrctrophy.jp」あたり？


## 狙い

- VRChat内の共通の経験を持った人を見つけやすくすることで、VRChat内での交流を活性化する。
  - 実績が近い人なら趣味が似てることがわかったり、同じ謎解きワールドに行ったことがあればネタバレトークができたり
- 似た経験をしている人が持っているほかの実績をおすすめして、自分にあった遊びを見つけやすくする（実績レコメンド機能）
- VRChatを始めた人が何をしていいかわからないという話もあるので、そういう人が何から手をつけていいかわかるようにもなる。


## 基本システム

### ログイン・プロフィール登録

Twitterと連携してログイン。以下の項目を設定できるようにする。（★がついているものは、Twitterから取得したものをデフォルト値にする）

- 必須
  - 名前（表示名）★
  - アイコン★
  - Twitter ID★
  - VRChat ID
  - 自己紹介★
  
- あってもよいけどなくてもよい
  - プロフィールデザインカスタマイズ
    - Twitterであるような上部画像設定や背景色変更など


### 実績マスタ登録・管理

実績をカテゴリに分けて登録できる機能。カテゴリごとに画面に表示して、ユーザーに登録させる。
登録させる項目は以下を想定

- 必須
  - 名称
  - カテゴリ
    - 例：謎解き、ホラー、ワールド巡り、
  - 説明

- 必須じゃないけどあった方がいいかも
  - アイコン
  - レーティング
    - 実績の達成の難しさで★～★★★★★みたいな難易度を表示する。
  - サブカテゴリ
    - 例：「ワールド巡り」のサブカテゴリとして、「電脳飲食店組合」「パーティクルライブ」みたいな階層構造にする。
  - ユーザーが自分で追加/管理者が追加
    - ユーザーが自分自身で実績を追加できるようにしたいが、管理者が追加したものの方を上位に表示させたいので、このフラグを付ける
    - データ構造的には、カテゴリの一部にしてもよい
  - 複数の実績を達成することで解放される実績
    - 「ホラワマスター」「謎解きマスター」など、達成感を出すためには入れたいけど、最初はいらないかも。


### 実績登録

登録されている実績をユーザーに表示して、オンオフ

### プロフィール表示

登録されているプロフィールと実績を表示する。

### 実績別ユーザ表示

同じ実績を持っているユーザ一覧を表示する

### おすすめ実績表示

自分が持っている実績をもとにおすすめの実績を表示する。（SQLのみで計算できる協調フィルタリング程度のものを想定。実績が少ないうちは管理者が設定したおすすめ実績を表示）


## 想定システム構成

バックエンドはAPIサーバにし、フロントエンドには、APIからJSONで必要なデータを返す。

案1）
- フロントエンド：HTMLとJSをAWS S3 + Cloudfrontで配信
- バックエンド：serverlessでAWS API Gateway + Lambda + DynamoDB + Twitter OAuthで作る。

案2）
- EC2インスタンスのLAMPアプリ

⇒ざっくりデータ構造を考えた結果、DynamoDBだとデータ管理が面倒（APIコールを減らすためにアプリの目的ごとに冗長なデータを持たないといけないなど）なので、普通のRDBの案2の方が作りやすいかも。


## APIレスポンス（WIP）

- UserProfile
  - Twitter ID
  - VRC ID
  - コメント

- UserTrophy
  - user_id
  - trophy_id
  - trophy_category
  - trophy_name

- TrophyUser（Trophyからユーザーを検索）
  - trophy_id
  - trophy_category
  - trophy_name
  - user_ids（リスト）

…
（このほか機能ごとにAPIを用意する予定）


## 今のところ実装するつもりのないもの

- おすすめユーザー
  - ユーザーを紹介するシステムではないため、おすすめ実績は実装するが、おすすめユーザーは実装しないつもり


取り急ぎは、こんなぐらいで適宜仕様追加して、並行してプロトタイプつくろうかと思ってます！


