はじめに
こんにちは、ユニバーサルゲーム事業部でサーバーエンジニアをしているコスキです。
この記事を読んでくれている皆様はソーシャルゲームにおけるマスタデータの管理・運用について興味はあるでしょうか?
マスタデータとは、運営が事前に用意しているアセット群のうち、数値や文字列で表すことができるデータ群のことです。
運営のみが変更できて、ユーザー起因で変わったりユーザーごとに変わったりしない読み込み専用のデータのことを意味します。
キャラクターのHPやレベルなどのように、ゲームの動作やバランスを決めるのに使われます。
ソーシャルゲームが世に出て何年も経ちますが、マスタデータの運用についてはベストプラクティスが広まっているわけではありません。
設定した内容のコンフリクト、データの巻戻り、QAとの連携やデプロイフローなど、いろいろと問題を孕んでいる現状です。
各社ごとに専用ツールを作成したり既存サービスを組み合わせたりして、工夫して準備・運用している状態だと思います。
弊社でもプロジェクトごとに様々な方法で運用しており、それらを比較・フィードバックして、より良い方法はないかと模索しています。
この記事では、よりよいマスタデータ運用のために、弊社で今まで行ってきた手法や他社の手法を整理・紹介していきます。
今まで試してきた手法の整理
弊社でプロジェクトごとに行ってきたマスタデータの管理方法は大きくわけて2種類に分ける事ができます。
その2種類とは、「DBを使い環境間のデータをコピーする手法」と「何かしらのデータのリビジョンを管理し、それをインポートする手法」です。
この章ではそれぞれの説明に加えて、利点や問題を紹介します。
DBを使い環境間のデータをコピーする手法
ソーシャルゲームの開発・運用では複数のDBの環境を使っています。
例えば、開発中機能や設定の動作確認をする開発環境、実際にユーザーが遊ぶ本番環境、本番相当のマスタデータで動作確認するステージング環境などを使います。
環境間のデータをコピーする手法とは、各環境のDBに入っている特定のデータを、ツールを利用して別環境のDBにコピーする手法です。
利点
利点としては、マスタデータを設定する環境を1つに絞ることで並行作業がしやすい点です。
ユニークなIDはオートインクリメントの設定にしたり、あるいは文字列でユニークなものにすることで、データのコンフリクトなく設定できます。
また、DBに設定してすぐに動作確認に入れるのもメリットです。
環境を絞ることでインフラコストを抑えられることもメリットでしょう。
問題点
シンプルな運用方法ですが、問題点もいくつかあります。
まずは、再現性が担保出来ない点です。
各環境のDBのデータは常に変更が入っているので特定時点のデータに復旧できません。
問題が起きた場合の正常なデータへの巻き戻しや問題が起きたデータの再現が困難になります。
また、データをコピーするために対象の環境をロックするなどの不要なオペレーションが必要になります。
データコピー中にDBのデータ編集をすると編集途中のデータや動作未確認のデータがデプロイされてしまうので、コピー中はDBのデータを編集しないのが安全です。
データコピーが終わるまで対象環境へのデータの入力ができず、データ設定の作業が止まってしまう事も不便です。
何かしらのデータのリビジョンを管理し、それをインポートする手法
マスタデータは数値や文字列のデータ群なので、DBだけでなく、Excel・スプレッドシート・yamlといったファイル形式でも表現できます。
データのリビジョンを管理する手法とは、マスタデータを表現したこれらのファイルをGitなどで変更履歴を管理し、DBにはファイルをインポートしてデータを再現する管理方法です。
利点
利点としては、変更履歴を管理しているので特定の状態にすぐに戻せる事です。
また、各環境のDBで特定の時点のマスタデータを再現でき、どの環境でも同じデータが入る事も大きな利点といえます。
個人の環境を用意して、それぞれの環境で設定・動作確認を行えば、お互いの作業に影響を与えることなく並行作業できることも利点になります。
問題点
データをファイルとしてリビジョン管理しているので、並行作業をしている場合にコンフリクトの発生する可能性が大きな問題と考えられます。
IDは予め決めておく、差分確認ツールやマージツールを用意するなどの工夫が必要になります。
本番環境で問題が発覚し緊急修正する場合はどうするか?マージフローはどうするか?といったことも事前に考慮が必要になるでしょう。
他社のマスタデータ事情について
さて、これまで弊社で試してきた手法をいくつか紹介してきました。
ここでは、他社のケースではどのような工夫をしているのか軽く見てみようと思います。
独自のツールを作成して対応するケース
とあるケースでは、いくつかの機能をもつ独自のツールを作成することで、マスタデータ管理の課題に取り組んでいました。
そのツールには、バージョン管理機能、変更差分のレビュー機能、入力されたデータの検証機能などが組み込まれています。
長年に渡って様々な形でマスタデータの運用をしてきた経験があるからこその課題の見極めと解決方法のように感じます。
既存のサービスを工夫して使うケース
いくつかのケースでは、既存のサービスの使い方を工夫することで課題に対応していました。
例えば、Excelとyamlの相互変換ツールを作成し、Excelで入力・編集したデータをyaml形式でリビジョン管理しやすくするケースがありました。
Excelは入力・編集の面では扱いやすいがリビジョン管理には向いておらず、yamlはリビジョン管理には向いているが入力や編集が直感的ではない、という両者の得意不得意を補う運用です。
例えば、実際のデータにタグをつけて管理を工夫をしているケースもあります。
これは、1つのファイルでマスタデータを管理しつつ、段階的にリリースするための工夫です。
1つのファイルで管理していると、既にデプロイされているデータ、デプロイ可能なデータ、作業中のデータが入り混じってしまいます。
それを管理しやすくするような工夫です。
おわりに
この記事ではソーシャルゲームにおけるマスタデータの管理や運用方法について、弊社で試してきた手法や問題点をまとめてきました。
また、他社での課題解決のための取り組みも少し触れてみました。
弊社では、これらを踏まえて新しい手法を模索しプロジェクトへ導入して試しているところです。
新しい手法の内容や試してみた結果は、導入してみたフィードバックが得られたらまた記事にしてみたいと思います。