67
剣と魔法のログレス いにしえの女神 株式会社 Aiming 神部 公輔 山藤 智之 西村 哲弥 ~スマホ時代の MMORPG を支える技術

剣と魔法のログレス いにしえの女神 〜スマホ時代の MMORPG を支える技術

Embed Size (px)

DESCRIPTION

2014/9/2 CEDEC2014にて講演させて頂いた 「剣と魔法のログレス いにしえの女神 〜スマホ時代の MMORPG を支える技術」 で使用した資料です。

Citation preview

Page 1: 剣と魔法のログレス いにしえの女神 〜スマホ時代の MMORPG を支える技術

剣と魔法のログレス いにしえの女神

株式会社 Aiming 神部 公輔 山藤 智之 西村 哲弥

~スマホ時代の MMORPG を支える技術

Page 2: 剣と魔法のログレス いにしえの女神 〜スマホ時代の MMORPG を支える技術

株式会社 Aiming から来ました神部 公輔クライアントエンジニア。元家庭用ゲーム開発者、2006年からオンラインゲームの開発に従事。

山藤 智之リードエンジニア兼サーバエンジニア。元WEB系R&D、2007年からオンラインゲームの開発に従事。

西村 哲弥クライアントエンジニア。元家庭用ゲーム開発者、2004年からオンラインゲームの開発に従事。

Page 3: 剣と魔法のログレス いにしえの女神 〜スマホ時代の MMORPG を支える技術

セッションの内容剣と魔法のログレスの紹介

開発環境について

ゲームクライアントについて

リアルタイム通信について

サーバについて

チャットシステムについて

リリースまでに起きた問題と、残された課題について

Page 4: 剣と魔法のログレス いにしえの女神 〜スマホ時代の MMORPG を支える技術

剣と魔法のログレスって?

Page 5: 剣と魔法のログレス いにしえの女神 〜スマホ時代の MMORPG を支える技術

「剣と魔法のログレス いにしえの女神」は 株式会社マーベラス様との 共同事業タイトルです。

Page 6: 剣と魔法のログレス いにしえの女神 〜スマホ時代の MMORPG を支える技術

「剣と魔法のログレス」という Flashで作成されたブラウザ型のMMORPGで

「剣と魔法のログレス いにしえの女神」の前作に あたるタイトルがあります。

Page 7: 剣と魔法のログレス いにしえの女神 〜スマホ時代の MMORPG を支える技術

スマホで本格MMORPGを実現

Page 8: 剣と魔法のログレス いにしえの女神 〜スマホ時代の MMORPG を支える技術

ランキング推移

App StoreGoogle Play

Page 9: 剣と魔法のログレス いにしえの女神 〜スマホ時代の MMORPG を支える技術

ランキング推移

App Store

Page 10: 剣と魔法のログレス いにしえの女神 〜スマホ時代の MMORPG を支える技術

剣と魔法のログレス いにしえの女神 とは?

600種類を超える 多彩な装備

大勢の仲間と共に 壮大なストーリーを堪能

剣と魔法のログレスとは?

大勢の仲間と 白熱の

リアルタイム通信戦闘

強力な コミュニティ機能を実装

累計300万ダウンロード突破

(2014年8月6日時点)

Page 11: 剣と魔法のログレス いにしえの女神 〜スマホ時代の MMORPG を支える技術

大迫力のリアルタイム通信バトル

お手軽な !シンボルエンカウント方式

簡単タップ操作ながら 大人数での戦略性の高い リアルタイム通信バトルを実現

仲間(他プレイヤー)達との連携が !勝負を左右する

Page 12: 剣と魔法のログレス いにしえの女神 〜スマホ時代の MMORPG を支える技術

充実のコミュニケーション機能楽しさ広がるプレイヤー同士のコミュニケーション

エモーション機能

グループチャット

かわいいポーズで自分をアピール

気の合う仲間と自由にグループ作成

Page 13: 剣と魔法のログレス いにしえの女神 〜スマホ時代の MMORPG を支える技術

ログレスを支える 開発環境

Page 14: 剣と魔法のログレス いにしえの女神 〜スマホ時代の MMORPG を支える技術

クライアント サーバ 内製ツールなど開発補助に利用

プログラム言語 C++11(VC++, GCC, Clang), Lua

C++11(GCC), Python

Python, C#, Perl, Ruby, Shell script

ライブラリームワーク

Cocos2d-x(2.x), Boost

Boost, Flask, Google Test

Cocos2d-x, Protocol Buffers, Adobe AIR,

ツールスなど

Visual Studio 2013, Eclipse, NDK, Xcode

VMware, MySQL, Apache, mod_wsgi

Jenkins, Gerrit, Cppcheck, Redmine

バージョン管理 Git

外部サービス Google Drive, Trello

開発環境

Page 15: 剣と魔法のログレス いにしえの女神 〜スマホ時代の MMORPG を支える技術

クライアント サーバ 内製ツールなど開発補助に利用

プログラム言語 C++11(VC++, GCC, Clang), Lua

C++11(GCC), Python

Python, C#, Perl, Ruby, Shell script

ライブラリームワーク

Cocos2d-x(2.x), Boost

Boost, Flask, Google Test

Cocos2d-x, Protocol Buffers, Adobe AIR,

ツールスなど

Visual Studio 2013, Eclipse, NDK, Xcode

VMware, MySQL, Apache, mod_wsgi

Jenkins, Gerrit, Cppcheck, Redmine

バージョン管理 Git

外部サービス Google Drive, Trello

ゲームクライアントは WindowsでVisual Studioを利用して開発

Page 16: 剣と魔法のログレス いにしえの女神 〜スマホ時代の MMORPG を支える技術

クライアント サーバ 内製ツールなど開発補助に利用

プログラム言語 C++11(VC++, GCC, Clang), Lua

C++11(GCC), Python

Python, C#, Perl, Ruby, Shell script

ライブラリームワーク

Cocos2d-x(2.x), Boost

Boost, Flask, Google Test

Cocos2d-x, Protocol Buffers, Adobe AIR,

ツールスなど

Visual Studio 2013, Eclipse, NDK, Xcode

VMware, MySQL, Apache, mod_wsgi

Jenkins, Gerrit, Cppcheck, Redmine

バージョン管理 Git

外部サービス Google Drive, Trello

サーバはVMwareなど仮想マシンで開発

Page 17: 剣と魔法のログレス いにしえの女神 〜スマホ時代の MMORPG を支える技術

クライアント サーバ 内製ツールなど開発補助に利用

プログラム言語 C++11(VC++, GCC, Clang), Lua

C++11(GCC), Python

Python, C#, Perl, Ruby, Shell script

ライブラリームワーク

Cocos2d-x(2.x), Boost

Boost, Flask, Google Test

Cocos2d-x, Protocol Buffers, Adobe AIR,

ツールスなど

Visual Studio 2013, Eclipse, NDK, Xcode

VMware, MySQL, Apache, mod_wsgi

Jenkins, Gerrit, Cppcheck, Redmine

バージョン管理 Git

外部サービス Google Drive, Trello

WebサーバにはPythonを利用

Page 18: 剣と魔法のログレス いにしえの女神 〜スマホ時代の MMORPG を支える技術

クライアント サーバ 内製ツールなど開発補助に利用

プログラム言語 C++11(VC++, GCC, Clang), Lua

C++11(GCC), Python

Python, C#, Perl, Ruby, Shell script

ライブラリームワーク

Cocos2d-x(2.x), Boost

Boost, Flask, Google Test

Cocos2d-x, Protocol Buffers, Adobe AIR,

ツールスなど

Visual Studio 2013, Eclipse, NDK, Xcode

VMware, MySQL, Apache, mod_wsgi

Jenkins, Gerrit, cppcheck, Redmine

バージョン管理 Git

外部サービス Google Drive, Trello

開発のフローなど

Page 19: 剣と魔法のログレス いにしえの女神 〜スマホ時代の MMORPG を支える技術

クライアント サーバ 内製ツールなど開発補助に利用

プログラム言語 C++11(VC++, GCC, Clang), Lua

C++11(GCC), Python

Python, C#, Perl, Ruby, Shell script

ライブラリームワーク

Cocos2d-x(2.x), Boost,

Protocol Buffers

Boost, Flask, Google Test

Cocos2d-x, Protocol Buffers, Adobe AIR,

ツールスなど

Visual Studio 2013, Eclipse, NDK, Xcode

VMware, MySQL, Apache, mod_wsgi

Jenkins, Gerrit, cppcheck, Redmine

バージョン管理 Git

外部サービス Google Drive, Trello

バージョン管理

Page 20: 剣と魔法のログレス いにしえの女神 〜スマホ時代の MMORPG を支える技術

ログレスを支える ゲームクライアント

Page 21: 剣と魔法のログレス いにしえの女神 〜スマホ時代の MMORPG を支える技術

プロジェクト要件スマートフォンで遊べるオンラインゲームをリリースしたい

リリース時期はなるべく早く!

開発開始は2012年冬

ブラウザ版ログレスを移植するのが良さそう

サーバは使いまわせても、クライアントは完全新規

Page 22: 剣と魔法のログレス いにしえの女神 〜スマホ時代の MMORPG を支える技術

新規開発・・・ とういことで

Page 23: 剣と魔法のログレス いにしえの女神 〜スマホ時代の MMORPG を支える技術

クライアントに求められた要件

TCP通信が可能である

iOS, Androidをターゲットとしたクロスプラットフォーム開発が容易である

Page 24: 剣と魔法のログレス いにしえの女神 〜スマホ時代の MMORPG を支える技術

クライアントに求められた要件

ブラウザ版ログレス用に作成された、豊富なFlashのアニメーションデータを再利用したい

大量の2Dオブジェクトが表示可能である

その上で快適なプレイを保証する必要がある

Page 25: 剣と魔法のログレス いにしえの女神 〜スマホ時代の MMORPG を支える技術

Cocos2d-xのメリット

クロスプラットフォーム開発のサポート

2Dゲームフレームワーク

ソースが公開されている

Page 26: 剣と魔法のログレス いにしえの女神 〜スマホ時代の MMORPG を支える技術

Cocos2d-xのデメリット

Objective-CベースでC++に移植されているため C++の文化と違う部分でコーディングが面倒

UIのサポートが弱い

Page 27: 剣と魔法のログレス いにしえの女神 〜スマホ時代の MMORPG を支える技術

Cocos2d-xを使用した MMORPGクライアントについて

Cocos2d-xの参照カウント方式のオブジェクトをC++のスマートポインタで扱えるようにした

Page 28: 剣と魔法のログレス いにしえの女神 〜スマホ時代の MMORPG を支える技術

std::shared_ptr

deleterをオーバーライドすることで参照カウントを無視してdeleteすることを防ぐことでCCObjectをshared_ptrで扱うことが出来る。

Page 29: 剣と魔法のログレス いにしえの女神 〜スマホ時代の MMORPG を支える技術

std::shared_ptrthisをshared_ptrとして扱えることで非同期処理の実装が非常に簡略化出来るようになった。

Page 30: 剣と魔法のログレス いにしえの女神 〜スマホ時代の MMORPG を支える技術

Cocos2d-xを使用した MMORPGクライアントについてパッチシステムの作成

AssetManagerは差分更新をサポートしていない

UIコンポーネントを追加

Flashアニメーションプレーヤの作成

内製のネットワークライブラリの組み込み

Page 31: 剣と魔法のログレス いにしえの女神 〜スマホ時代の MMORPG を支える技術

リアルタイム通信

ログレスを支える

Page 32: 剣と魔法のログレス いにしえの女神 〜スマホ時代の MMORPG を支える技術

MMORPGに必要不可欠な リアルタイム通信の要素

TCP通信

コネクション指向のプロトコルであるTCPを使用

RPC

Remote Procedure Call

TCP接続によりRPCを用いて非同期的に送受信を行う

Page 33: 剣と魔法のログレス いにしえの女神 〜スマホ時代の MMORPG を支える技術

内製ネットワークライブラリについて

TCP通信のサポート

ブラウザ版ログレスでも同じものを使用

RPCのサポート

IDLからRPC定義を生成するツールを内包

Page 34: 剣と魔法のログレス いにしえの女神 〜スマホ時代の MMORPG を支える技術

RPCスタブコードの自動生成 アイテム情報の通信

IDL(xml)の記述

生成されたRPC受信側のソース

Page 35: 剣と魔法のログレス いにしえの女神 〜スマホ時代の MMORPG を支える技術

RPCスタブコードの自動生成 アイテム情報の通信生成されたRPC送信側のソースJSONでシリアライズして送信する(実際はバイナリでシリアライズ)

Page 36: 剣と魔法のログレス いにしえの女神 〜スマホ時代の MMORPG を支える技術

ゲームアセットと ゲームデータとの違いゲームアセット

クライアントが使用

音楽や画像、アニメーションなど

ゲームデータ

サーバが使用(必要に応じてクライアントに送信する)

AIや レベルテーブル、アイテムデータなど

Page 37: 剣と魔法のログレス いにしえの女神 〜スマホ時代の MMORPG を支える技術

ゲームロジックを処理するのはどちらか?

MMO型のゲームではゲームのルールはすべてサーバーに実装される

クライアントにはほぼゲームロジック実装されていない

処理するのは、クライアントで完結するものかクラアントで分散処理可能なものくらい

Page 38: 剣と魔法のログレス いにしえの女神 〜スマホ時代の MMORPG を支える技術

ログレスを支える サーバ構成

Page 39: 剣と魔法のログレス いにしえの女神 〜スマホ時代の MMORPG を支える技術

Account

Database

back-end

Zone

Game

WebAPI

Client

ユーザーアカウントの管理

ゲームデータの保存

フロントエンド間のデータ同期

ゲームサーバ間のデータ転送

ゲームサーバ

ウェブAPIサーバ

ゲームクライアント

Page 40: 剣と魔法のログレス いにしえの女神 〜スマホ時代の MMORPG を支える技術

サーバー構成の概念図1ワールドの構成と各ノードの説明

Game

Account !

back-end

ZoneWebAPI

Client

Database

Game

Client Cl ient Cl ient

Page 41: 剣と魔法のログレス いにしえの女神 〜スマホ時代の MMORPG を支える技術

サーバー構成の概念図データの流れ

Game

Account !

back-end

ZoneWebAPI

Client

Database

Game

Client Cl ient Cl ient

Page 42: 剣と魔法のログレス いにしえの女神 〜スマホ時代の MMORPG を支える技術

サーバー構成

GAME WEB

ACCOUNT

PARTY

CHAT

STORAGE

MAP QUEST

ZONE

MASTER

MASTER

SLAVE

SLAVE

GAME GAME GAME WEB WEB WEB

ZONE

CHAT

STORAGE

MASTER

MASTER

MASTER

SLAVE

SLAVE

SLAVE

Page 43: 剣と魔法のログレス いにしえの女神 〜スマホ時代の MMORPG を支える技術

GAME WEB

ACCOUNT

PARTY

CHAT

STORAGE

MAP QUEST

ZONE

MASTER

MASTER

SLAVE

SLAVE

GAME GAME GAME WEB WEB WEB

ZONE

CHAT

STORAGE

MASTER

MASTER

MASTER

SLAVE

SLAVE

SLAVE

サーバー構成フロントエンド

Page 44: 剣と魔法のログレス いにしえの女神 〜スマホ時代の MMORPG を支える技術

GAME WEB

ACCOUNT

PARTY

CHAT

STORAGE

MAP QUEST

ZONE

MASTER

MASTER

SLAVE

SLAVE

GAME GAME GAME WEB WEB WEB

ZONE

CHAT

STORAGE

MASTER

MASTER

MASTER

SLAVE

SLAVE

SLAVE

サーバー構成バックエンド

Page 45: 剣と魔法のログレス いにしえの女神 〜スマホ時代の MMORPG を支える技術

GAME WEB

ACCOUNT

PARTY

CHAT

STORAGE

MAP QUEST

ZONE

MASTER

MASTER

SLAVE

SLAVE

GAME GAME GAME WEB WEB WEB

ZONE

CHAT

STORAGE

MASTER

MASTER

MASTER

SLAVE

SLAVE

SLAVE

サーバー構成データーベース

Page 46: 剣と魔法のログレス いにしえの女神 〜スマホ時代の MMORPG を支える技術

GAME WEB

ACCOUNT

PARTY

CHAT

STORAGE

MAP QUEST

ZONE

MASTER

MASTER

SLAVE

SLAVE

GAME GAME GAME WEB WEB WEB

ZONE

CHAT

STORAGE

MASTER

MASTER

MASTER

SLAVE

SLAVE

SLAVE

サーバー構成冗長化している箇所

Page 47: 剣と魔法のログレス いにしえの女神 〜スマホ時代の MMORPG を支える技術

GAME WEB

ACCOUNT

PARTY

CHAT

STORAGE

MAP QUEST

ZONE

MASTER

MASTER

SLAVE

SLAVE

GAME GAME GAME WEB WEB WEB

ZONE

CHAT

STORAGE

MASTER

MASTER

MASTER

SLAVE

SLAVE

SLAVE

サーバー構成冗長化していない箇所

Page 48: 剣と魔法のログレス いにしえの女神 〜スマホ時代の MMORPG を支える技術

冗長化が可能な限り行っている

やらない(やれない)ところは諦めている

データベースは垂直分割

機能毎にDBを分離

水平分割(ユーザー単位分割)は行っていない

サーバー構成

Page 49: 剣と魔法のログレス いにしえの女神 〜スマホ時代の MMORPG を支える技術

ログレスを支える チャットシステム

Page 50: 剣と魔法のログレス いにしえの女神 〜スマホ時代の MMORPG を支える技術

チャットシステムの 要件

可能な限り過去までさかのぼってログを見れる

自分がオフライン中の間に、他プレイヤーが発言したメッセージもログで見れる

グループチャットができる

Page 51: 剣と魔法のログレス いにしえの女神 〜スマホ時代の MMORPG を支える技術

チャットシステムの 要件への対応可能な限り過去までさかのぼってログを見れる

→DBに一ヶ月分程度のログを保持

自分がオフライン中の間に、他プレイヤーが発言したメッセージもログで見れる

→DBに保存されたいるのでクライアントからWebAPI経由で取得する

Page 52: 剣と魔法のログレス いにしえの女神 〜スマホ時代の MMORPG を支える技術

チャットに関するクライアントとサーバの関連図

Page 53: 剣と魔法のログレス いにしえの女神 〜スマホ時代の MMORPG を支える技術

チャットに関するクライアントとサーバの関連図こんな感じで、発言したキャラクターから吹き出しが出る

Page 54: 剣と魔法のログレス いにしえの女神 〜スマホ時代の MMORPG を支える技術

チャットに関するクライアントとサーバの関連図こんな感じで、発言したキャラクターから吹き出しが出る この間はSocket通信

Page 55: 剣と魔法のログレス いにしえの女神 〜スマホ時代の MMORPG を支える技術

チャットに関するクライアントとサーバの関連図こんな感じで、発言したキャラクターから吹き出しが出る

この部分にチャットログが残る

この間はSocket通信

Page 56: 剣と魔法のログレス いにしえの女神 〜スマホ時代の MMORPG を支える技術

チャットに関するクライアントとサーバの関連図こんな感じで、発言したキャラクターから吹き出しが出る

この部分にチャットログが残る

この間はSocket通信

こっちはHTTP通信

Page 57: 剣と魔法のログレス いにしえの女神 〜スマホ時代の MMORPG を支える技術

チャットのデータフロー

Page 58: 剣と魔法のログレス いにしえの女神 〜スマホ時代の MMORPG を支える技術

チャットのデータフロー

発言発言

吹き出し表示

Page 59: 剣と魔法のログレス いにしえの女神 〜スマホ時代の MMORPG を支える技術

チャットのデータフロー

発言

DBに書く

発言

吹き出し表示

吹き出し表示

吹き出し表示

吹き出し表示

吹き出し表示

Page 60: 剣と魔法のログレス いにしえの女神 〜スマホ時代の MMORPG を支える技術

チャットのデータフロー

発言

DBに書く

発言

吹き出し表示ログ取得

吹き出し表示

吹き出し表示

吹き出し表示

吹き出し表示

Page 61: 剣と魔法のログレス いにしえの女神 〜スマホ時代の MMORPG を支える技術

チャットのデータフロー

発言

DBに書く

発言

吹き出し表示ログ取得

ログ読み込み

吹き出し表示

ログ表示

吹き出し表示

吹き出し表示

吹き出し表示

Page 62: 剣と魔法のログレス いにしえの女神 〜スマホ時代の MMORPG を支える技術

直面した問題と その解決、今後の課題

Page 63: 剣と魔法のログレス いにしえの女神 〜スマホ時代の MMORPG を支える技術

直面した問題と、その解決3G回線でのゲームプレイ

具体的な対策というのはないが、特に大きな問題なく動いた

回線切断についてはブラウザ版ログレスのページリロード対策のノウハウがほぼそのまま使えた

サーバは資産である過去の実装をそのまま使いまわす必要があったが設計が合わない部分でサーバに高負荷問題が起きた

バックエンドをスケールアウトできるように修正して対応

Page 64: 剣と魔法のログレス いにしえの女神 〜スマホ時代の MMORPG を支える技術

今後の課題

クライアントのパフォーマンス・チューニング

マップ描画、アバター描画最適化

電池消費量の改善

クライアントの安定化

強制終了の改善

Page 65: 剣と魔法のログレス いにしえの女神 〜スマホ時代の MMORPG を支える技術

今後の課題

通信量の削減

キャリアの通信制限にかかっても遊べるのを目指したい

サーバの1ワールド毎の同時接続数の許容量を増やしたい

Page 66: 剣と魔法のログレス いにしえの女神 〜スマホ時代の MMORPG を支える技術

セッションの内容剣と魔法のログレスの紹介

開発環境について

ゲームクライアントについて

リアルタイム通信について

サーバについて

チャットシステムについて

リリースまでに起きた問題と、残された課題について

Page 67: 剣と魔法のログレス いにしえの女神 〜スマホ時代の MMORPG を支える技術

ご静聴ありがとうございました!!