UdonTech Advent Calendar 2023の20日目です。
2024年3月にサービス終了することになったニフクラ mobile backend(以下NCMB)からAWS(API Gateway + Lambda + DynamoDB)へゲームジャム作品のランキング機能を引っ越ししましたので内容を紹介します。
移行対象のゲームについて
「商店街ゲームジャム」という約1ヶ月間のゲームジャムで作られた「三びきのコブタ ―サンドイッチは世界を救う―」というシューティングゲームです。unityroomで遊べます。
unityroom:
ソース:
このゲームのランキング機能にNCMB(データストア + NCMB Unity SDK)を使っていたので、AWSのAPI Gateway + Lambda + DynamoDBへ移行しました。
ランキング画面
ランキング画面は以下の感じです。
内容としては、
- ゲームクリア後にランキング取得 + 表示
- プレーヤー名入力後にスコア送信
という感じの画面です。
移行前・移行後のソース
NCMB版のランキング機能は以下の記事の実装を参考に作成しました。
AWS以外の移行先について
NCMBのサービス終了告知ページに
なお、本サービスの終了に伴い他社類似サービスのご案内を予定しております。
こちらは内容確定でき次第改めてご連絡させていただきます。
とあるので、近いうちに公式が良い感じの移行先を案内してくれそうです。 (12/25追記 案内記事来てました)
AWS以外に以下の移行先も検討しましたが、今回はAWSの勉強がしたかったのでAWSを選びました。
移行手順
移行手順を簡単にまとめます。
API Gateway + Lambda + DynamoDBをセットアップする
以下の記事を参考にバックエンド側をセットアップしました。
上記の記事では関数の言語にNode.jsを使う形で解説されていますが、今回はUnityと言語を合わせたかったのでC#で関数を書くことにしました。ただ、C#だとマネジメントコンソール上で関数を編集することができなくて、ローカルでプロジェクトをセットアップしてdotnetコマンドを使って関数をアップロードする必要があってやや面倒でした。
C#での関数の作成・デプロイは以下の記事が参考になりました。
DynamoDBのテーブルの項目は以下の感じです。
API GatewayはOPTIONSとANYを作ってCORSの設定をして(参考)、ANYは「入力パススルー: テンプレートが定義されていない場合 (推奨)」を設定した感じです。
NCMB管理画面からランキングデータをエクスポートする
NCMB管理画面にログインし、対象のアプリページを開いて右上の「アプリ設定」からアプリ設定画面を開き、エクポートタブからエクスポートを行いました。
ランキングデータをDynamoDBにインポートする
エクスポートしたランキングデータ(JSON)を手元で良い感じのCSVに変換してDynamoDBにインポートしました。(参考)
ゲームのランキング取得処理・スコア送信処理を変更する
NCMBのUnity SDKを使ってNCMBデータストアにアクセスする形から、UnityWebRequestを使ってAPI Gatewayにアクセスする形に変更しました。
unityroomへアップロード、移行完了
問題なく動くことを確認してunityroomへアップロードしました。
移行は以上で完了です。
移行してみて
ランキング取得処理もスコア送信処理もNCMB版よりややレスポンスが遅くなりました。
特にDynamoDBはオンデマンドモードで動かしているので、久しぶりのアクセスだとレスポンスが返ってくるまで3.5秒ぐらいかかるようになりました(NCMB版より2秒ぐらい遅くなりました。LambdaのInit Durationは200msぐらいです)。ランニングコスト0なのでまあいいかと思っています。
次ランキング機能を作る機会があれば、Unity Leaderboardsを使ってみようかなと思います。
以上です。