FINAL FANTASY Record Keeperのマスターデータを支える技術

D
Copyright (C) DeNA Co.,Ltd. All Rights Reserved.
第6回 DeNAゲーム開発勉強会
DeNA史上最大級!
FINAL FANTASY Record Keeperの
マスターデータを支える技術
2015/08/24
GDI 渋川よしき
Copyright (C) DeNA Co.,Ltd. All Rights Reserved.
お前だれよ?
 前職
⁃ 自動車会社の社内SE
 現職
⁃ 社内ゲームエンジン用のフレームワーク
(クライアント用もサーバ用も)作ったり、
開発支援ツール作ったりいわゆる社内SE
⁃ たまにゲーム開発を手伝ったりもします。
渋川 よしき
 プログラミング
 C++とかPythonとかGolangとかJavaScriptとか
 本
 つまみぐい勉強法、アート・オブ・コミュニティ(翻訳)、
Mobageを支える技術、オブジェクト指向JavaScript(翻訳)、
ポモドーロ・テクニック入門(翻訳)、etc
Copyright (C) DeNA Co.,Ltd. All Rights Reserved.
新書出ました!
 JavaScriptの、最速クライアント用MVCフレームワークの本です!
⁃ 速いのが好きな人や、変化が多いブラウザ周辺技術に疲れた人に
オススメ
 電子書籍のみです
 表紙は黒ムツの仲間
⁃ 南オセアニアの深海魚
⁃ 最大75cm
⁃ 確認された最高齢は
100歳を超えるとか
Copyright (C) DeNA Co.,Ltd. All Rights Reserved.
マスタデータとは?
 ゲームを支える要素
⁃ プログラム
⁃ アセット
• 画像とか2Dアニメーションとか3Dモデルとか音楽とか
⁃ マスタデータ
• プログラム・アセット以外
• シナリオ、テキスト、敵の強さなどのパラメータ
• レベルデザイン(3Dアクションのマップ)的なものはあまりマスターデータ
とは言わないかも・・・
Copyright (C) DeNA Co.,Ltd. All Rights Reserved.
マスタデータとは?
 ゲームを支える要素
⁃ プログラム →プログラマ
⁃ アセット →アーティスト
• 画像とか2Dアニメーションとか3Dモデルとか音楽とか
⁃ マスタデータ→ゲームデザイナ
• プログラム・アセット以外
• シナリオ、テキスト、敵の強さなどのパラメータ
• レベルデザイン(3Dアクションのマップ)的なものはあまりマスターデータ
とは言わないかも・・・
Copyright (C) DeNA Co.,Ltd. All Rights Reserved.
マスターデータの役割
 ユーザのプレイサイクルをデザインする
⁃ ユーザ体験のうち、UIとか画像とか音楽のような目や耳で感じる
以外のところ全般
• ステージクリアや、レベルアップのテンポだったり
• アイテムや必殺技、魔法などの種類とか性能だったり
• 敵の強さの調整だったり
• 会話やチュートリアルなどの説明だったり
 モバイルのオンラインゲームでは特に大事
⁃ 新しいイベントやステージを(アプリ本体の更新なしに)追加したり
⁃ ユーザが挫折しやすいポイントがあれば、それを修正したり
Copyright (C) DeNA Co.,Ltd. All Rights Reserved.
マスターデータの役割
 ユーザのプレイサイクルをデザインする
⁃ ユーザ体験のうち、UIとか画像とか音楽のような目や耳で感じる
以外のところ全般
• ステージクリアや、レベルアップのテンポだったり
• アイテムや必殺技、魔法などの種類とか性能だったり
• 敵の強さの調整だったり
• 会話やチュートリアルなどの説明だったり
 モバイルのオンラインゲームでは特に大事
⁃ 新しいイベントやステージを(アプリ本体の更新なしに)追加したり
⁃ ユーザが挫折しやすいポイントがあれば、それを修正したり
今日は、比較的スポットのあたりにくい
マスターデータの運用改善の紹介をします
Copyright (C) DeNA Co.,Ltd. All Rights Reserved.
Final Fantasy Record Keeper
 DeNA社内でもっとも複雑※なマスターデータを持つゲーム
⁃ すでに確立された世界観を持つ
• 炎耐性とか、弱点属性とか、前後列、カウンター専用技、ボスの状態の変
化など、かなり複雑な要素が満載だが、ユーザはすでにFFの世界を熟知し
ているので、ほぼフルスペックのFFのメカニズムが実装されている
⁃ しかも、各シリーズの最小公倍数
• 元ネタがあるので、コンテンツ追加の速度は速い!
• スクウェアエニックス社様の大事なIPであるため、文言やアニメーション
の監修もきちんと行う体制になっている
⁃ 開発が並列
• イベントが常に数本走っている
• イベントの開発も常に数本並行で走っている
• 機能追加も並列で!
※ 何人かのチームメンバーにインタビューした結果
Copyright (C) DeNA Co.,Ltd. All Rights Reserved.
マスターデータ運用で悲鳴があがり始める前(2014/11ごろ)
 Google Spreadsheetを使っている
⁃ 外部キー・主キーのような仕組みをGoogle Apps Scriptで実現
⁃ 社内でも実績のある仕組み
• かつてはExcelをリポジトリに入れてたりもしてたが、共同編集のしやすさ
から、今はGoogle Spreadsheetが主流
 Jenkinsを使った運用の仕組みは整備されていた
⁃ マスタデータのcsvを所定の場所に置いてスクリプトを起動すると、
整合性チェックを行ってテストサーバに投入したり、問題なさそう
ならgithub:eにプルリクエストを送ったりできた
⁃ 将来必要だけど今はいらないデータを行ごとにフィルタする機能
Copyright (C) DeNA Co.,Ltd. All Rights Reserved.
外部キー・主キーのような仕組みの例
※なお、このシートはツールのテスト用に大分昔にコピーしたものなので
実際のゲーム内のデータとは異なります
 わかりやすい名前で入力して、CSV生成時に主キーに置き換える仕組み
Copyright (C) DeNA Co.,Ltd. All Rights Reserved.
実際のマスターデータ
※シート間の関係を分析してみた結果
⁃ ゲームプレイに関わる部分のみ
⁃ 関連を複雑にする要素は一部抜いてます 10
Copyright (C) DeNA Co.,Ltd. All Rights Reserved.
FINAL FANTASY Record Keeperの開発の複雑さ
 そもそもデータが複雑で量が多い
⁃ データだけで多くの調整ができるようになっている
• 味方や敵の強さの調整
• 演出の調整
• イベントの追加
• ダンジョンに出現する敵のセットの定義とか配置とか
 同時にたくさんのチームが走る
⁃ 開発チームごとにスキーマを変更して追加のデータを増やしたい!
ということがよくおきる
Copyright (C) DeNA Co.,Ltd. All Rights Reserved.
少しずつ複雑化・・・
 クエスト機能(選択式チュートリアル)入れるよね
 レベルキャップ(50まで)を外す限界突破機能を入れよう
⁃ 限界突破したらレコードマテリアが使えるようにしよう
⁃ レコードマテリア装備したらいろいろな効果が
 必殺技付き武器を提供しよう
⁃ 熟練度を上げると、必殺技をマスターするよ
⁃ 超必殺技つけたらステータスアップあるよ
⁃ ☆5装備の鍛錬あるよ!☆5武器合成で武器のステータス上がるよ
 敵にHPゲージ付けよう
 BRABRAコラボイベントで音楽室を追加しよう
 ブレイク技が強いからボスに耐性つけよう
Copyright (C) DeNA Co.,Ltd. All Rights Reserved.
さまざまな問題が発生・・・
Google
Spreadsheet
Google
Spreadsheet
Google
Spreadsheet
Google
Apps Script
Jenkins
normalize
& check
デプロイ
スクリプト
CSV 1
/db/data/src
開発用
MySQL
CSV 2
/db/data/master
github:e
CSV 3 (dump)
/db/data/dump
本番
MySQL
ひとつのマスターデータを各開発ブラ
ンチで利用している
● 他のチームの変更(不具合)の影
響で作業が止まる
● 気軽に変更できない
ここに来ないと分か
らないエラーも多い
•必要なスプレッドシートを手でひとつずつ出力
•CSVの依存関係を手で解決
•時間がかかる (1時間程度)
•タイムアウトで仕事ができない(とくに夕方)
コンフリクト発生時に
修正が難しい
Copyright (C) DeNA Co.,Ltd. All Rights Reserved.
発生した課題
 複数人でもスプレッドシートのファイルは1つ
⁃ 変なデータを入れてしまうとデータ不整合のエラーで、
全チームの作業が止まってしまう
 エクスポートに時間がかかった
⁃ まっさらな状態からやろうとすると1時間近くかかる
⁃ 変更中に誰かが作業すると結果が変わってしまう
⁃ 調整が大変なので、シート構造変更をやろうとするとエンジニアの
MPがゼロになる
 カラム数が極端に多いシートも出てきた
⁃ 行数が5桁のシートを開くとブラウザが重い・落ちる
 Google Apps Scriptがタイムアウト
⁃ データ数が多くなってきたら、すねて処理してくれない
• 夕方の成功率が50%を切る(巨大なシートだと80%以上失敗)
⁃ Google Apps Scriptは自力でマルチスレッド化できないので遅い
Copyright (C) DeNA Co.,Ltd. All Rights Reserved.
マスターデータが問題を起こすと・・・
 データのエクスポートができない
⁃ データチェックは厳格に行われているがエラーがわかりにくかった
⁃ ログが大量に出力されていて、何が問題かを探すのも大変だった
⁃ 結果として、データ構造に詳しいエンジニアへの問い合わせが
増えて、昼ごはんをお昼に食べれないほど忙しい日々が・・・
たすけて
たすけて ひー
Copyright (C) DeNA Co.,Ltd. All Rights Reserved.
マスターデータが問題を起こすと・・・
 データのエクスポートができない
⁃ データチェックは厳格に行われているがエラーがわかりにくかった
⁃ ログが大量に出力されていて、何が問題かを探すのも大変だった
⁃ 結果として、データ構造に詳しいエンジニアへの問い合わせが
増えて、昼ごはんをお昼に食べれないほど忙しい日々が・・・
たすけて
たすけて ひー
「高橋慧さんがお昼を昼に食べれる」
というのを目標に設定
20
Copyright (C) DeNA Co.,Ltd. All Rights Reserved.
開発規模に見合うスケール可能にする仕組みの導入を検討
1. 縦に長いシートをイベントや定常
などのリリース時期ごとに分割
2. スプレッドシートのファイル群を
グループ(フォルダ)に分ける
3. エクスポートするときにどのグ
ループを出すか、ゲームデザイ
ナーが選択できるようにする
4. 扱うファイル数が増えるので、一
括出力の仕組みが必要そう
Copyright (C) DeNA Co.,Ltd. All Rights Reserved.
改良1: バッチコマンドラインツール化
ファイル一覧
のシート取得
ファイル一覧で指定
された名前のファイル
のキーのリストを作成フォルダの全子要素の
キーと名前を取得
ファイルをダウンロード
ファイルをロードし、
JSONSheet /
JSONFormatを分析
•RefListTemplateを元に
値の置き換え
•CSV出力
 入力ファイルは変更なし
⁃ 運用しながらランニングチェンジ
 Golangを使いスレッドプールでとことん並列化した
⁃ コマンド一発で最新データを一括取得
⁃ 処理自体もずいぶん早い
⁃ ついでに、バイナリなのでアクセストークンとか秘匿できて良い
Copyright (C) DeNA Co.,Ltd. All Rights Reserved.
バッチコマンドラインツール化の結果
 読み込むシート一覧のシートを作成
⁃ 誰がやっても(企画でもエンジニアでも)、ほぼ同じ結果が即座に
得られるようになった
• 問題の追跡が楽になった
• 「データを通すため」の作業が減り、「良いゲームを作るため」の時間が
増えた。
• Jenkinsから呼んだり、コマンドラインから使ったり
⁃ テストサーバに投入するまでの時間が100倍ぐらい早くなった
 エラーメッセージや警告を日本語で出せるだけ出すようにした
⁃ 問題追跡をゲームデザイナーだけでできるように
⁃ 初めて実行した時は警告が4000件ぐらい出た
Copyright (C) DeNA Co.,Ltd. All Rights Reserved.
改良2: 並行開発のサポート
ダンジョン名 リリース
カオス神殿 定常
西の城 定常
[初級]ナルシェ エドガー・マッシュ
[初級]西の炭鉱 エドガー・マッシュ
[初級]マルディアス エンサガ
[中級]マルディアス エンサガ
 同名シートでもリリース時期によって
ファイルを分割できるようにした
⁃ 「このイベントではどのファイルを組
み合わせるか?」というのは柔軟に設
定できるようになった
⁃ 開発始まったばかりの不安定なシート
の参照がスキップされるので、他の人
の影響で仕事が止まることが減った
⁃ ブラウザの負担も減った ダンジョン名 リリース
カオス神殿 定常
西の城 定常
ダンジョン名 リリース
[初級]マルディアス エンサガ
[中級]マルディアス エンサガ
ダンジョン名 リリース
[初級]ナルシェ エドガー・マッシュ
[初級]西の炭鉱 エドガー・マッシュ
Copyright (C) DeNA Co.,Ltd. All Rights Reserved.
並行開発のサポートの実装(1)
ファイル一覧
のシート取得
ファイル一覧で指定
された名前のファイル
のキーのリストを作成フォルダの全子要素の
キーと名前を取得
ファイルをダウンロード
ファイルをロードし、
JSONSheet /
JSONFormatを分析
•RefListTemplateを元に
値の置き換え
•CSV出力
 バッチ化で土台ができていたので、少し改造して「シートを後からマー
ジ」できるようにした
⁃ 全イベント・定常が単一ファイルで管理していたときと、まったく同じCSVを
出せるようにしたので、後工程はそのまま変更なし
⁃ 2月末リリースのライトニングイベントから順次シート切り分け
⁃ ついでにIDが同じなら同名シート内で新しい情報で上書きできるように
同名のシートで
グループ化
Copyright (C) DeNA Co.,Ltd. All Rights Reserved.
並行開発のサポートの実装(2): Rel更新プログラムの改善
 今まではGoogle Apps Scriptで、
スプレッドシートの「データの検
証」機能を設定していた
⁃ 並列処理できないので遅い
⁃ よくタイムアウトで止まる
⁃ 1ファイルずつやらないといけない
データの検証
更新プログラム
Copyright (C) DeNA Co.,Ltd. All Rights Reserved.
 ここもバッチプログラムを作った
⁃ シートに設定するところはGASの方がやりやすかったので最終段はほぼそのまま
⁃ 情報取得してプルダウンメニューの項目リスト作成する部分はバッチ化と同じ
ライブラリを使って並列ダウンロード
⁃ GASは自前でスレッドは起こせないが、ウェブサービス化して並列してリクエス
トを投げれば並列処理できる(x10まで)
並行開発のサポートの実装(2): Rel更新プログラムの改善
データの検証
更新プログラム
30
Copyright (C) DeNA Co.,Ltd. All Rights Reserved.
並行開発のサポートの結果
 新しいカラムの追加などは、イベントごとに行えるようにした
⁃ グループには親子関係があり、親の機能追加は子にも反映
 イベントリリースにあわせて途中からパラメータの変更をできるように
⁃ 例) イベントのキャラ配布にあわせて装備できる武器の
種類を増やしたい
⁃ →リリースタイミングで設定を上書きできるようにした。
 リリース後は?
⁃ カラム追加や上書きは大本のシートに移動する運用ルール
⁃ リリースされている現在の状態は大本のマスターにある、というの
が事故を防ぐのに大事
Copyright (C) DeNA Co.,Ltd. All Rights Reserved.
結果
 リリースしてから1ヶ月で1000回以上実行された
⁃ 900時間以上節約
⁃ といってもチームの人数が減ったわけではなく、負担が減ってその
分多くの調整が回せるようになった
Copyright (C) DeNA Co.,Ltd. All Rights Reserved.
目標も達成!
Copyright (C) DeNA Co.,Ltd. All Rights Reserved.
補助機能(1): ブラウザでプレビュー機能
 問題の追跡に使う
⁃ どのシートから出力されたか?ソースはどこファイルのどの行?
⁃ Relで設定した日本語の名前は何?
⁃ 出力設定はどのファイルから来たの?
Copyright (C) DeNA Co.,Ltd. All Rights Reserved.
補助機能(2): セル・文字単位のdiff表示機能
 カラム数が多いシートもあるし、カラム追加などでは全行差分になって
しまうので、プルリクエストのページだと差分を確認しにくい
 色はgithubに合わせた
Copyright (C) DeNA Co.,Ltd. All Rights Reserved.
補助機能(3): Google Spreadsheet用のblameコマンド
 シートの行ごとに、最終編集者と変更日時を表示
Copyright (C) DeNA Co.,Ltd. All Rights Reserved.
さらなる機能追加とか高速化とか
 リリース時期のフィルタ機能を内部に取り込んだ
⁃ それまではPerlスクリプトでエクスポート後にフィルタしていた
⁃ ツール内部にこの仕組みを取り込むことで、有効なデータかどうか
を判断して、より厳しいチェックが可能になった
• 警告・エラーと二種類メッセージを用意していたが、最終的に「別シート
で同一IDのものを上書きした」以外はすべてエラーになった
• エラーは日本語で出すようにしています
 Golangのxlsxパースは遅いしメモリ食う
⁃ zlib+XMLのパースで、ファイル変更がなくても40秒近くかかる
• Jenkinsサーバ上で、たまにOOMキラーに・・・
⁃ JSON+LZ4(高速な圧縮アルゴリズム)でキャッシュして15秒に
⁃ MessagePack+LZ4でキャッシュすると6秒ぐらいに
Copyright (C) DeNA Co.,Ltd. All Rights Reserved.
ぶっちゃけGolangどうよ?
 スクリプト言語並に書きやすいC/C++
⁃ 速度は十分(xml, jsonのパース以外は)だし並列化しやすい
• 同じことをC/C++でやろうとすると結構ツライ
• 「C++と違ってその日のやる気が生産性に影響しない良い言語」(同僚談)
⁃ IntelliJ IDEA + golangプラグインで開発はしやすかった
⁃ ライブラリも多い
⁃ クロスコンパイルがしやすいのが良い
• Jenkins用(Linux)やデザイナー用(Windows)、エンジニア用(Mac)を
簡単に作ってリリース
⁃ コンパイル時チェックが厳密なのでいじりやすい
• ロジック以外のテストはそんなに書かなくても困らない
• 社内ツールは要望や報告が来て1ヶ月ぶりにコード触るとかが多いので楽
 とはいえ、Jenkins上や開発環境上のツールとしてしか運用していない
ので、サービス運用のノウハウはまだなし
⁃ DeNAで「バリバリ使ってます」とはまだ言えない・・・
⁃ USは使ってます
Copyright (C) DeNA Co.,Ltd. All Rights Reserved.
まとめ
 チーム規模に負けない仕組みを整備した
⁃ 運用を止めずに大幅なワークフローの変更を行った
⁃ 開発期間におけるデータ入力の手間を大分減らすことができた
• きちんとお昼にお昼ごはんを食べられるようになった
⁃ 効率アップは10%じゃなくて10〜100倍だと仕事の流れが変わる
 運用しつづけていくタイトルにおいて、企画とシステム開発は両輪
⁃ プログラマの人は、エディタとかの話好きだよね?
⁃ 企画側も仕組みをがっつり整備していくことで運用がしやすくなる
 他の運用中・新規タイトルにも絶賛水平展開中
40
1 of 33

Recommended

CEDEC2019 大規模モバイルゲーム運用におけるマスタデータ管理事例 by
CEDEC2019 大規模モバイルゲーム運用におけるマスタデータ管理事例CEDEC2019 大規模モバイルゲーム運用におけるマスタデータ管理事例
CEDEC2019 大規模モバイルゲーム運用におけるマスタデータ管理事例sairoutine
8.4K views54 slides
DeNAの最新のマスタデータ管理システム Oyakata の全容 by
DeNAの最新のマスタデータ管理システム Oyakata の全容DeNAの最新のマスタデータ管理システム Oyakata の全容
DeNAの最新のマスタデータ管理システム Oyakata の全容sairoutine
3.6K views29 slides
オンラインゲームの仕組みと工夫 by
オンラインゲームの仕組みと工夫オンラインゲームの仕組みと工夫
オンラインゲームの仕組みと工夫Yuta Imai
869.8K views56 slides
新入社員のための大規模ゲーム開発入門 サーバサイド編 by
新入社員のための大規模ゲーム開発入門 サーバサイド編新入社員のための大規模ゲーム開発入門 サーバサイド編
新入社員のための大規模ゲーム開発入門 サーバサイド編infinite_loop
48.1K views91 slides
DeNAのサーバー"コード"レスアーキテクチャ by
DeNAのサーバー"コード"レスアーキテクチャDeNAのサーバー"コード"レスアーキテクチャ
DeNAのサーバー"コード"レスアーキテクチャHaruto Otake
2.5K views54 slides
ネットワーク ゲームにおけるTCPとUDPの使い分け by
ネットワーク ゲームにおけるTCPとUDPの使い分けネットワーク ゲームにおけるTCPとUDPの使い分け
ネットワーク ゲームにおけるTCPとUDPの使い分けモノビット エンジン
61.4K views63 slides

More Related Content

What's hot

Riderはいいぞ! by
Riderはいいぞ!Riderはいいぞ!
Riderはいいぞ!UnityTechnologiesJapan002
14.4K views145 slides
MagicOnion~C#でゲームサーバを開発しよう~ by
MagicOnion~C#でゲームサーバを開発しよう~MagicOnion~C#でゲームサーバを開発しよう~
MagicOnion~C#でゲームサーバを開発しよう~torisoup
25.9K views176 slides
MagicOnion入門 by
MagicOnion入門MagicOnion入門
MagicOnion入門torisoup
10.4K views37 slides
【Unite Tokyo 2019】Unityだったら簡単!マルチプレイ用ゲームサーバ開発 ~実践編~ by
【Unite Tokyo 2019】Unityだったら簡単!マルチプレイ用ゲームサーバ開発 ~実践編~【Unite Tokyo 2019】Unityだったら簡単!マルチプレイ用ゲームサーバ開発 ~実践編~
【Unite Tokyo 2019】Unityだったら簡単!マルチプレイ用ゲームサーバ開発 ~実践編~UnityTechnologiesJapan002
63.1K views82 slides
ゲーム開発を知らない人にも分かるKLabのゲーム開発運営 by
ゲーム開発を知らない人にも分かるKLabのゲーム開発運営ゲーム開発を知らない人にも分かるKLabのゲーム開発運営
ゲーム開発を知らない人にも分かるKLabのゲーム開発運営KLab Inc. / Tech
163 views73 slides
大規模ゲーム開発における build 高速化と安定化 by
大規模ゲーム開発における build 高速化と安定化大規模ゲーム開発における build 高速化と安定化
大規模ゲーム開発における build 高速化と安定化DeNA
44.9K views22 slides

What's hot(20)

MagicOnion~C#でゲームサーバを開発しよう~ by torisoup
MagicOnion~C#でゲームサーバを開発しよう~MagicOnion~C#でゲームサーバを開発しよう~
MagicOnion~C#でゲームサーバを開発しよう~
torisoup25.9K views
MagicOnion入門 by torisoup
MagicOnion入門MagicOnion入門
MagicOnion入門
torisoup10.4K views
【Unite Tokyo 2019】Unityだったら簡単!マルチプレイ用ゲームサーバ開発 ~実践編~ by UnityTechnologiesJapan002
【Unite Tokyo 2019】Unityだったら簡単!マルチプレイ用ゲームサーバ開発 ~実践編~【Unite Tokyo 2019】Unityだったら簡単!マルチプレイ用ゲームサーバ開発 ~実践編~
【Unite Tokyo 2019】Unityだったら簡単!マルチプレイ用ゲームサーバ開発 ~実践編~
ゲーム開発を知らない人にも分かるKLabのゲーム開発運営 by KLab Inc. / Tech
ゲーム開発を知らない人にも分かるKLabのゲーム開発運営ゲーム開発を知らない人にも分かるKLabのゲーム開発運営
ゲーム開発を知らない人にも分かるKLabのゲーム開発運営
KLab Inc. / Tech163 views
大規模ゲーム開発における build 高速化と安定化 by DeNA
大規模ゲーム開発における build 高速化と安定化大規模ゲーム開発における build 高速化と安定化
大規模ゲーム開発における build 高速化と安定化
DeNA44.9K views
開発速度が速い #とは(LayerX社内資料) by mosa siru
開発速度が速い #とは(LayerX社内資料)開発速度が速い #とは(LayerX社内資料)
開発速度が速い #とは(LayerX社内資料)
mosa siru61.5K views
分散システムについて語らせてくれ by Kumazaki Hiroki
分散システムについて語らせてくれ分散システムについて語らせてくれ
分散システムについて語らせてくれ
Kumazaki Hiroki119.4K views
TextMeshProを使った絵文字対応について by ssuserfefa74
TextMeshProを使った絵文字対応についてTextMeshProを使った絵文字対応について
TextMeshProを使った絵文字対応について
ssuserfefa74551 views
Building the Game Server both API and Realtime via c# by Yoshifumi Kawai
Building the Game Server both API and Realtime via c#Building the Game Server both API and Realtime via c#
Building the Game Server both API and Realtime via c#
Yoshifumi Kawai53.8K views
ドメイン駆動設計をゲーム開発に活かす by 増田 亨
ドメイン駆動設計をゲーム開発に活かすドメイン駆動設計をゲーム開発に活かす
ドメイン駆動設計をゲーム開発に活かす
増田 亨4.8K views
Cocos2d-xを用いた "LINE タワーライジング" の開発事例 by gree_tech
Cocos2d-xを用いた "LINE タワーライジング" の開発事例Cocos2d-xを用いた "LINE タワーライジング" の開発事例
Cocos2d-xを用いた "LINE タワーライジング" の開発事例
gree_tech8.3K views
【Unity道場】AssetGraph入門 〜ノードを駆使しててUnityの面倒な手作業を自動化する方法〜 by Unity Technologies Japan K.K.
【Unity道場】AssetGraph入門 〜ノードを駆使しててUnityの面倒な手作業を自動化する方法〜【Unity道場】AssetGraph入門 〜ノードを駆使しててUnityの面倒な手作業を自動化する方法〜
【Unity道場】AssetGraph入門 〜ノードを駆使しててUnityの面倒な手作業を自動化する方法〜
PHPからgoへの移行で分かったこと by gree_tech
PHPからgoへの移行で分かったことPHPからgoへの移行で分かったこと
PHPからgoへの移行で分かったこと
gree_tech6.4K views
DXとかDevOpsとかのなんかいい感じのやつ 富士通TechLive by Tokoroten Nakayama
DXとかDevOpsとかのなんかいい感じのやつ 富士通TechLiveDXとかDevOpsとかのなんかいい感じのやつ 富士通TechLive
DXとかDevOpsとかのなんかいい感じのやつ 富士通TechLive
Tokoroten Nakayama122.2K views
C#メタプログラミング概略 in 2021 by Atsushi Nakamura
C#メタプログラミング概略 in 2021C#メタプログラミング概略 in 2021
C#メタプログラミング概略 in 2021
Atsushi Nakamura1.1K views
RPGにおけるイベント駆動型の設計と実装 by Koji Morikawa
RPGにおけるイベント駆動型の設計と実装RPGにおけるイベント駆動型の設計と実装
RPGにおけるイベント駆動型の設計と実装
Koji Morikawa9.4K views

Viewers also liked

Unityで本格戦国シュミレーションRPG 開発 by
Unityで本格戦国シュミレーションRPG 開発Unityで本格戦国シュミレーションRPG 開発
Unityで本格戦国シュミレーションRPG 開発dena_study
14.4K views27 slides
「オルタンシア・サーガ」開発の裏側 by
「オルタンシア・サーガ」開発の裏側「オルタンシア・サーガ」開発の裏側
「オルタンシア・サーガ」開発の裏側geechs inc. / geechs株式会社
4.5K views36 slides
リソースのバージョン管理/運用の失敗談と改善策について by
リソースのバージョン管理/運用の失敗談と改善策についてリソースのバージョン管理/運用の失敗談と改善策について
リソースのバージョン管理/運用の失敗談と改善策についてgeechs inc. / geechs株式会社
3.8K views33 slides
DeNAオリジナル ゲーム専用プラットフォーム Sakashoについて by
DeNAオリジナル ゲーム専用プラットフォーム SakashoについてDeNAオリジナル ゲーム専用プラットフォーム Sakashoについて
DeNAオリジナル ゲーム専用プラットフォーム SakashoについてMakoto Haruyama
11K views75 slides
制作を支えたツール達 (パズル戦隊デナレンジャー) by
制作を支えたツール達 (パズル戦隊デナレンジャー)制作を支えたツール達 (パズル戦隊デナレンジャー)
制作を支えたツール達 (パズル戦隊デナレンジャー)dena_study
6.2K views23 slides
DeNAのゲーム開発を支える Game Backend as a Service by
DeNAのゲーム開発を支える Game Backend as a ServiceDeNAのゲーム開発を支える Game Backend as a Service
DeNAのゲーム開発を支える Game Backend as a ServiceMakoto Haruyama
20.4K views50 slides

Viewers also liked(14)

Unityで本格戦国シュミレーションRPG 開発 by dena_study
Unityで本格戦国シュミレーションRPG 開発Unityで本格戦国シュミレーションRPG 開発
Unityで本格戦国シュミレーションRPG 開発
dena_study14.4K views
DeNAオリジナル ゲーム専用プラットフォーム Sakashoについて by Makoto Haruyama
DeNAオリジナル ゲーム専用プラットフォーム SakashoについてDeNAオリジナル ゲーム専用プラットフォーム Sakashoについて
DeNAオリジナル ゲーム専用プラットフォーム Sakashoについて
Makoto Haruyama11K views
制作を支えたツール達 (パズル戦隊デナレンジャー) by dena_study
制作を支えたツール達 (パズル戦隊デナレンジャー)制作を支えたツール達 (パズル戦隊デナレンジャー)
制作を支えたツール達 (パズル戦隊デナレンジャー)
dena_study6.2K views
DeNAのゲーム開発を支える Game Backend as a Service by Makoto Haruyama
DeNAのゲーム開発を支える Game Backend as a ServiceDeNAのゲーム開発を支える Game Backend as a Service
DeNAのゲーム開発を支える Game Backend as a Service
Makoto Haruyama20.4K views
FFRKを支えるWebアプリケーションフレームワークの技術 by dena_study
FFRKを支えるWebアプリケーションフレームワークの技術FFRKを支えるWebアプリケーションフレームワークの技術
FFRKを支えるWebアプリケーションフレームワークの技術
dena_study12.2K views
ガールアックス:リアルタイム通信処理の効率的な実装 by dena_study
ガールアックス:リアルタイム通信処理の効率的な実装ガールアックス:リアルタイム通信処理の効率的な実装
ガールアックス:リアルタイム通信処理の効率的な実装
dena_study5.1K views
FINAL FANTASY
 Record Keeper 演出データについて by dena_study
FINAL FANTASY
 Record Keeper 演出データについてFINAL FANTASY
 Record Keeper 演出データについて
FINAL FANTASY
 Record Keeper 演出データについて
dena_study21.6K views
Game BaaS Implemented in Ruby by dena_study
Game BaaS Implemented in RubyGame BaaS Implemented in Ruby
Game BaaS Implemented in Ruby
dena_study7.5K views
DeNA の新しいネイティブ開発(パズル戦隊デナレンジャー) by dena_study
DeNA の新しいネイティブ開発(パズル戦隊デナレンジャー)DeNA の新しいネイティブ開発(パズル戦隊デナレンジャー)
DeNA の新しいネイティブ開発(パズル戦隊デナレンジャー)
dena_study8.3K views
ガールアックス マルチプレイのリアルタイム通信ゲーム開発入門 by dena_study
ガールアックス マルチプレイのリアルタイム通信ゲーム開発入門ガールアックス マルチプレイのリアルタイム通信ゲーム開発入門
ガールアックス マルチプレイのリアルタイム通信ゲーム開発入門
dena_study3.5K views
DeNA流cocos2d xとの付き合い方 by dena_study
DeNA流cocos2d xとの付き合い方DeNA流cocos2d xとの付き合い方
DeNA流cocos2d xとの付き合い方
dena_study18.1K views
ゲームサーバ開発現場の考え方 by Daisaku Mochizuki
ゲームサーバ開発現場の考え方ゲームサーバ開発現場の考え方
ゲームサーバ開発現場の考え方
Daisaku Mochizuki68.7K views

Similar to FINAL FANTASY Record Keeperのマスターデータを支える技術

DeNAtechcon_DeNAのセキュリティの取り組みと、スマートフォンセキュリティ(same-origin policy) by
DeNAtechcon_DeNAのセキュリティの取り組みと、スマートフォンセキュリティ(same-origin policy)DeNAtechcon_DeNAのセキュリティの取り組みと、スマートフォンセキュリティ(same-origin policy)
DeNAtechcon_DeNAのセキュリティの取り組みと、スマートフォンセキュリティ(same-origin policy)Toshiharu Sugiyama
15.1K views53 slides
アンラーニング by
アンラーニングアンラーニング
アンラーニングYoshiki Shibukawa
17.8K views20 slides
エンジニアとデザイナーの技術交流について by
エンジニアとデザイナーの技術交流についてエンジニアとデザイナーの技術交流について
エンジニアとデザイナーの技術交流についてtatsuya mazaki
743 views16 slides
DeNAインフラの今とこれから - 今編 - by
DeNAインフラの今とこれから - 今編 -DeNAインフラの今とこれから - 今編 -
DeNAインフラの今とこれから - 今編 -Tomoya Kabe
5.5K views36 slides
Unity開発で週イチ呑み会を支える技術 by
Unity開発で週イチ呑み会を支える技術Unity開発で週イチ呑み会を支える技術
Unity開発で週イチ呑み会を支える技術kazuya noshiro
6.2K views60 slides
iOSアプリにおけるリリースフローとCI環境 by
iOSアプリにおけるリリースフローとCI環境iOSアプリにおけるリリースフローとCI環境
iOSアプリにおけるリリースフローとCI環境Toshiyuki Hirata
4.1K views11 slides

Similar to FINAL FANTASY Record Keeperのマスターデータを支える技術(20)

DeNAtechcon_DeNAのセキュリティの取り組みと、スマートフォンセキュリティ(same-origin policy) by Toshiharu Sugiyama
DeNAtechcon_DeNAのセキュリティの取り組みと、スマートフォンセキュリティ(same-origin policy)DeNAtechcon_DeNAのセキュリティの取り組みと、スマートフォンセキュリティ(same-origin policy)
DeNAtechcon_DeNAのセキュリティの取り組みと、スマートフォンセキュリティ(same-origin policy)
Toshiharu Sugiyama15.1K views
エンジニアとデザイナーの技術交流について by tatsuya mazaki
エンジニアとデザイナーの技術交流についてエンジニアとデザイナーの技術交流について
エンジニアとデザイナーの技術交流について
tatsuya mazaki743 views
DeNAインフラの今とこれから - 今編 - by Tomoya Kabe
DeNAインフラの今とこれから - 今編 -DeNAインフラの今とこれから - 今編 -
DeNAインフラの今とこれから - 今編 -
Tomoya Kabe5.5K views
Unity開発で週イチ呑み会を支える技術 by kazuya noshiro
Unity開発で週イチ呑み会を支える技術Unity開発で週イチ呑み会を支える技術
Unity開発で週イチ呑み会を支える技術
kazuya noshiro6.2K views
iOSアプリにおけるリリースフローとCI環境 by Toshiyuki Hirata
iOSアプリにおけるリリースフローとCI環境iOSアプリにおけるリリースフローとCI環境
iOSアプリにおけるリリースフローとCI環境
Toshiyuki Hirata4.1K views
Effective web performance tuning for smartphone by dena_study
Effective web performance tuning for smartphoneEffective web performance tuning for smartphone
Effective web performance tuning for smartphone
dena_study64.8K views
Unityネイティブプラグインマニアクス #denatechcon by DeNA
Unityネイティブプラグインマニアクス #denatechconUnityネイティブプラグインマニアクス #denatechcon
Unityネイティブプラグインマニアクス #denatechcon
DeNA15.7K views
Dangerでpull requestレビューの指摘事項を減らす by Shunsuke Maeda
Dangerでpull requestレビューの指摘事項を減らすDangerでpull requestレビューの指摘事項を減らす
Dangerでpull requestレビューの指摘事項を減らす
Shunsuke Maeda4.6K views
DeNAでのVertica運用 by Shota Suzuki
DeNAでのVertica運用DeNAでのVertica運用
DeNAでのVertica運用
Shota Suzuki6.5K views
強化学習を利用した自律型GameAIの取り組み ~高速自動プレイによるステージ設計支援~ #denatechcon by DeNA
強化学習を利用した自律型GameAIの取り組み ~高速自動プレイによるステージ設計支援~ #denatechcon強化学習を利用した自律型GameAIの取り組み ~高速自動プレイによるステージ設計支援~ #denatechcon
強化学習を利用した自律型GameAIの取り組み ~高速自動プレイによるステージ設計支援~ #denatechcon
DeNA7.6K views
Windows 8 Developers カンファレンス by Kaoru NAKAMURA
Windows 8 Developers カンファレンスWindows 8 Developers カンファレンス
Windows 8 Developers カンファレンス
Kaoru NAKAMURA2.1K views
土下座パラダイスはこうして生まれた by Takafumi Naito
土下座パラダイスはこうして生まれた土下座パラダイスはこうして生まれた
土下座パラダイスはこうして生まれた
Takafumi Naito2.8K views
なぜ私たちは「効率化」を目指すのか(DeNA Games Tokyo) by DeNA Games Tokyo
なぜ私たちは「効率化」を目指すのか(DeNA Games Tokyo)なぜ私たちは「効率化」を目指すのか(DeNA Games Tokyo)
なぜ私たちは「効率化」を目指すのか(DeNA Games Tokyo)
DeNA Games Tokyo451 views
Unityでつくるデジタルサイネージ by Nohina Hidenari
UnityでつくるデジタルサイネージUnityでつくるデジタルサイネージ
Unityでつくるデジタルサイネージ
Nohina Hidenari8.6K views
オタクエンジニアを熱くさせる!モチベーションと効率をあげるチームビルディング_20210611_TechDay#1_3 by 虎の穴 開発室
オタクエンジニアを熱くさせる!モチベーションと効率をあげるチームビルディング_20210611_TechDay#1_3オタクエンジニアを熱くさせる!モチベーションと効率をあげるチームビルディング_20210611_TechDay#1_3
オタクエンジニアを熱くさせる!モチベーションと効率をあげるチームビルディング_20210611_TechDay#1_3
1ヶ月で作り切る!スタートアップのための Rails 爆速開発術 (20170306) by Masataka Sato
1ヶ月で作り切る!スタートアップのための Rails 爆速開発術 (20170306)1ヶ月で作り切る!スタートアップのための Rails 爆速開発術 (20170306)
1ヶ月で作り切る!スタートアップのための Rails 爆速開発術 (20170306)
Masataka Sato1.5K views
CEDEC2015_スマホゲーム開発を支えろ!〜汗と涙のQAエンジニアリング〜 by gree_tech
CEDEC2015_スマホゲーム開発を支えろ!〜汗と涙のQAエンジニアリング〜CEDEC2015_スマホゲーム開発を支えろ!〜汗と涙のQAエンジニアリング〜
CEDEC2015_スマホゲーム開発を支えろ!〜汗と涙のQAエンジニアリング〜
gree_tech8.6K views
サービスを成長させる為の開発について by tatsuya mazaki
サービスを成長させる為の開発についてサービスを成長させる為の開発について
サービスを成長させる為の開発について
tatsuya mazaki5.7K views
虎の穴ラボ エンジニア採用説明資料 .pdf by 虎の穴 開発室
虎の穴ラボ エンジニア採用説明資料 .pdf虎の穴ラボ エンジニア採用説明資料 .pdf
虎の穴ラボ エンジニア採用説明資料 .pdf
虎の穴 開発室53.2K views

Recently uploaded

速習! PostgreSQL専用HAソフトウェア: Patroni(PostgreSQL Conference Japan 2023 発表資料) by
速習! PostgreSQL専用HAソフトウェア: Patroni(PostgreSQL Conference Japan 2023 発表資料)速習! PostgreSQL専用HAソフトウェア: Patroni(PostgreSQL Conference Japan 2023 発表資料)
速習! PostgreSQL専用HAソフトウェア: Patroni(PostgreSQL Conference Japan 2023 発表資料)NTT DATA Technology & Innovation
18 views38 slides
定例会スライド_キャチs 公開用.pdf by
定例会スライド_キャチs 公開用.pdf定例会スライド_キャチs 公開用.pdf
定例会スライド_キャチs 公開用.pdfKeio Robotics Association
111 views64 slides
SSH応用編_20231129.pdf by
SSH応用編_20231129.pdfSSH応用編_20231129.pdf
SSH応用編_20231129.pdficebreaker4
335 views13 slides
今、改めて考えるPostgreSQLプラットフォーム - マルチクラウドとポータビリティ -(PostgreSQL Conference Japan 20... by
今、改めて考えるPostgreSQLプラットフォーム - マルチクラウドとポータビリティ -(PostgreSQL Conference Japan 20...今、改めて考えるPostgreSQLプラットフォーム - マルチクラウドとポータビリティ -(PostgreSQL Conference Japan 20...
今、改めて考えるPostgreSQLプラットフォーム - マルチクラウドとポータビリティ -(PostgreSQL Conference Japan 20...NTT DATA Technology & Innovation
120 views42 slides
Windows 11 information that can be used at the development site by
Windows 11 information that can be used at the development siteWindows 11 information that can be used at the development site
Windows 11 information that can be used at the development siteAtomu Hidaka
88 views41 slides
The Things Stack説明資料 by The Things Industries by
The Things Stack説明資料 by The Things IndustriesThe Things Stack説明資料 by The Things Industries
The Things Stack説明資料 by The Things IndustriesCRI Japan, Inc.
58 views29 slides

Recently uploaded(11)

速習! PostgreSQL専用HAソフトウェア: Patroni(PostgreSQL Conference Japan 2023 発表資料) by NTT DATA Technology & Innovation
速習! PostgreSQL専用HAソフトウェア: Patroni(PostgreSQL Conference Japan 2023 発表資料)速習! PostgreSQL専用HAソフトウェア: Patroni(PostgreSQL Conference Japan 2023 発表資料)
速習! PostgreSQL専用HAソフトウェア: Patroni(PostgreSQL Conference Japan 2023 発表資料)
SSH応用編_20231129.pdf by icebreaker4
SSH応用編_20231129.pdfSSH応用編_20231129.pdf
SSH応用編_20231129.pdf
icebreaker4335 views
今、改めて考えるPostgreSQLプラットフォーム - マルチクラウドとポータビリティ -(PostgreSQL Conference Japan 20... by NTT DATA Technology & Innovation
今、改めて考えるPostgreSQLプラットフォーム - マルチクラウドとポータビリティ -(PostgreSQL Conference Japan 20...今、改めて考えるPostgreSQLプラットフォーム - マルチクラウドとポータビリティ -(PostgreSQL Conference Japan 20...
今、改めて考えるPostgreSQLプラットフォーム - マルチクラウドとポータビリティ -(PostgreSQL Conference Japan 20...
Windows 11 information that can be used at the development site by Atomu Hidaka
Windows 11 information that can be used at the development siteWindows 11 information that can be used at the development site
Windows 11 information that can be used at the development site
Atomu Hidaka88 views
The Things Stack説明資料 by The Things Industries by CRI Japan, Inc.
The Things Stack説明資料 by The Things IndustriesThe Things Stack説明資料 by The Things Industries
The Things Stack説明資料 by The Things Industries
CRI Japan, Inc.58 views
さくらのひやおろし2023 by 法林浩之
さくらのひやおろし2023さくらのひやおろし2023
さくらのひやおろし2023
法林浩之96 views
SNMPセキュリティ超入門 by mkoda
SNMPセキュリティ超入門SNMPセキュリティ超入門
SNMPセキュリティ超入門
mkoda355 views

FINAL FANTASY Record Keeperのマスターデータを支える技術

  • 1. Copyright (C) DeNA Co.,Ltd. All Rights Reserved. 第6回 DeNAゲーム開発勉強会 DeNA史上最大級! FINAL FANTASY Record Keeperの マスターデータを支える技術 2015/08/24 GDI 渋川よしき
  • 2. Copyright (C) DeNA Co.,Ltd. All Rights Reserved. お前だれよ?  前職 ⁃ 自動車会社の社内SE  現職 ⁃ 社内ゲームエンジン用のフレームワーク (クライアント用もサーバ用も)作ったり、 開発支援ツール作ったりいわゆる社内SE ⁃ たまにゲーム開発を手伝ったりもします。 渋川 よしき  プログラミング  C++とかPythonとかGolangとかJavaScriptとか  本  つまみぐい勉強法、アート・オブ・コミュニティ(翻訳)、 Mobageを支える技術、オブジェクト指向JavaScript(翻訳)、 ポモドーロ・テクニック入門(翻訳)、etc
  • 3. Copyright (C) DeNA Co.,Ltd. All Rights Reserved. 新書出ました!  JavaScriptの、最速クライアント用MVCフレームワークの本です! ⁃ 速いのが好きな人や、変化が多いブラウザ周辺技術に疲れた人に オススメ  電子書籍のみです  表紙は黒ムツの仲間 ⁃ 南オセアニアの深海魚 ⁃ 最大75cm ⁃ 確認された最高齢は 100歳を超えるとか
  • 4. Copyright (C) DeNA Co.,Ltd. All Rights Reserved. マスタデータとは?  ゲームを支える要素 ⁃ プログラム ⁃ アセット • 画像とか2Dアニメーションとか3Dモデルとか音楽とか ⁃ マスタデータ • プログラム・アセット以外 • シナリオ、テキスト、敵の強さなどのパラメータ • レベルデザイン(3Dアクションのマップ)的なものはあまりマスターデータ とは言わないかも・・・
  • 5. Copyright (C) DeNA Co.,Ltd. All Rights Reserved. マスタデータとは?  ゲームを支える要素 ⁃ プログラム →プログラマ ⁃ アセット →アーティスト • 画像とか2Dアニメーションとか3Dモデルとか音楽とか ⁃ マスタデータ→ゲームデザイナ • プログラム・アセット以外 • シナリオ、テキスト、敵の強さなどのパラメータ • レベルデザイン(3Dアクションのマップ)的なものはあまりマスターデータ とは言わないかも・・・
  • 6. Copyright (C) DeNA Co.,Ltd. All Rights Reserved. マスターデータの役割  ユーザのプレイサイクルをデザインする ⁃ ユーザ体験のうち、UIとか画像とか音楽のような目や耳で感じる 以外のところ全般 • ステージクリアや、レベルアップのテンポだったり • アイテムや必殺技、魔法などの種類とか性能だったり • 敵の強さの調整だったり • 会話やチュートリアルなどの説明だったり  モバイルのオンラインゲームでは特に大事 ⁃ 新しいイベントやステージを(アプリ本体の更新なしに)追加したり ⁃ ユーザが挫折しやすいポイントがあれば、それを修正したり
  • 7. Copyright (C) DeNA Co.,Ltd. All Rights Reserved. マスターデータの役割  ユーザのプレイサイクルをデザインする ⁃ ユーザ体験のうち、UIとか画像とか音楽のような目や耳で感じる 以外のところ全般 • ステージクリアや、レベルアップのテンポだったり • アイテムや必殺技、魔法などの種類とか性能だったり • 敵の強さの調整だったり • 会話やチュートリアルなどの説明だったり  モバイルのオンラインゲームでは特に大事 ⁃ 新しいイベントやステージを(アプリ本体の更新なしに)追加したり ⁃ ユーザが挫折しやすいポイントがあれば、それを修正したり 今日は、比較的スポットのあたりにくい マスターデータの運用改善の紹介をします
  • 8. Copyright (C) DeNA Co.,Ltd. All Rights Reserved. Final Fantasy Record Keeper  DeNA社内でもっとも複雑※なマスターデータを持つゲーム ⁃ すでに確立された世界観を持つ • 炎耐性とか、弱点属性とか、前後列、カウンター専用技、ボスの状態の変 化など、かなり複雑な要素が満載だが、ユーザはすでにFFの世界を熟知し ているので、ほぼフルスペックのFFのメカニズムが実装されている ⁃ しかも、各シリーズの最小公倍数 • 元ネタがあるので、コンテンツ追加の速度は速い! • スクウェアエニックス社様の大事なIPであるため、文言やアニメーション の監修もきちんと行う体制になっている ⁃ 開発が並列 • イベントが常に数本走っている • イベントの開発も常に数本並行で走っている • 機能追加も並列で! ※ 何人かのチームメンバーにインタビューした結果
  • 9. Copyright (C) DeNA Co.,Ltd. All Rights Reserved. マスターデータ運用で悲鳴があがり始める前(2014/11ごろ)  Google Spreadsheetを使っている ⁃ 外部キー・主キーのような仕組みをGoogle Apps Scriptで実現 ⁃ 社内でも実績のある仕組み • かつてはExcelをリポジトリに入れてたりもしてたが、共同編集のしやすさ から、今はGoogle Spreadsheetが主流  Jenkinsを使った運用の仕組みは整備されていた ⁃ マスタデータのcsvを所定の場所に置いてスクリプトを起動すると、 整合性チェックを行ってテストサーバに投入したり、問題なさそう ならgithub:eにプルリクエストを送ったりできた ⁃ 将来必要だけど今はいらないデータを行ごとにフィルタする機能
  • 10. Copyright (C) DeNA Co.,Ltd. All Rights Reserved. 外部キー・主キーのような仕組みの例 ※なお、このシートはツールのテスト用に大分昔にコピーしたものなので 実際のゲーム内のデータとは異なります  わかりやすい名前で入力して、CSV生成時に主キーに置き換える仕組み
  • 11. Copyright (C) DeNA Co.,Ltd. All Rights Reserved. 実際のマスターデータ ※シート間の関係を分析してみた結果 ⁃ ゲームプレイに関わる部分のみ ⁃ 関連を複雑にする要素は一部抜いてます 10
  • 12. Copyright (C) DeNA Co.,Ltd. All Rights Reserved. FINAL FANTASY Record Keeperの開発の複雑さ  そもそもデータが複雑で量が多い ⁃ データだけで多くの調整ができるようになっている • 味方や敵の強さの調整 • 演出の調整 • イベントの追加 • ダンジョンに出現する敵のセットの定義とか配置とか  同時にたくさんのチームが走る ⁃ 開発チームごとにスキーマを変更して追加のデータを増やしたい! ということがよくおきる
  • 13. Copyright (C) DeNA Co.,Ltd. All Rights Reserved. 少しずつ複雑化・・・  クエスト機能(選択式チュートリアル)入れるよね  レベルキャップ(50まで)を外す限界突破機能を入れよう ⁃ 限界突破したらレコードマテリアが使えるようにしよう ⁃ レコードマテリア装備したらいろいろな効果が  必殺技付き武器を提供しよう ⁃ 熟練度を上げると、必殺技をマスターするよ ⁃ 超必殺技つけたらステータスアップあるよ ⁃ ☆5装備の鍛錬あるよ!☆5武器合成で武器のステータス上がるよ  敵にHPゲージ付けよう  BRABRAコラボイベントで音楽室を追加しよう  ブレイク技が強いからボスに耐性つけよう
  • 14. Copyright (C) DeNA Co.,Ltd. All Rights Reserved. さまざまな問題が発生・・・ Google Spreadsheet Google Spreadsheet Google Spreadsheet Google Apps Script Jenkins normalize & check デプロイ スクリプト CSV 1 /db/data/src 開発用 MySQL CSV 2 /db/data/master github:e CSV 3 (dump) /db/data/dump 本番 MySQL ひとつのマスターデータを各開発ブラ ンチで利用している ● 他のチームの変更(不具合)の影 響で作業が止まる ● 気軽に変更できない ここに来ないと分か らないエラーも多い •必要なスプレッドシートを手でひとつずつ出力 •CSVの依存関係を手で解決 •時間がかかる (1時間程度) •タイムアウトで仕事ができない(とくに夕方) コンフリクト発生時に 修正が難しい
  • 15. Copyright (C) DeNA Co.,Ltd. All Rights Reserved. 発生した課題  複数人でもスプレッドシートのファイルは1つ ⁃ 変なデータを入れてしまうとデータ不整合のエラーで、 全チームの作業が止まってしまう  エクスポートに時間がかかった ⁃ まっさらな状態からやろうとすると1時間近くかかる ⁃ 変更中に誰かが作業すると結果が変わってしまう ⁃ 調整が大変なので、シート構造変更をやろうとするとエンジニアの MPがゼロになる  カラム数が極端に多いシートも出てきた ⁃ 行数が5桁のシートを開くとブラウザが重い・落ちる  Google Apps Scriptがタイムアウト ⁃ データ数が多くなってきたら、すねて処理してくれない • 夕方の成功率が50%を切る(巨大なシートだと80%以上失敗) ⁃ Google Apps Scriptは自力でマルチスレッド化できないので遅い
  • 16. Copyright (C) DeNA Co.,Ltd. All Rights Reserved. マスターデータが問題を起こすと・・・  データのエクスポートができない ⁃ データチェックは厳格に行われているがエラーがわかりにくかった ⁃ ログが大量に出力されていて、何が問題かを探すのも大変だった ⁃ 結果として、データ構造に詳しいエンジニアへの問い合わせが 増えて、昼ごはんをお昼に食べれないほど忙しい日々が・・・ たすけて たすけて ひー
  • 17. Copyright (C) DeNA Co.,Ltd. All Rights Reserved. マスターデータが問題を起こすと・・・  データのエクスポートができない ⁃ データチェックは厳格に行われているがエラーがわかりにくかった ⁃ ログが大量に出力されていて、何が問題かを探すのも大変だった ⁃ 結果として、データ構造に詳しいエンジニアへの問い合わせが 増えて、昼ごはんをお昼に食べれないほど忙しい日々が・・・ たすけて たすけて ひー 「高橋慧さんがお昼を昼に食べれる」 というのを目標に設定 20
  • 18. Copyright (C) DeNA Co.,Ltd. All Rights Reserved. 開発規模に見合うスケール可能にする仕組みの導入を検討 1. 縦に長いシートをイベントや定常 などのリリース時期ごとに分割 2. スプレッドシートのファイル群を グループ(フォルダ)に分ける 3. エクスポートするときにどのグ ループを出すか、ゲームデザイ ナーが選択できるようにする 4. 扱うファイル数が増えるので、一 括出力の仕組みが必要そう
  • 19. Copyright (C) DeNA Co.,Ltd. All Rights Reserved. 改良1: バッチコマンドラインツール化 ファイル一覧 のシート取得 ファイル一覧で指定 された名前のファイル のキーのリストを作成フォルダの全子要素の キーと名前を取得 ファイルをダウンロード ファイルをロードし、 JSONSheet / JSONFormatを分析 •RefListTemplateを元に 値の置き換え •CSV出力  入力ファイルは変更なし ⁃ 運用しながらランニングチェンジ  Golangを使いスレッドプールでとことん並列化した ⁃ コマンド一発で最新データを一括取得 ⁃ 処理自体もずいぶん早い ⁃ ついでに、バイナリなのでアクセストークンとか秘匿できて良い
  • 20. Copyright (C) DeNA Co.,Ltd. All Rights Reserved. バッチコマンドラインツール化の結果  読み込むシート一覧のシートを作成 ⁃ 誰がやっても(企画でもエンジニアでも)、ほぼ同じ結果が即座に 得られるようになった • 問題の追跡が楽になった • 「データを通すため」の作業が減り、「良いゲームを作るため」の時間が 増えた。 • Jenkinsから呼んだり、コマンドラインから使ったり ⁃ テストサーバに投入するまでの時間が100倍ぐらい早くなった  エラーメッセージや警告を日本語で出せるだけ出すようにした ⁃ 問題追跡をゲームデザイナーだけでできるように ⁃ 初めて実行した時は警告が4000件ぐらい出た
  • 21. Copyright (C) DeNA Co.,Ltd. All Rights Reserved. 改良2: 並行開発のサポート ダンジョン名 リリース カオス神殿 定常 西の城 定常 [初級]ナルシェ エドガー・マッシュ [初級]西の炭鉱 エドガー・マッシュ [初級]マルディアス エンサガ [中級]マルディアス エンサガ  同名シートでもリリース時期によって ファイルを分割できるようにした ⁃ 「このイベントではどのファイルを組 み合わせるか?」というのは柔軟に設 定できるようになった ⁃ 開発始まったばかりの不安定なシート の参照がスキップされるので、他の人 の影響で仕事が止まることが減った ⁃ ブラウザの負担も減った ダンジョン名 リリース カオス神殿 定常 西の城 定常 ダンジョン名 リリース [初級]マルディアス エンサガ [中級]マルディアス エンサガ ダンジョン名 リリース [初級]ナルシェ エドガー・マッシュ [初級]西の炭鉱 エドガー・マッシュ
  • 22. Copyright (C) DeNA Co.,Ltd. All Rights Reserved. 並行開発のサポートの実装(1) ファイル一覧 のシート取得 ファイル一覧で指定 された名前のファイル のキーのリストを作成フォルダの全子要素の キーと名前を取得 ファイルをダウンロード ファイルをロードし、 JSONSheet / JSONFormatを分析 •RefListTemplateを元に 値の置き換え •CSV出力  バッチ化で土台ができていたので、少し改造して「シートを後からマー ジ」できるようにした ⁃ 全イベント・定常が単一ファイルで管理していたときと、まったく同じCSVを 出せるようにしたので、後工程はそのまま変更なし ⁃ 2月末リリースのライトニングイベントから順次シート切り分け ⁃ ついでにIDが同じなら同名シート内で新しい情報で上書きできるように 同名のシートで グループ化
  • 23. Copyright (C) DeNA Co.,Ltd. All Rights Reserved. 並行開発のサポートの実装(2): Rel更新プログラムの改善  今まではGoogle Apps Scriptで、 スプレッドシートの「データの検 証」機能を設定していた ⁃ 並列処理できないので遅い ⁃ よくタイムアウトで止まる ⁃ 1ファイルずつやらないといけない データの検証 更新プログラム
  • 24. Copyright (C) DeNA Co.,Ltd. All Rights Reserved.  ここもバッチプログラムを作った ⁃ シートに設定するところはGASの方がやりやすかったので最終段はほぼそのまま ⁃ 情報取得してプルダウンメニューの項目リスト作成する部分はバッチ化と同じ ライブラリを使って並列ダウンロード ⁃ GASは自前でスレッドは起こせないが、ウェブサービス化して並列してリクエス トを投げれば並列処理できる(x10まで) 並行開発のサポートの実装(2): Rel更新プログラムの改善 データの検証 更新プログラム 30
  • 25. Copyright (C) DeNA Co.,Ltd. All Rights Reserved. 並行開発のサポートの結果  新しいカラムの追加などは、イベントごとに行えるようにした ⁃ グループには親子関係があり、親の機能追加は子にも反映  イベントリリースにあわせて途中からパラメータの変更をできるように ⁃ 例) イベントのキャラ配布にあわせて装備できる武器の 種類を増やしたい ⁃ →リリースタイミングで設定を上書きできるようにした。  リリース後は? ⁃ カラム追加や上書きは大本のシートに移動する運用ルール ⁃ リリースされている現在の状態は大本のマスターにある、というの が事故を防ぐのに大事
  • 26. Copyright (C) DeNA Co.,Ltd. All Rights Reserved. 結果  リリースしてから1ヶ月で1000回以上実行された ⁃ 900時間以上節約 ⁃ といってもチームの人数が減ったわけではなく、負担が減ってその 分多くの調整が回せるようになった
  • 27. Copyright (C) DeNA Co.,Ltd. All Rights Reserved. 目標も達成!
  • 28. Copyright (C) DeNA Co.,Ltd. All Rights Reserved. 補助機能(1): ブラウザでプレビュー機能  問題の追跡に使う ⁃ どのシートから出力されたか?ソースはどこファイルのどの行? ⁃ Relで設定した日本語の名前は何? ⁃ 出力設定はどのファイルから来たの?
  • 29. Copyright (C) DeNA Co.,Ltd. All Rights Reserved. 補助機能(2): セル・文字単位のdiff表示機能  カラム数が多いシートもあるし、カラム追加などでは全行差分になって しまうので、プルリクエストのページだと差分を確認しにくい  色はgithubに合わせた
  • 30. Copyright (C) DeNA Co.,Ltd. All Rights Reserved. 補助機能(3): Google Spreadsheet用のblameコマンド  シートの行ごとに、最終編集者と変更日時を表示
  • 31. Copyright (C) DeNA Co.,Ltd. All Rights Reserved. さらなる機能追加とか高速化とか  リリース時期のフィルタ機能を内部に取り込んだ ⁃ それまではPerlスクリプトでエクスポート後にフィルタしていた ⁃ ツール内部にこの仕組みを取り込むことで、有効なデータかどうか を判断して、より厳しいチェックが可能になった • 警告・エラーと二種類メッセージを用意していたが、最終的に「別シート で同一IDのものを上書きした」以外はすべてエラーになった • エラーは日本語で出すようにしています  Golangのxlsxパースは遅いしメモリ食う ⁃ zlib+XMLのパースで、ファイル変更がなくても40秒近くかかる • Jenkinsサーバ上で、たまにOOMキラーに・・・ ⁃ JSON+LZ4(高速な圧縮アルゴリズム)でキャッシュして15秒に ⁃ MessagePack+LZ4でキャッシュすると6秒ぐらいに
  • 32. Copyright (C) DeNA Co.,Ltd. All Rights Reserved. ぶっちゃけGolangどうよ?  スクリプト言語並に書きやすいC/C++ ⁃ 速度は十分(xml, jsonのパース以外は)だし並列化しやすい • 同じことをC/C++でやろうとすると結構ツライ • 「C++と違ってその日のやる気が生産性に影響しない良い言語」(同僚談) ⁃ IntelliJ IDEA + golangプラグインで開発はしやすかった ⁃ ライブラリも多い ⁃ クロスコンパイルがしやすいのが良い • Jenkins用(Linux)やデザイナー用(Windows)、エンジニア用(Mac)を 簡単に作ってリリース ⁃ コンパイル時チェックが厳密なのでいじりやすい • ロジック以外のテストはそんなに書かなくても困らない • 社内ツールは要望や報告が来て1ヶ月ぶりにコード触るとかが多いので楽  とはいえ、Jenkins上や開発環境上のツールとしてしか運用していない ので、サービス運用のノウハウはまだなし ⁃ DeNAで「バリバリ使ってます」とはまだ言えない・・・ ⁃ USは使ってます
  • 33. Copyright (C) DeNA Co.,Ltd. All Rights Reserved. まとめ  チーム規模に負けない仕組みを整備した ⁃ 運用を止めずに大幅なワークフローの変更を行った ⁃ 開発期間におけるデータ入力の手間を大分減らすことができた • きちんとお昼にお昼ごはんを食べられるようになった ⁃ 効率アップは10%じゃなくて10〜100倍だと仕事の流れが変わる  運用しつづけていくタイトルにおいて、企画とシステム開発は両輪 ⁃ プログラマの人は、エディタとかの話好きだよね? ⁃ 企画側も仕組みをがっつり整備していくことで運用がしやすくなる  他の運用中・新規タイトルにも絶賛水平展開中 40