Liberent-Dev’s blog

株式会社リベル・エンタテインメントのテックブログです。

ASP.NET Coreを初めて触りつつMemory Packを試してみた

あけましておめでとうございます。
システム開発部のK.Mです。

今回の経緯

前回のアイ★チュウ最適化の話の中で、MemoryPackという新しいシリアライザーがリリースされていたのを知ったため、これを試してみようと思ったのがキッカケとなります。

しかしながら、MemoryPackを使うとなると、サーバをC#で実装する必要があります。

  • C#を本格的に触ったことがない
  • CやC++でVisualStudioを触っていた時期もあったが、VisualStudio2000とかもっと前の物だった
  • .NETを使ってのサーバ構築をやったことが無かった

上記の理由で少し不安に感じていたのですが、いざ触ってみたらあっさりとローカル環境が動いたので、同じようにMemoryPackが気になるけど、C#を触ったことのないサーバ・バックエンドのエンジニアに向けて入門編としてお届け出来ればと考えております。

開発環境

Visual Studioのインストール

MacであればこちらからVisual Studio for Macをダウンロード・インストールしてください。
Windowsは、上記リンクの先にあるVisual Studio Communityをダウンロード・インストールしてください。

この後記載してある、操作周りの説明はMacでの操作になりますので、Windowsでは若干異なる可能性があります。

続きを読む

アイ★チュウ最適化の話

こんにちは!
システム開発部のK.Mです。

先月の11月10日にNintendo Switch版「アイ★チュウ」が発売されました!

前回が好評だったため、今回もアイ★チュウの話をお届けします。
今回ですが、Android/iOS時代に発生した運用・開発時のアプリ制作の技術的な内容となりますので、少しとっつきにくいお話かもしれません。


こんにちは。
システム開発部のT.Iです。

祝:アイ★チュウswitch版発売!
2022年11月10日に発売されました。

本記事ではAndroid/iOS版のアイ★チュウ運営時に、マスターデータ1の一つ「リソースリスト」の内部処理で発生した問題と、その際にどのように改善したかを振り返ります。

基本的にアイ★チュウを運用していた当時(数年前)のお話となります。

リソースリスト内容

  • AssetBundle、サウンド、ADVスクリプト等ダウンロード対象のリソース情報が記述されたリスト
  • データ数は各OS(iOS,Android)21,000個程
    • 全体で約47,000件
  • データ構造

リソースリストデータ:改修前

  • csvjson形式シリアライズする2
  • アプリのjsonライブラリにはLitJsonを使用3
  • データサイズ
    • json生データ 1814 KB
    • 暗号化&圧縮 125 KB
  • アプリ内実装
    • 復号化の後、LitJsonでDictionary<string,DataClass>にデシリアライズして使用

リソースリスト運用 経過

  1. アイ★チュウ運営数年間はリソースリスト制御に問題は無く低スペック端末でも動いていた。
  2. 日々の更新で画像データなどが増えていきリソースリストは増大。
  3. 社内チェックの際に「タイトルから遷移が重くなってるかも・・・?」という声がちらほら。
  4. ある日の更新から「この前の更新からタイトルから遷移できず落ちる」との お問い合わせが発生。
  5. 調査したところリソースリストの展開とデシリアライズでメモリが足りず落ちている模様。
    (落ちなかったとしてもデシリアライズに数秒要しUXは良くない状況)

改修作業開始

改修内容


  1. マスターデータ:アプリ内から参照する共通の数値やデータ
  2. 正確にはシリアライズしたデータを暗号化&圧縮したデータを使用
    • サイズ軽減のためkeyは1文字
  3. 当時はUnityがjsonを正式対応する前
続きを読む

アイ★チュウの譜面制作秘話

こんにちは!
システム開発部のK.Mです。

今月の10日にNintendo Switch版「アイ★チュウ」が発売されます!
今回は特別バージョンとしてアイ★チュウのAndroid/iOS時代に譜面作成を担当していた方の開発時の話をお送りさせていただきます。


こんにちは!
企画部のアズマックスです!

さてさて、今回は私がアイ★チュウの譜面を制作している時に何が辛くて、何が大変だったか紹介したいと思います!

今回、この記事を書こうとした意図は、今現在リベルではアイ★チュウ以外のリズムゲームシステムが導入されたゲームがリリースされておらず、 今後もリズムゲームの開発があるのかどうかは未定だが、アイ★チュウ時に体感したリズムゲームの譜面制作の大変なところというのを紹介していきたい思います!

ではいってみよう!

まずアイ★チュウとは!?

リズムゲームがメインの恋愛リズムアドベンチャーゲーム

ちなみに個人的推しはRE:BERSERKの山野辺 澪

続きを読む

GoogleSpreadSheetでBigQueryを活用する

こんにちは。
システム開発部ネットワーク課のsupercontinueです。

はじめに

  • GoogleSpreadSheetからBigQueryへ接続し、データを参照・更新できるようになりました。
  • BigQueryにあるゲームのユーザーログなどをSpreadSheetで分析・共有できます。
  • SQLは詳しくないけどSpreadSheetは使える」というライトな利用者でもビッグデータが活用できます。
  • Googleによるマニュアルがあります。

まずは接続

たったこれだけでBigQueryのデータにアクセスできます!

  1. SpreadSheetを開く。
  2. メニューで [データ] 次の操作 [データコネクタ] 次の操作 [BigQuery に接続] をクリック。
  3. ダイアログに従ってBigQueryのプロジェクトを選ぶ。(対象へのアクセス権が必要です)
  4. データセット、テーブルを選ぶ。 もしくはSQLクエリーで抽出することもできる。
  5. コネクテッドシートと呼ぶシートが追加されます。

巨大なテーブルも接続可能!

1億レコード以上あるテーブルを接続してみました。

特に問題ないようです。時間がかかるということもありませんでした。

読めないテーブルがある?

一方でエラーで読めないテーブルがありました。

が、理由がわかりませんでした。

コネクテッドシートの機能

コネクテッドシートには下記のメニューがあります。

グラフ

コネクテッドシートのデータからグラフを作成します。
使用頻度は高いと思います。

BigQueryにあるすべてのデータが対象となるのがメリットです。
フィルタで範囲や条件を指定できるので、グラフを作るときには便利そうです。

あらかじめグラフ化しやすいテーブルを用意しないと使いにくいと思います。

ピボットテーブル

指定した条件で集計して結果を別のシートに出力できます。
使用頻度は高いと思います。

ただし、結果が最大行数は25,000行という制限があります。

以下の例では、毎日のガチャの種類と回数のレコードから、ガチャの種類ごとの累計回数をとります。

関数

コネクテッドシートのデータに計算式を適用して別のシートを作成します。
たとえば、最大とか平均とかを表示したいときに使います。

ただし、単純な合計値や平均値を確認するだけなら、「列の統計情報」を見る方が簡単です。

生成されたシート式のセルは =MAX(sc_daily_scout_dia!count) のようになっており、コネクテッドシートの値を普通のシートから参照できるようです。

抽出

条件を指定しコネクテッドシートからデータを抽出しシートを作成します。
使用頻度は高いと思います。

ただし、結果の最大行数は25,000行という制限があります。

以下の例では、特定の日付のレコードを抽出します。

+計算された列

コネクテッドシートに列を追加できます。
あまり使い勝手が良い機能とは思えません。

計算で別のシートのデータを参照することはできません。(たぶん)

コネクテッドシートないにある列に対して指定された関数の組み合わせしか使えないようです。(たぶん)

列の統計情報

自動でピボットテーブルやグラフのおすすめみたいなのを出せますが、合計値や平均値以外に期待したものが出ることはほぼないと思います。
積極的に使える場面はないと思いますが、特定の様式のテーブルなら良い感じになるのかもしれません。

利用上のコツ

BigQueryの料金

  • BigQueryのデータを参照すると、データ量に応じて費用が発生します。

  • データあたりのコストは低めなので、小さいデータを少ない回数参照するならタダみたいなものですが、大きなデータのすべての行何回も参照するとチリツモで無視できないコストになるでしょう。

  • 何かの操作をするとき大抵事前にデータ量が表示されるので、目安にはなります。

  • あまりビビる必要はないです。 料金が目に見えるようになるのは、数百億行とかを処理する場合です。数万程度のデータはタダみたいなものです。

費用を抑えるには

  • BigQuery側のデータは使いやすい・サイズを小さくするようにあらかじめ集計しておくのがベターです。
  • コネクテッドシートから普通のシートに抽出し(上限25,000行)、それから分析やグラフ化をするのがベターです。

扱いやすいデータにする

  • あらかじめBigQueryに扱いやすい集計済みデータを生成しておくのがベターです。
  • 集計はBigQueryで、スプレッドシートでは分析や表示をしましょう。

自動更新をうまく使う

  • BigQueryを使ったシートを日常的に共有して使う場合(KPIを毎日見るとか)の場合は、「更新スケジュール」を積極的に使いましょう。
  • 「手動で更新」をしないとデータが古く、意図しない結果をみている場合がありますし、「更新」ボタンを押すのも面倒です。
  • デイリーのKPIなら、1日1回更新するようにスケジュールをしておけば便利でしょう。 コネクテッドシートで作成したグラフや抽出したシートにも「更新スケジュール」を設定できます。

データポータルとの使い分け

  • データポータルは「アドホックでない分析や閲覧」をするのが向いています。 インタラクティブではあるけど、それはビューやフィルタ程度に止めるのが良いと思います。 データポータルなどは「KPIなど毎回同じフォーマットのデータを継続して見るための道具」といえるでしょう。 また、データポータルでビューを整えるのはそれなりに時間がかかりますし、そもそも習熟するための時間が必要です。

  • SpreadSheetではSQLが苦手な人がアドホックな分析をしたいときに便利です。 スポットでいつもと違った分析をしたい、すばやく・細かい・掘り下げた分析をしたいときに便利です。 SpreadSheetを使い慣れた人なら、集計・分析はしやすいと思います。

データの同期

  • コネクテッドシートでBigQueryのデータを編集することができます。ただし、明示的に「更新」する必要があります。
  • また、BigQuery側でSpreadSheetを外部データソースとするテーブルが作れます。今回紹介したものの逆パターンです。
  • 個人的には、どちらも特殊な場合を除き、アンチパターンな気がします。

できないこと

  • 通常のシートにもってくるときに、25,000行以上はエラーになります。
  • 読み込めない・指定できない場合など、一般的にSQLだと詳しいエラーやメッセージが出るのに比べて、SpreadSheetでの操作では詳細なエラーログやメッセージが無いので簡単には理由がわかりません。

リベル・エンタテインメントでは、このような最新技術などの取り組みに興味のある方を募集しています。もしご興味を持たれましたら下記サイトにアクセスしてみてください。 https://liberent.co.jp/recruit/

Firebaseを使ったGooglePlayGamesログインの落とし穴

こんにちは!
システム開発部のK.Mです。

今回の記事の経緯

弊社内で制作してリリースしたカジュアルゲーム「FingerRocket」にてリリース直前になり、 本番想定の環境でのみ発生する落とし穴に連続でハマってしまい機能が正常に動かないという事がありました。

何も知らないと罠にハマってしまう設定周りの話だったため、忘備録兼同じように困った人が居た場合の道標として残しておきたいと思い記事化しました。

FingerRocketとは?

その前に、「FingerRocket」とは何ぞ?というところですが、

操作は簡単、ロケットを引っ張って向きとパワーを調節し、地球に向けて飛ばすだけ!
ロケットを引き寄せる重力を持った惑星や、宇宙を漂う隕石を避けながら、地球着陸を目指しましょう!
惑星の中には重力が強力なもの、移動するもの、ロケットの動きを阻害するものなど、
様々な効果をもった惑星があります。
それらの障害を回避し、時には活用してクリアを目指していきましょう!

といった内容のハイパーカジュアルゲームとなります。


最初はこのように簡単なステージですが、進むにつれて


このような感じで少しずつ難しくなっていきます。

少しでも気になった方は、下記バナーからDLをお願いします。
Google Play で手に入れよう

発生していた事象

UnityにてFirebaseを使用したGooglePlayGamesへのログインを使っていましたが、本番環境下で記載の現象が発生していました。

  1. GooglePlayGamesへのログインが出来なくなっていた
  2. ランキング用に用意していたリーダーズボードが見れなくなっていた
  3. 得点を登録した後にリーダーズボードを表示すると永遠に読み込み中表示になっていた
続きを読む