ソーシャルゲームを作るにあたって、関わるスタッフさん皆さんに知っておいてほしいのが データの定義方法やデータフロー です。

例えば、デバッグする際にもダミーデータを自分で調整することができれば、効率が格段に上がりますよね。

今回はソーシャルゲームでの開発で、どのようにデータベースを使っているかを、知識がない方向けに解説します。

データベース(DB)とは何か

特定のテーマに沿ったデータを集めて管理し、容易に検索・抽出などの再利用をできるようにしたもの(Wikipedia)
https://ja.wikipedia.org/wiki/データベース

単純に「いろいろなデータをまとめて記録しておくもの」くらいに捉えておいてください。

ソーシャルゲームとデータベース

ソーシャルゲームで扱うデータ

  • シナリオ・ストーリー
  • タイトルやキャラ選択などの画面構成
  • バトルなどのルール、ロジック
  • 敵キャラやクリア条件など
  • 画像やサウンド
  • ハイスコアやレベル

ゲームでDBを利用することが多いデータ

  1. 敵キャラやクリア条件など ・・・ ゲーム情報を定義するもの
  2. ハイスコアやレベルなど ・・・ ユーザの状態をあらわすもの

2については「誰がどのカードを持っているか」といった「ユーザがゲーム上所持しているデータ」等も含みます。

なお、カード画像などのサイズが大きいバイナリデータはアプリ側に保存することが多いです。

なぜデータベースを使うのか?

  • データを一元管理できる
  • コンテンツの修正の追加配信が容易
  • リリースサイクルの短出
  • 不正防止
  • 分析するため

ネイティブアプリとサーバの連携イメージ

アプリはWebサーバと通信し、WebサーバからDBサーバに必要なデータを問い合わせます。
Webアプリケーションは同じ構成ですよ。

処理フローを追ってみよう

リクエストとレスポンス

通信フローはおおかた次のようになっています。

  1. アプリからWebサーバに問合せ(要求)を行う
  2. アプリからの問い合わせに従い、Webサーバは必要に応じてデータベース(DBサーバ)に指示、問合せを行う
  3. WebサーバはDBサーバの応答を受け取り、加工する
  4. Webサーバからアプリに問合せの結果を返却する

通信の例

1.アプリからWEBサーバへ要求を出す

  • ゲーム始めたいんだけど
  • ニックネームは『まいまい』で

2.WEBサーバからDBに指示を与える

  • 新しいユーザを追加してください
  • ニックネームは『まいまい』で
  • カード『たまねぎ剣士』を1枚登録よろしく
  • 最初から100Gold使えるので100Goldも入れておいて
  • ステータスは『新規ユーザ』

3.WebサーバはDBサーバの応答を受け取り、加工する

* 新規、たろろん、竜騎士カイン1枚、100Goldを登録しました

4. Webサーバからアプリに問合せの結果を返却する

  • ゲームのデータを用意しました
  • あなたのデータとしてこんなデータを作成しましたよ

今データベースが覚えているものは

  • ステータスは『新規ユーザ』
  • まいまい
  • カード『たまねぎ剣士』が1枚
  • 100Gold

まとめ

ソーシャルゲームをはじめWebアプリケーションが「どのように連携し、どのようにデータベースを使ってデータを管理しているのか」というざっくりしたお話でした。

データベースの利用シーンは、大きく次の2つでしたね。

  1. ゲーム情報を定義するもの
  2. ユーザの状態をあらわすもの

サーバ側で管理するデータは、処理フローで見たように個別のユーザから受け取った問い合わせによってサーバ上のデータを検索したり追加していきます。
そうしてサーバで用意したデータをユーザに渡し、アプリ側で再生するようなイメージです。

処理フローはもちろん単純化した内容で、実際はWebサーバとDBサーバとの細かいやり取りが何度も発生します。
また、データの用途によって細かく保存先を指定したり、データ構造を組み叩ていく必要があります。

アプリを作りたい方も、プランニングをしたい人にもデータベースの知識は有用ですので、ぜひ理解されることをオススメします。


2015年12月31日:タイトルを「[DB]ソシャゲ開発におけるDBの役割とか」から変更