【Roblox】Experienceのゲームデータを取得してKPIを確認する
はじめに
Experience内で管理しているゲームデータを定期的に取得して、KPIの進捗を確認するためのシステムを構築しましたので、その概要を紹介させて頂きます。
※ゲームデータとはステージごとのプレイ回数やクリア数、いいね数などの情報を指します。
Robloxバージョン:0.658.0.6580461
使用サービス
本システムは以下のサービスを使用しています。
- Roblox
- Open Cloud API
- universe-datastores.objects:list
- universe-datastores.objects:read
- universe.ordered-data-store.scope.entry:read
- DataStore
- Open Cloud API
- Google Workspace
- Google Apps Script (GAS)
- Spreadsheet
システム設計
本システムは以下のフローに従いゲームデータを取得します。
- ExperienceはゲームデータをDataStoreに保存する
- GASはトリガー設定で定期的に起動する
- スケジュール管理用Spreadsheetから、本日分の取得が未完了か確認する
- Open Cloud APIを実行して、DataStore内のゲームデータを取得する
- 取得したゲームデータをデータ保存用Spreadsheetに保存する
- スケジュール管理用Spreadsheetに、本日分の取得完了を記録する
設計詳細
システム設計の各フローについて説明します。
1.ExperienceはゲームデータをDataStoreに保存する
ゲームデータをDataStoreにどのように保存するか、Experience開発者と相談して決定しました。
その際Experience側のDataStoreの取得制限と更新制限を超えないように、更新頻度に注意して設計します。またDataStoreのEntry数が多すぎると、GASの実行時間中に全てのゲームデータが取りきれない等の問題がありますので、Entry数にも注意して設計します。
2.GASはトリガー設定で定期的に起動する
GASは5分おきに起動するトリガーを設定して自動実行します。ゲームデータの取得は1日1回ですが、何からの障害によってデータの取得もしくは保存に失敗した場合に即座にリトライできるように備えます。
3.スケジュール管理用Spreadsheetから、本日分の取得が未完了か確認する
ゲームデータを取得した日時を記録しておき、本日分が取得済みかどうかの判定に使用します。未取得の場合は取得フェーズに進み、取得済みの場合はGASを終了します。
last_get_at |
---|
2025/01/01 |
4.Open Cloud APIを実行して、DataStore内のゲームデータを取得する
Open Cloud APIを使用してDataStore内のゲームデータを取得します。ゲームデータが格納されているEntryのKeyが決まっている場合は、直接Get Data Store EntryのAPIで取得します。
複数のEntryがあり条件を満たしたEntryのみ取得する、という場合は工夫が必要です。
例えば、Entry1つ1つにステージの情報が格納されており、プレイ回数が多い順に100件取得するとします。この場合は、KeyにステージID、値にプレイ回数を入れたOrderedDataStoreを用意して対応します。
Experience側は、ステージプレイごとにOrderedDataStoreをIncrementします。
GAS側は、List Ordered Data Store EntriesのAPIを使用してプレイ回数の多い順に100件取得します。ここで得られたKeyを用いてGet Data Store EntryのAPIを実行すると、プレイ回数上位100位までのステージ情報が取得できます。
Open Cloud APIは複数同時に実行できますので、非同期で通信できるUrlFetchApp.fetchAll() 関数を使用します。ただし、Open Cloud APIの1分間の通信回数制限を超えないようにUtilities.sleep()で時間調整する必要がありました。
5.取得したゲームデータはデータ保存用Spreadsheetに保存する
取得したゲームデータはデータ保存用のSpreadsheetに保存します。Spreadsheetにはセルの個数制限がありますので、月ごとにSpreadsheetを新規作成します。データ取得日のシートを作成し、ゲームデータをテーブル形式(1行目にカラム、2行目以降にゲームデータ)で保存します。
ユーザーのフリーワードをSpreadsheetのセルに保存する場合は注意が必要です。
例えば、先頭に半角イコール「=」が含まれると自動で関数として扱われ、計算後の結果が保存されてしまいます。この場合は、GAS側でフリーワードの先頭にアポストロフィー「'」を付与して、計算させないようにしました。
ugc_stage_id | ugc_stage_name | play_count | clear_count | good_count | bad_count |
---|---|---|---|---|---|
10001 | 'hoghoge | 432 | 400 | 380 | 20 |
10002 | '=(1+2) | 321 | 310 | 250 | 60 |
10003 | '00001 | 210 | 100 | 10 | 90 |
6.スケジュール管理用Spreadsheetに、本日分の取得完了を記録する
本日分のデータ取得と保存が完了したら、スケジュール管理用Spreadsheetに今日の日付を書き込み、GASを終了します。処理のどこかでエラーが発生した場合は5分後に実行されるGASがゲームデータの取得からやり直します。
last_get_at |
---|
2025/01/02 |
エラー対応
本システムの運用を続けていると、しばしば以下のエラーの発生がみられます。
通信エラー
500系エラーは通信リトライを実装する事で解決する場合があります。
継続して発生する場合は、Roblox Status[1]やGoogle Workspace Status Dashboard[2]で、障害が確認できます。
Spreadsheetエラー
関数SpreadsheetApp.openById()がSpreadsheetに接続できない場合に発生しますが、確認しても殆どが正常です。Google 側の障害でSpreadsheetに接続できないのかもしれません。
その他
ごく稀にGASが原因不明の停止を引き起こし、タイムアウトまで復旧しない事がありました。
30分程度タイムアウトせず、強制終了しない限り止まりませんでした。
サービスの制限
本システムで使用しているサービスの制限について以下に記載します。
これらの制限を超えないように実装しました。
Roblox
DataStoreの制限
DataStore名 | 50 文字 |
Key名 | 50 文字 |
スコープ | 50 文字 |
データサイズ | 4 MB |
DataStoreのスループット(Experience)
読み込み | 25 MB / 分 |
書き込み | 4 MB / 分 |
DataStoreのスループット(Open Cloud API)
リクエスト回数 | 300 / 分 |
読み込みデータサイズ | 20 MB / 分 |
書き込みデータサイズ | 10 MB / 分 |
OrderedDataStoreのスループット(Open Cloud API)
リクエスト回数 | 300 / 分 |
Google Workspace
Spreadsheetの制限
セル文字数 | 50,000 文字 |
セル数 | 10,000,000セル |
シート枚数 | 1,000 枚 |
シート名 | 100 文字 |
GASの制限(Google Workspaceアカウント)
Spreadsheetの作成回数 | 3200 / 日 |
トリガーの合計実行時間 | 6 時間 / 日 |
URL 取得の呼び出し | 100,000 件 / 日 |
スクリプトのランタイム | 6 分 / 実行 |
トリガー | 20 / ユーザー / スクリプト |
URL 取得レスポンスのサイズ | 50 MB / 呼び出し |
URL 取得ヘッダーのサイズ | 8 KB / 呼び出し |
URL 取得 URL の長さ | 2 KB / 呼び出し |
URL 取得ヘッダー | 100 / 呼び出し |
まとめ
Experience内で管理しているゲームデータを定期的に取得するシステムの概要を紹介しました。
Open Cloud APIを使用する事で、定期的にゲームデータを取得することができます。
Spreadsheetに保存しておけば、グラフを作成してデータの推移を確認する事も、月の合計値や平均値を出して分析する事も、KPIを確認する事も容易に行えるでしょう。
お読みいただきありがとうございました。
参考
- Roblox | Open Cloud API
- Roblox | DataStore (クラウド)
- Roblox | DataStore (エンジン)
- Google | Apps Script 使用量上限
- Google | Sheet API 使用量上限

当社ではRobloxを活用したゲームの開発、 また企業の商品やサービスの認知度拡大に寄与する3Dワールドの制作など、 Robloxにおける様々な活用支援を行っております。 Robloxのコンテンツ開発をご検討されている企業様は、お気軽にご相談ください。 landho.co.jp/
Discussion