Movatterモバイル変換


[0]ホーム

URL:


SlideShare a Scribd company logo

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

Download as PPTX, PDF
192 likes85,969 views
D
dena_study

DeNA史上最大級のマスターデータの運用改善。

1 of 33
Downloaded 132 times
1
2
3
4
5
6
7
Most read
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
Most read
23
24
Most read
25
26
27
28
29
30
31
32
33
Copyright (C) DeNA Co.,Ltd. All Rights Reserved.第6回 DeNAゲーム開発勉強会DeNA史上最大級!FINAL FANTASY Record Keeperのマスターデータを支える技術2015/08/24GDI 渋川よしき
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.さまざまな問題が発生・・・GoogleSpreadsheetGoogleSpreadsheetGoogleSpreadsheetGoogleApps ScriptJenkinsnormalize& checkデプロイスクリプトCSV 1/db/data/src開発用MySQLCSV 2/db/data/mastergithub:eCSV 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
Ad

Recommended

PPTX
CEDEC2019 大規模モバイルゲーム運用におけるマスタデータ管理事例
sairoutine
 
PPTX
ゲームエンジニアのためのデータベース設計
sairoutine
 
PDF
ソーシャルゲームのためのデータベース設計
Yoshinori Matsunobu
 
PDF
[CEDEC 2021] 運用中タイトルでも怖くない! 『メルクストーリア』におけるハイパフォーマンス・ローコストなリアルタイム通信技術の導入事例
Naoya Kishimoto
 
PDF
Spring Security 5.0 解剖速報
Takuya Iwatsuka
 
PDF
Kubernetesのしくみ やさしく学ぶ 内部構造とアーキテクチャー
Toru Makabe
 
PDF
PostgreSQLをKubernetes上で活用するためのOperator紹介!(Cloud Native Database Meetup #3 発表資料)
NTT DATA Technology & Innovation
 
PPTX
DeNAの最新のマスタデータ管理システム Oyakata の全容
sairoutine
 
PDF
RESTful Web アプリの設計レビューの話
Takuto Wada
 
PDF
【Unite Tokyo 2018】さては非同期だなオメー!async/await完全に理解しよう
Unity Technologies Japan K.K.
 
PDF
インフラエンジニアの綺麗で優しい手順書の書き方
Shohei Koyama
 
PDF
SQLアンチパターン 幻の第26章「とりあえず削除フラグ」
Takuto Wada
 
PPTX
SPAセキュリティ入門~PHP Conference Japan 2021
Hiroshi Tokumaru
 
PDF
【Unite Tokyo 2019】Unityだったら簡単!マルチプレイ用ゲームサーバ開発 ~実践編~
UnityTechnologiesJapan002
 
PDF
テスト文字列に「うんこ」と入れるな
Kentaro Matsui
 
PDF
AWSではじめるMLOps
MariOhbuchi
 
PDF
vSphere環境での自動化とテスト
富士通クラウドテクノロジーズ株式会社
 
PDF
最適なOpenJDKディストリビューションの選び方 #codetokyo19B3 #ccc_l5
Takahiro YAMADA
 
PPTX
脱RESTful API設計の提案
樽八 仲川
 
PDF
GraphQL入門 (AWS AppSync)
Amazon Web Services Japan
 
PPTX
イベント・ソーシングを知る
Shuhei Fujita
 
PDF
ゼロから作るKubernetesによるJupyter as a Service ー Kubernetes Meetup Tokyo #43
Preferred Networks
 
PPTX
システム間連携を担うSpring Integrationのエンタープライズ開発での活用
apkiban
 
PDF
ゲームアーキテクチャパターン (Aurora Serverless / DynamoDB)
Amazon Web Services Japan
 
PDF
入門 Kubeflow ~Kubernetesで機械学習をはじめるために~ (NTT Tech Conference #4 講演資料)
NTT DATA Technology & Innovation
 
PDF
BuildKitの概要と最近の機能
Kohei Tokunaga
 
PDF
SQL大量発行処理をいかにして高速化するか
Shogo Wakayama
 
PPTX
スマホゲームのチート手法とその対策 [DeNA TechCon 2019]
DeNA
 
PPTX
Unityで本格戦国シュミレーションRPG 開発
dena_study
 
PDF
「オルタンシア・サーガ」開発の裏側
geechs inc. / geechs株式会社
 

More Related Content

What's hot(20)

PDF
RESTful Web アプリの設計レビューの話
Takuto Wada
 
PDF
【Unite Tokyo 2018】さては非同期だなオメー!async/await完全に理解しよう
Unity Technologies Japan K.K.
 
PDF
インフラエンジニアの綺麗で優しい手順書の書き方
Shohei Koyama
 
PDF
SQLアンチパターン 幻の第26章「とりあえず削除フラグ」
Takuto Wada
 
PPTX
SPAセキュリティ入門~PHP Conference Japan 2021
Hiroshi Tokumaru
 
PDF
【Unite Tokyo 2019】Unityだったら簡単!マルチプレイ用ゲームサーバ開発 ~実践編~
UnityTechnologiesJapan002
 
PDF
テスト文字列に「うんこ」と入れるな
Kentaro Matsui
 
PDF
AWSではじめるMLOps
MariOhbuchi
 
PDF
vSphere環境での自動化とテスト
富士通クラウドテクノロジーズ株式会社
 
PDF
最適なOpenJDKディストリビューションの選び方 #codetokyo19B3 #ccc_l5
Takahiro YAMADA
 
PPTX
脱RESTful API設計の提案
樽八 仲川
 
PDF
GraphQL入門 (AWS AppSync)
Amazon Web Services Japan
 
PPTX
イベント・ソーシングを知る
Shuhei Fujita
 
PDF
ゼロから作るKubernetesによるJupyter as a Service ー Kubernetes Meetup Tokyo #43
Preferred Networks
 
PPTX
システム間連携を担うSpring Integrationのエンタープライズ開発での活用
apkiban
 
PDF
ゲームアーキテクチャパターン (Aurora Serverless / DynamoDB)
Amazon Web Services Japan
 
PDF
入門 Kubeflow ~Kubernetesで機械学習をはじめるために~ (NTT Tech Conference #4 講演資料)
NTT DATA Technology & Innovation
 
PDF
BuildKitの概要と最近の機能
Kohei Tokunaga
 
PDF
SQL大量発行処理をいかにして高速化するか
Shogo Wakayama
 
PPTX
スマホゲームのチート手法とその対策 [DeNA TechCon 2019]
DeNA
 
RESTful Web アプリの設計レビューの話
Takuto Wada
 
【Unite Tokyo 2018】さては非同期だなオメー!async/await完全に理解しよう
Unity Technologies Japan K.K.
 
インフラエンジニアの綺麗で優しい手順書の書き方
Shohei Koyama
 
SQLアンチパターン 幻の第26章「とりあえず削除フラグ」
Takuto Wada
 
SPAセキュリティ入門~PHP Conference Japan 2021
Hiroshi Tokumaru
 
【Unite Tokyo 2019】Unityだったら簡単!マルチプレイ用ゲームサーバ開発 ~実践編~
UnityTechnologiesJapan002
 
テスト文字列に「うんこ」と入れるな
Kentaro Matsui
 
AWSではじめるMLOps
MariOhbuchi
 
vSphere環境での自動化とテスト
富士通クラウドテクノロジーズ株式会社
 
最適なOpenJDKディストリビューションの選び方 #codetokyo19B3 #ccc_l5
Takahiro YAMADA
 
脱RESTful API設計の提案
樽八 仲川
 
GraphQL入門 (AWS AppSync)
Amazon Web Services Japan
 
イベント・ソーシングを知る
Shuhei Fujita
 
ゼロから作るKubernetesによるJupyter as a Service ー Kubernetes Meetup Tokyo #43
Preferred Networks
 
システム間連携を担うSpring Integrationのエンタープライズ開発での活用
apkiban
 
ゲームアーキテクチャパターン (Aurora Serverless / DynamoDB)
Amazon Web Services Japan
 
入門 Kubeflow ~Kubernetesで機械学習をはじめるために~ (NTT Tech Conference #4 講演資料)
NTT DATA Technology & Innovation
 
BuildKitの概要と最近の機能
Kohei Tokunaga
 
SQL大量発行処理をいかにして高速化するか
Shogo Wakayama
 
スマホゲームのチート手法とその対策 [DeNA TechCon 2019]
DeNA
 

Viewers also liked(14)

PPTX
Unityで本格戦国シュミレーションRPG 開発
dena_study
 
PDF
「オルタンシア・サーガ」開発の裏側
geechs inc. / geechs株式会社
 
PPTX
リソースのバージョン管理/運用の失敗談と改善策について
geechs inc. / geechs株式会社
 
PDF
DeNAオリジナル ゲーム専用プラットフォーム Sakashoについて
Makoto Haruyama
 
PPT
制作を支えたツール達 (パズル戦隊デナレンジャー)
dena_study
 
PDF
DeNAのゲーム開発を支える Game Backend as a Service
Makoto Haruyama
 
PDF
FFRKを支えるWebアプリケーションフレームワークの技術
dena_study
 
PDF
ガールアックス:リアルタイム通信処理の効率的な実装
dena_study
 
PDF
FINAL FANTASY
 Record Keeper 演出データについて
dena_study
 
PDF
Game BaaS Implemented in Ruby
dena_study
 
PDF
DeNA の新しいネイティブ開発(パズル戦隊デナレンジャー)
dena_study
 
PDF
ガールアックス マルチプレイのリアルタイム通信ゲーム開発入門
dena_study
 
PDF
DeNA流cocos2d xとの付き合い方
dena_study
 
PDF
ゲームサーバ開発現場の考え方
Daisaku Mochizuki
 
Unityで本格戦国シュミレーションRPG 開発
dena_study
 
「オルタンシア・サーガ」開発の裏側
geechs inc. / geechs株式会社
 
リソースのバージョン管理/運用の失敗談と改善策について
geechs inc. / geechs株式会社
 
DeNAオリジナル ゲーム専用プラットフォーム Sakashoについて
Makoto Haruyama
 
制作を支えたツール達 (パズル戦隊デナレンジャー)
dena_study
 
DeNAのゲーム開発を支える Game Backend as a Service
Makoto Haruyama
 
FFRKを支えるWebアプリケーションフレームワークの技術
dena_study
 
ガールアックス:リアルタイム通信処理の効率的な実装
dena_study
 
FINAL FANTASY
 Record Keeper 演出データについて
dena_study
 
Game BaaS Implemented in Ruby
dena_study
 
DeNA の新しいネイティブ開発(パズル戦隊デナレンジャー)
dena_study
 
ガールアックス マルチプレイのリアルタイム通信ゲーム開発入門
dena_study
 
DeNA流cocos2d xとの付き合い方
dena_study
 
ゲームサーバ開発現場の考え方
Daisaku Mochizuki
 
Ad

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

PPTX
その後のDeNAのネイティブアプリ開発 #denatechcon
DeNA
 
PPTX
FINAL FANTASY Record Keeperを支えたGolang
Yoshiki Shibukawa
 
PPTX
レガシーな Perl システムに DDD (ドメイン駆動設計)を取り入れる
sairoutine
 
PDF
モバイルゲームの「大規模な開発」かつ「高頻度の更新」を実現するための開発環境整備の取り組み
MorioImai
 
PDF
Databasedesignforsocialgames 110115195940-phpapp02
hideki hasegawa
 
PPTX
Bigdata 2012 06-03
Daisuke Ito
 
PDF
ソーシャルゲームの為のデータベース設計
kaminashi
 
PPTX
Cedec2012 ai-contest-design-patterns-principles
Hironori Washizaki
 
PPTX
モバイルゲームのためのデータ分析
AtsushiTakada1
 
PDF
プログラムの大海に溺れないために
Zenji Kanzaki
 
PDF
[C16] インメモリ分散KVSの弱点。一貫性が崩れる原因と、それを克服する技術とは? by Taichi Umeda
Insight Technology, Inc.
 
PDF
とことんF#よぷよ! F# + XNA ゲームプログラミング入門
zecl1231
 
PPTX
企業等に蓄積されたデータを分析するための処理機能の提案
Toshiyuki Shimono
 
PPTX
ビッグデータとioDriveの夕べ:ドリコムのデータ分析環境のお話
Tokoroten Nakayama
 
PPTX
DeNA内製ゲームエンジンの現状と目指す未来 #denatechcon
DeNA
 
PPTX
[141004] cedec 2014 참관기 & 강연 리뷰 #1
MinGeun Park
 
PDF
『Mobageの大規模データマイニング活用と 意思決定』- #IBIS 2012 -ビジネスと機械学習の接点-
Koichi Hamada
 
PPTX
AI/MLシステムにおけるビッグデータとの付き合い方
Shota Suzuki
 
PDF
『問題解決力を鍛える!アルゴリズムとデータ構造』出版記念講演
Kensuke Otsuki
 
PPT
ILE-RPG Study 001
Yoshiki Ushida
 
その後のDeNAのネイティブアプリ開発 #denatechcon
DeNA
 
FINAL FANTASY Record Keeperを支えたGolang
Yoshiki Shibukawa
 
レガシーな Perl システムに DDD (ドメイン駆動設計)を取り入れる
sairoutine
 
モバイルゲームの「大規模な開発」かつ「高頻度の更新」を実現するための開発環境整備の取り組み
MorioImai
 
Databasedesignforsocialgames 110115195940-phpapp02
hideki hasegawa
 
Bigdata 2012 06-03
Daisuke Ito
 
ソーシャルゲームの為のデータベース設計
kaminashi
 
Cedec2012 ai-contest-design-patterns-principles
Hironori Washizaki
 
モバイルゲームのためのデータ分析
AtsushiTakada1
 
プログラムの大海に溺れないために
Zenji Kanzaki
 
[C16] インメモリ分散KVSの弱点。一貫性が崩れる原因と、それを克服する技術とは? by Taichi Umeda
Insight Technology, Inc.
 
とことんF#よぷよ! F# + XNA ゲームプログラミング入門
zecl1231
 
企業等に蓄積されたデータを分析するための処理機能の提案
Toshiyuki Shimono
 
ビッグデータとioDriveの夕べ:ドリコムのデータ分析環境のお話
Tokoroten Nakayama
 
DeNA内製ゲームエンジンの現状と目指す未来 #denatechcon
DeNA
 
[141004] cedec 2014 참관기 & 강연 리뷰 #1
MinGeun Park
 
『Mobageの大規模データマイニング活用と 意思決定』- #IBIS 2012 -ビジネスと機械学習の接点-
Koichi Hamada
 
AI/MLシステムにおけるビッグデータとの付き合い方
Shota Suzuki
 
『問題解決力を鍛える!アルゴリズムとデータ構造』出版記念講演
Kensuke Otsuki
 
ILE-RPG Study 001
Yoshiki Ushida
 
Ad

Recently uploaded(10)

PDF
Hyperledger Fabric最新v3.x系での機能強化、変更点にキャッチアップ!
LFDT Tokyo Meetup
 
PDF
ABC2025S LT講演「世界の窓から Androidこんにちは2025」アプリ自動生成の将来?ロボティクスの夢再び?
嶋 是一 (Yoshikazu SHIMA)
 
PDF
20250710_Devinで切り拓くDB革命_〜価値創出に集中せよ〜.pdf
Masaki Yamakawa
 
PDF
生成AIパネルトーク(Interop25Tokyo APPS JAPAN M1-07,M2-07 嶋ポジショントーク)
嶋 是一 (Yoshikazu SHIMA)
 
PDF
[Hardening Designers Confernece 2025]ランサムウェアでの見えざるログ・見えるログ
kataware
 
PDF
Hyperledger Fabric公式サンプル fabric-samples徹底解説
LFDT Tokyo Meetup
 
PDF
SIG-AUDIO 2025 Vol.02 オンラインセミナー SIG-Audioプレゼン資料_オーディオプラグイン開発_塩澤達矢.pdf
IGDA Japan SIG-Audio
 
PDF
20250630_aws_reinforce_2025_aws_sheild_network_security_director
uedayuki
 
PDF
プライバシ保護のためのインターネットアーキテクチャの進化 (2025-07-11)
Jun Kurihara
 
PDF
人気ブロックチェーン基盤「Hyperledger Fabric」最新版を動かしてみた!
LFDT Tokyo Meetup
 
Hyperledger Fabric最新v3.x系での機能強化、変更点にキャッチアップ!
LFDT Tokyo Meetup
 
ABC2025S LT講演「世界の窓から Androidこんにちは2025」アプリ自動生成の将来?ロボティクスの夢再び?
嶋 是一 (Yoshikazu SHIMA)
 
20250710_Devinで切り拓くDB革命_〜価値創出に集中せよ〜.pdf
Masaki Yamakawa
 
生成AIパネルトーク(Interop25Tokyo APPS JAPAN M1-07,M2-07 嶋ポジショントーク)
嶋 是一 (Yoshikazu SHIMA)
 
[Hardening Designers Confernece 2025]ランサムウェアでの見えざるログ・見えるログ
kataware
 
Hyperledger Fabric公式サンプル fabric-samples徹底解説
LFDT Tokyo Meetup
 
SIG-AUDIO 2025 Vol.02 オンラインセミナー SIG-Audioプレゼン資料_オーディオプラグイン開発_塩澤達矢.pdf
IGDA Japan SIG-Audio
 
20250630_aws_reinforce_2025_aws_sheild_network_security_director
uedayuki
 
プライバシ保護のためのインターネットアーキテクチャの進化 (2025-07-11)
Jun Kurihara
 
人気ブロックチェーン基盤「Hyperledger Fabric」最新版を動かしてみた!
LFDT Tokyo Meetup
 

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

  • 1.Copyright (C) DeNA Co.,Ltd. All Rights Reserved.第6回 DeNAゲーム開発勉強会DeNA史上最大級!FINAL FANTASY Record Keeperのマスターデータを支える技術2015/08/24GDI 渋川よしき
  • 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.さまざまな問題が発生・・・GoogleSpreadsheetGoogleSpreadsheetGoogleSpreadsheetGoogleApps ScriptJenkinsnormalize& checkデプロイスクリプトCSV 1/db/data/src開発用MySQLCSV 2/db/data/mastergithub:eCSV 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

[8]ページ先頭

©2009-2025 Movatter.jp