これはドリコム Advent Calendar 2017の7日目です。
6日目はogwmtnrさんの『Xcode 9 環境 で GoogleAnalytics を動かすまでの軌跡』です。
はじめに
皆さま、こんにちは。
株式会社ドリコムでエンジニアをしております桂田と申します。今はクライアントサイドとサーバーサイドの反復横跳びしているエンジニアです。
この記事では、主にスマートフォン向けのゲームアプリを対象としたマスターデータ配信について、簡単なおはなしができればと思います。
簡単な用語定義
この記事で使用している『マスターデータ』は、主にスマートフォン向けのゲームアプリを対象に、ゲーム開発者及び運営者のみが更新を行うことができ、ユーザー固有の情報が基本的に含まれないデータ を マスターデータ と呼び、ユーザー操作の結果、データ内容が更新される ユーザーデータ と区別します。
特に最近のゲームアプリでは、データベースに登録されているほか、初回起動時にダウンロードする静的ファイルとしても配信されております。
記事の対象者
この記事はゲームアプリを開発して間もないエンジニアの方を対象としています。
データの種、を作る前の話
弊社ではサーバーサイドの実装には、Rubyが広く採用されており、フレームワークに関してもRuby on Rails(以下、Rails)が使われております。Railsでは、データベースの初期化時の投入データをSeedファイルと呼び、弊社のゲームアプリでもマスターデータ作成時に使用しております。
ただ、このSeedファイルから意味のあるマスターデータを作るためには、ゲームコンテンツに関する情報が必要です。この情報はゲームの面白さを決定する大事な要素となるため、通常は企画職の方々が日夜苦心しながら決めることとなります。そのためか、(独断と偏見がありますが)ゲームコンテンツに関する情報は企画職の方々愛用のExcelやGoogleスプレットシートで管理されていることが多く、実際にゲームへデータを投入する際には、Excel等をSeedファイルに変換するワークフローが組まれることがほとんどだと思います。
自分が所属するプロジェクトでは、Googleスプレットシートに書かれたゲームコンテンツに関する情報を元にSeedファイルを作成しています。
そのデータはデータベースに登録しないとダメですか?
企画の方々が、禿げ上がるくらいに考え抜いてくれたゲームコンテンツに関する情報も細かく見ていくと気になることがあります。
例えば、装備品のようなマスターテーブルが存在するとすると、最も単純な例だと下記のようなものになるでしょう。
最近のスマートフォン向けゲームアプリでは、マスターデータを静的ファイルとして初回起動時等にダウンロードされることが多く、一度アプリ側へ配信してしまった後はサーバーサイドの処理としては必要ないカラムの情報もあります。特に上の画像のような名前や説明文などのアプリ側で表示するだけのテキストデータなどは容量の大部分を占めてしまうことも少なくないため、可能ならばデータベース上からは排除し、すっきりとしたテーブルを使いたいところです。
サーバーにはYamlを、クライアントにはAvro
出来れば、運用が長くなるほどにわがままボディに育っていくマスターデータのカラムを用途単位で考慮し、サーバーサイドに必要なカラムのデータだけをSeedファイルとしてYAML形式で出力し、クライアントサイドに必要なものは別途静的ファイルで配信したいという気持ちが湧き上がっていきます。
弊社では静的ファイルフォーマットとして、Apache Avroを採用しております。詳しい導入経緯等に関しましては去年の去年のAdvent Calenderで弊社はっとりの記事『データフォーマットの選定とUnityにおけるAvroの使い方』に記載があるのでご覧になっていただければと思います。
このツールは、JsonとAvroの相互変換機能を提供していることもあり、企画の方がExcel等で作成したゲームコンテンツに関する情報を中間ファイルとしてJSON出力することで、サーバーサイドとクライアントサイドでお互いに必要なデータを作り出すことが可能です。
バリエーションを増やしたい
ワークフローを作ることで最終的な投入データをスリムにすることができました。
さらに出力ワークフローの中に変換層を設けることで、クライアントへ配信する静的ファイルにバリエーションを持たせることも可能です。
まとめ
簡単にマスターデータを配信するためのワークフローの話をしました。
何も考えずにゲームコンテンツに関するExcelやGoogleスプレットシートのデータを変換してデータベースに投入してしまうと、すくすくと育って、手に負えないわがままボディになってしまうため、普段から使う情報の用途に目を向けていければと自戒の念を込めて書きました