RPGの「セーブデータ」はどう保存されている?MySQLで学ぶデータベース設計入門

目次

🚀 はじめに:せっかくのハイスコアが消えてしまう!?

これまでの記事で、JavaScriptを使って[迷路ゲーム]や[シューティングゲーム]を作ってきましたね。

自分の書いたコードでキャラが動くのは感動的ですが、一つ大きな弱点があることに気づきましたか?

それは……「ブラウザを更新(リロード)すると、すべて初期化される」こと。

  • 「苦労してレベルを上げたのに!」
  • 「ハイスコアを出したのに記録に残らない!」

これは、JavaScriptの変数(メモリ)が「一時的な記憶」しか持てないからです。

ゲーム機で言えば、電源を切ったら消えてしまう状態ですね。これを解決し、電源を切っても(ブラウザを閉じても)データを残すために必要なのが「データベース(Database)」です。

今回は、現役サーバーエンジニアの視点から、ゲーム開発に欠かせない「データベースの基本」と「データの設計図(テーブル設計)」について解説します。

1. データベース(DB)とは?「巨大で高機能なエクセル」と思えばOK

エンジニアの世界では「DB(ディービー)」と略されますが、
正体は「データを整理整頓して保存しておく専用の倉庫」です。

イメージしづらい場合は、Excel(エクセル)を思い浮かべてください。

  • Excel: 人間が目で見てデータを管理するもの
  • データベース: プログラムが高速にデータを読み書きするもの

ゲームのセーブデータも、Webサイトの会員情報も、基本的にはこの「データベース」の中に、
表(テーブル)のような形で保存されています。

今回は、世界中で最も使われているデータベースの一つ、MySQL(マイエスキューエル)を題材にします。
多くのスマホゲームやWebサービスも、裏側ではこのMySQLが動いているんですよ!

2. 実際に設計してみよう!「勇者のステータス」

では、RPG(ロールプレイングゲーム)のセーブデータを保存すると仮定して、
データベースの設計(モデリングと言います)をしてみましょう。

保存したいデータは以下の通りです。

  • 勇者の名前
  • 現在のHP(体力)
  • 現在のMP(魔力)
  • 所持金(ゴールド)

❌ 悪い例:なんでも詰め込みすぎ

「データが保存できればいいんでしょ?」と、1つの枠にすべて書いてしまうと……。

データの中身
勇者A, HP:100, MP:20, 500G
勇者B, HP:55, MP:0, 10G

これでは、プログラムから「HPだけ回復したい!」と思った時に、
文字の中から「HP:100」を探し出して書き換える……という大変な作業が必要になります。

⭕ 良い例:項目ごとに列(カラム)を分ける

データベースでは、Excelのように「列(カラム)」を定義して整理します。これを「テーブル」と呼びます。

テーブル名:users(ユーザーテーブル)

id (ID)name (名前)hp (体力)mp (魔力)gold (所持金)
1勇者A10020500
2勇者B55010

こうして分けておけば、プログラムからは「IDが1番の人の、hpを書き換えて!」と命令するだけで済みます。
スッキリしましたね!

3. 【エンジニアの視点】「型(かた)」を決めよう

ここからが少しプロっぽい話です。

データベースのテーブルを作る時、
各列(カラム)に「どんな種類のデータが入るか」というルール(型)を決める必要があります。

これを「データ型」と言います。ゲームの装備制限に似ていますね。
「戦士は杖を装備できない」のと同じで、「数字を入れる場所に文字は入れられない」ように制限をかけるのです。

MySQLでよく使う基本的な型は、この3つを覚えればOKです!

型の名前特徴ゲームでの使い所
INT (イント)整数を入れる箱。計算ができる。HP、MP、ゴールド、攻撃力など
VARCHAR (バーキャラ)文字列を入れる箱。長さ制限ができる。プレイヤー名、アイテム名、セリフ
DATETIME (デイトタイム)日付と時刻を入れる箱。アカウント作成日、最終ログイン日時

今回のテーブル定義(設計図)

先ほどの users テーブルを、エンジニアっぽく定義するとこうなります。

  • id: INT (社員番号のような、重複しない管理番号)
  • name: VARCHAR(50) (名前は50文字まで!)
  • hp: INT
  • mp: INT
  • gold: INT

このように「型」を決めておくことで、

「HPに『あいうえお』という文字が間違って入ってしまい、計算エラーでゲームが止まる」

といったバグを未然に防ぐことができるのです。

4. まとめ:データ保存はゲーム制作の第一歩

今回は、プログラミングで作ったゲームのデータを保存するための「データベースの考え方」について解説しました。

  1. 変数はリロードで消えるが、データベースなら消えない。
  2. データはテーブル(表)で管理する。
  3. それぞれの列には型(INTやVARCHAR)を決める。

この「枠組み」さえ理解できれば、ランキング機能も、ログイン機能も、アイテム図鑑も作れるようになります。

次回予告

設計図は完成しました!しかし、これだけではまだデータは保存されません。

次回は、いよいよ

SQL(エスキューエル)という命令文を使って、実際にこのテーブルの中にデータを
「書き込み(INSERT)」「読み込み(SELECT)」する方法

を解説します。

これまで作った[シューティングゲームのスコア]を、データベースに保存する準備を始めましょう!

よかったらシェアしてね!
  • URLをコピーしました!
  • URLをコピーしました!

この記事を書いた人

神奈川県出身
どこにでもいる現役ゲーム会社サーバーエンジニア。大学ではひたすらゲーム!ゲーム!という人生を送ってました。

このブログは「ゲームを作ってみたい!」「プログラミングに関する知識をつけたい!」そんな皆さんの少しでもお役になれば嬉しいなと思い開設しました。

趣味
YouTube鑑賞、ストリートな格闘ゲーム、キャンプ

最近の出来事
・痔主になってしまいました....
・Google Cloud Professional Cloud Architect取得しました。

コメント

コメントする

目次