ソーシャルゲームのマスタデータ管理

あとで役立つかもしれないので考えをまとめておく。いい方法があったら教えて下さい(切実

10/14時点での結論

現在Excelで管理している

Excel管理 + マスタデータのテストを書く or
Webアプリを作る

現在の方法

Excelで管理してる

Webの管理画面は開発が追いついていないのでテーブルの追加/変更が発生すると見れなくなる orz

  1. プランナーがExcelに入力
  2. メンバーが作ってくれたExcelアドオンでスクリプトファイルを出力
  3. SVNExcelスクリプトファイルをcommit
  4. Jenkins上からスクリプトファイルをステージング環境へ流す。
  5. ステージング環境で確認した後で本番へリリース
メリット
  • アドオンテーブル名やカラム名を設定すればいいだけになっているので、プランナーが入力しやすいように作れる。これはデータ作るだけだったら相当便利。
  • サーバいらない
  • 出力したスクリプトファイルはバージョン管理できるので差分がわかりやすい。テキスト最強
デメリット
  • アドオンの実装わかんないと辛い
  • WindowsExcelの独自関数を使ってるみたいなのでMacでは動かない
  • 数字を直入力しているので、画像パスの存在や依存データのチェックができない(色々やればできるのだろうがしてない)
  • Excelはブランチ切った後にマージができない。(今は別ファイルで管理している)

そもそもどのようなデータが入ってくるのか

  • 画像パスが入ってるアイテムデータ
  • ショップやガチャなど日付に依存したデータ
  • イベント報酬などアイテムデータが存在することを前提にしたデータ
  • イベントのNPCレベルなど複数レコードで意味をなすデータ
  • 特定のエラーチェックが必要なデータ
    • 例) プラットフォームで決められたアイテムの最低販売価格など

妥協できるところ/できないところ

ブランチを分けるのはどちらに倒すか悩みどころ。本当は妥協できないに入れたい。

妥協できる
  • Windowsユーザが多いのでOS依存でもいい
  • ブランチをちゃんと切りたい
妥協できない
  • プランナーの入力ミスをできるだけ早く検知したい
  • ステージング環境で確認中に気づくのは避けたい
  • プランナーでも変更できるようにしたい
  • リリースミスしたら前のデータをすぐに戻したい
  • テーブル定義変更に柔軟に対応したい

実現方法

このままExcel
  • 画像パスのチェックや日付のチェックをマクロで作ればおk?
  • IDが存在するが、そのIDが正しいかチェックをどうする?
  • 横にアイテム名とかをだす??
  • 出力ファイルはテキスト形式なので差分取るの楽
Webアプリ
  • サーバやアプリを準備する必要がある
  • エラーチェックはExcelマクロより簡単
  • 各人のPCに負荷はかけない
  • ダンプをexport→本番へimportとやるといい
  • 作るのやっぱめんどい
  • メタデータを引っ張ってきてやってみるか?

別の方法

phpAdmin
  • エラーチェックの実装とかつらそう
  • 間違って本番データの変なテーブルいじったとかありそう(自分は経験してないけどどこかで聞いたことがある)
Google スプレッドシート
  • Excelとかわらん
  • OSに依存しないのはいい
JUnitでテストを書く
  • 日付チェックなどの妥当性チェックはある程度はできる
  • 画像などのファイルの存在チェック、そのファイルが妥当かどうかのチェックはできない。(妥当かどうかの判断は人しかできない)
  • Jenkinsの日本語をメソッド名にすると、失敗した時に日本語がちゃんと表示されない。(VM引数に-Dsun.jnu.encoding=UTF-8を入れれば解決するはず)