こんにちは。開発G所属のエンジニアです。
ゲーム開発と運用でMaster Dataは必ず必要なデータであり、一番更新頻度が高いデータであります。
Master Dataの更新、リリースの仕組みによって、大きくプロジェクトの運用コストが変わります。
目次
10ANTZのコンテンツの初期Master Data管理
- spreadsheet上管理
- gasでspreadsheetからcsvをexport
- サーバーcsvをDBに保存
- クライアントcsv->(構造体)bytes->assetbundle
- クライアント読み込みassetbundle->構造体cast
今まで運用して経験
利点
- 同時更新が楽
- 履歴見やすい
- ツール不要
欠点
- gasのcall制限よりエラー
- spreadsheetのコピーが重い
- assetbundleによるビルド時間が長い
今回運用コストの改善のために以下のチャレンジを行いました。
- spread sheet から excel
- excelをgoogle driveで管理
- excelからcsvにexportしasset bundle化しない
- 今のところスマホでもjson parserが結構高速でしたので、csvをjsonに変換->一つのファイルにまとめ->暗号化->gzipに変換
spread sheetからExcelに変えた理由
master dataの運用方法はいくつあります。
- 更新内容をプランナー側で管理し、反映すべき内容とブランチを管理する必要がある。(プランナー管理)
1234567891011121314151617181920212223作業場所は一つで、プランナーが自分が更新した内容を管理し、それを反映すべきブランチに反映する。|--product| |--card| | └--member| └--item| |--item1| └--item2|--dev01| |--card| | └--member| └--item| |--item1| └--item2(こちらで作業してproductまたはdev01に反映)|--planner| |--card| | └--member| └--item└--item1
- コミット履歴を管理し、マージする方法(プランナー管理)
1234567891011|--product| |--card| | └--member| └--item| |--item1 (COMMIT: XXXYYYZZZ)| └--item2|--planner└--item└--item1(FROM: XXXYYYZZZ)
- 本番反映のmaster dataの場所は一つ、各ブランチの場所で作業を行い、リリース時に本番ブランチにマージ、本番ブランチをリリース
1234567891011121314151617 開発githubのブランチと一緒にmasterdataのブランチを作成し、プランナーに提供する。github: team/release/event001masterdata: event001|--product| |--card| | └--member| └--item| |--item1| └--item2|--event001(productからの差分のみを格納)└--item└--item3利点:プランナーはマージのみ管理
spreadsheetのgasのcall制限とファイルコピーの時間がもったいないことで今回はMasterDataを高速に環境に反映確認するためExcelに変換し下記ようなツールを用意しました。
スピーディー反映ためのツール開発
10ANTZはUnityで開発行っていますので、Unity Editor拡張でツールを作成します。
今回はスピーディーに反映するため、Excelで管理するようにしました。
- 実装運用してみると、複数人が同時同じファイルを編集するケースは少ない
- excelをgoogle driveで管理することで、リアルタイムで編集状況が見える。
- Editor全体機能
- CSV Excel場所設定
Drag & Dropで環境設定を行います。
- CSVに変換
更新したいファイルまたはフォルダーを複数選択しDrag & Dropでターゲットファイルを登録変換する
変換ツールは内部で8スレッドの実装で全Excel 1300個ファイル変換が50秒 - MasterDataAccessor作成
CSVもとに対象DTOファイルとMasterDataAccessorを自動作成してくれます。
UnityのImportが大量に走るのを防ぐため、変更がないファイルは更新しないようにします。12使い方:DTOCard data = MasterDataAccessor.card.Find(222) ; - CSV To Json
全体のCSVをname + length + contentで合併し、暗号化、gzipに圧縮(2.5M->400kb)合併処理:1秒未満
- Run All
上記の処理を一括実行
- カラム変更
実際の運用上複数ファイルで同じカラムの変更を行うことがありまして、一つずつ手作業は大変ですので、ツールを作ってみました。
一括追加 & 一括削除
反映
Jenkins:
- 上記の内容をRun Allで自動ビルド
- export されたcsvをサーバーに反映
- export されたgzipファイルをクライアントS3に反映
- 管理画面のmasterdataバージョン更新
ローカル環境:
- Excel入力
- Run All
- Unity で確認
入力が少ない場合、5秒以内に反映できました。
これからの展望
- Unity Editor拡張 Excelの差分チェック
- Unity Editor拡張 Excelのマージツール
まとめ
今回はMasterDataのスピーディー反映を実装してみました。
MasterDataは運用で一番更新頻度が高く、確認頻度が高いです。
MasterData反映の流れの高速化は、プロジェクトの効率化に大きく影響しています。
今回はプランナーさんの管理コストを減らしつつ、チームとしての生産性もあがったと思います。