いまどきのゲーム制作環境
エディター群とそのバックエンド、開発スタッフ間のコミュニケーションの具体的な方法解説
http://cedec.cesa.or.jp/2015/session/ENG/3250.html
興味深いところのみ抜粋。
アセット共有
アセット共有で一番やっかいな問題は競合。
解決手段として以下が挙げられる。
- ロック
- ファイル分割
- マージ
△ ロック
競合は避けられるが、ロック中は他の作業者の作業を止める可能性がある。
△ ファイル分割
ある程度の細分化は効果はある。しかし根本的な解決にならない。
◯ マージ
最終的にはやはりマージするしかない。
アセットマージ
ここでは自社でマージツールを作っているとのこと。
アセット自体も自社フォーマット。
アセットはマージしやすいXMLかJSONで作成。
マージする際は構文に気をつける事。
マージツール
ファイルでは無く操作リストをマージする。
元ファイル | 自分が編集したファイル | 他人が編集したファイル | マージ後のファイル |
---|---|---|---|
base | mine | thier | result |
競合が発生した場合はは以下のフローでマージ。
- baseにmineの操作リストを反映
- baseにthierの操作リストを反映
コンフリクト
ユーザに選択させるのは難しいのでルール化する。
例えば、先出し優先など。
そうすればユーザは混乱しない。
バグでは無くまじマージを疑え
ユーザは自分がコミットしたものがおかしいとまずバグを疑ってくる。
エンジニアの工数を取らせないためにもまずマージを疑え。
テレメトリ
テレメトリとは遠隔測定法。
例えば、配布したアプリやツールの情報を測定したりすること。
ログをサーバに保存する。
NASにテキストとして保存するのは問題がある。
- アクセスが限定される
- 可読性が悪い
- ログはフォーマットがそれぞれ異なる場合がある
データベースに保存
RESTfulAPIでJSONを送信しMongoDBに保存する。
ビューワを作成し可読性を高める。
送信する例
・クラッシュレポート
・データ収集
安定した環境の提供
安定した環境を提供しないとにどうなる?
A. 問題が発生して開発が止まる
CI(継続的インテグレーション)の導入
ツールはJenkinsを使用。
CIで以下を保証する。
- 起動
- 終了
- メモリリーク発見
配布
起動時にバージョンチェックして古いバージョンはプレイさせない。
ネイティブキャッシュ
ネイティブキャシュとは・・・
高速にアクセス出来るキャッシュを作成し、オーバーヘッドを軽減する。
ローカル環境でネイティブキャシュを作成するのは時間がかかり、
時間を浪費してしまう。
ファイルが更新された際にコミットをJenkinsにHookし、
更新されたファイルのネイティブキャシュを作成する。