【8月の無料アセット紹介】MySQLってなに?データベース管理システムの基本から『MySQL Integration』を使ったデータベース環境の構築までを実践的に解説

2022.08.25
注目記事ゲームづくりの知識チュートリアルしくみをつくるアセットレビューアンリアルエンジン
この記事をシェア!
Twitter Facebook LINE B!
Twitter Facebook LINE B!

毎月、UEマーケットプレイスでは、Epic Gamesが選出した5つのアセットが無料配布されています。 本記事では8月の無料アセットの1つ、『MySQL Integration』の内容とUnreal Engineへの導入方法について紹介します。

TEXT / wvigler

目次

この記事はUnreal Engine バージョン5.0.3を利用して書かれています。

「MySQL Integration」の概要

MySQL Integration』はデータベース管理システム「MySQL」とUnreal Engineの連携をサポートするためのコードプラグインです。ブループリントからデータテーブルの作成、データの保存、データの取得などを簡単に行えます。

「MySQL」とは

MySQLOracleの開発している無料のオープンソースデータベース管理システムです。「SQL」というデータベース管理のための言語を使って命令文(クエリ)を送ることで、直感的かつ柔軟にデータの操作、管理を行うことができます。

オープンソースのものでは世界で現在最も人気のあるデータベース管理システムであり、YouTubeTwitterfacebookNETFLIXなどの有力サービスでも使用されています。

MySQLに限らず、データベース管理システムは基本的にクライアント/サーバーモデルというシステムを採用しています。

これはネットワークにつないでいるマシン(主にパソコン)同士を「サーバー」と「クライアント」に2つの役割を分け、お互いの間で情報のやりとりをするというものです。

MySQLではクライアントはサーバーにクエリと呼ばれる命令文を送り、サーバーはそれに応じてデータを提供します。

MySQLではサーバー側はデータを管理するために、「データベース」という形でデータを保存しています。これは1つのサーバーに複数作ることができます

データベースの中にはさらに小さな単位として「データテーブル」というものがあります。これも1つのデータベースに複数作ることができます

データテーブルの構造は例えば下記のような、表計算ソフトなどで作られた表によく似ています。

表の横の行を「レコード」と呼びます。下の表では、5人分のデータ=5件のレコードが格納されています。

5件のレコードにはそれぞれ番号・苗字・名前・生年月日・年齢・性別・点数のデータがあり、苗字の列を縦に見ると相田・伊藤・井出・小川・加藤という文字列が入っています。この縦の列のことを「カラム」と呼びます。

データテーブルを作るときは、最初にそのテーブルでどういったデータを記録していきたいか、つまりどういったカラムで構成されるかを決める必要がある。今回は、生徒の番号・苗字・名前・生年月日・年齢・性別・点数を記録したいので、そのようなラベル(名前)のカラムを作成している。

また、それぞれのカラムにはどのような形式=のデータを入れたいかということも設定する必要がある。番号のカラムには整数が、苗字のカラムには文字列が、生年月日のカラムには日付が入るので、それぞれのカラムの型は整数型、文字列型、日付型になる。例えば整数型を指定した番号のカラムには「相田」という文字列は入れられない。

データテーブルの構造だけを見ると表計算ソフトに非常に似ている。このような列=カラムと行=レコードで構成されるデータ構造を持つデータベースをリレーショナル・データベースと呼ぶ

MySQLの全体構造についてざっくりとしたイメージは掴めたでしょうか?

最初のうちはこのようなデータベースがどのようにゲーム作りの役に立つのか、想像がつきにくいかもしれません。例えば、武器の名前・強さ・射程・金額を並べたリストデータ、ユーザーのセーブデータ、ソーシャルゲームで運営チームがユーザーの行動を解析するためのログデータなどで使われています。

「MySQL Integration」を試してみよう

次は、MySQL Integrationのサンプルプログラムを使って、MySQLがどのようなものか体験してみましょう。サンプルはこちらからダウンロードできます。

サンプルプログラムはMySQL Integrationのプラグインがインストールされていないと動かないので、こちらも忘れずエンジンにインストールしておきましょう。

このプラグインは基本的にネットワークを通して使用するものですので、ここからの作業は基本的にインターネットに接続した状態で行うことを想定しています。

サンプルプログラムを解凍して、中にある「MySQLIntegration.uproject」を開くと、このような画面が表示されます。

ここでプレイボタンを押すとサンプルプログラムが起動します。まずはアクセスするデータベースを設定をするための画面が出てきますが、とりあえず何も変更せずに「Login」のボタンを押しましょう。初期設定では「db4free.net」というMySQLのテストサーバー内の「testdbue」というサンプル用データベースにアクセスする設定になっています。

アクセスしてから時間が経つとサーバーとの接続が切れてしまう場合があるので、その場合はここからやり直しましょう

少し待つと、このような画面へと移行します。ここでは下のボタンを押すことで、上に書かれているクエリをサーバーに送ることができます。

testdbueのデータベースには誰でもアクセスできるので、データベースの状態はその時によって変わってしまいます。まずはデータテーブルを削除して、状態を揃えましょう。

Delete Table」ボタンを押すと、データテーブルを削除するクエリがサーバーに送られます。

削除されるのは「codes_test」というデータテーブル。基本的にクエリの処理が完了すると「Query Successfully Executed」と表示される

「Select Data」ボタンを押すとサーバー側の「codes_test」の内容を確認できる。「Table ‘testdbue.codes_test’ doesn’t exist」と表示されればデータテーブルが存在していないということ

今度は「Create Table」のボタンを押し、データテーブルを新しく作成します。これには’id’、’code’、’discord’、’hwid’、’active’、’uses’、’lastUse’、’date’、’amount’といったカラムがあらかじめ定義されています。

「Create Table」を押すことでサンプルのデータテーブルを作成できる

クエリ処理が完了した後に「codes_test」の内容を確認すると、カラムが追加されていることが分かる

肝心のデータを追加していきます。サンプルには最初からデータのテンプレートが用意されているので使っていきましょう。「Insert Data」を押すと用意されたデータをサーバー側に追加できます。

再び内容を確認すると、上に書いてあるデータが挿入されていることが分かる

Insert Data(Multi Queries)」でもデータを追加することができます。こちらは複数のクエリを同時に送信するサンプルになっています。

新しいデータは既存のデータの後に追加される

オリジナルのデータテーブルを作ってみよう

それでは、サンプルプログラムを使ってさきほど挙げたこの表を基にしてデータテーブルを作成してみましょう。

新しいデータテーブルを作るのですが、デフォルトで用意されているものとはカラムの構成が違うため、クエリを変更する必要があります。
Create Table」の上のクエリ文を以下のように変更します。

「`」「’」「,」などを間違えないように注意しましょう。

また、今回は説明のために「生徒」「番号」といった日本語の名称を使っていますが、環境によっては正しく動かない可能性もあるため、テーブル名やカラム名は1byte文字で作成したほうがよいでしょう。

CREATE TABLE `生徒` (
`番号` int NOT NULL,
`苗字` text NOT NULL,
`名前` text NOT NULL,
`生年月日` date NOT NULL,
`年齢` int NOT NULL,
`性別` boolean NOT NULL,
`点数` int NOT NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb3 COLLATE=utf8_unicode_ci;

CREATE TABLE `生徒` で「生徒という名前のテーブルを作る」という意味のクエリになります。

その後には作成するカラムの情報をカラムの数だけ、「,」で繋げて並べます。

`番号` int NOT NULL は「番号というラベルのカラムを、int型(integer型 = 整数型)で、NULLを許さない(値が必ず入るようにする)で設定する」という意味です。同様に、`苗字`の後の「text」はtext型(文字数を指定しない文字列型)を、`生年月日`の後の「date」はdate型(日付型)を意味しています。

`性別` が boolean型 (1/TRUEか0/FALSEのどちらかが入る論理型)なのは、今回は「男だったら1、女だったら0」と解釈するとしたからです。

この状態で「Create Table」を押せば新しいデータテーブルを作ることができます。

終わったら「Select Data」のクエリ文を

Select * from 生徒

に変更してボタンを押し、カラムが登録されているかどうか確認しておきましょう。

データを取得するときはSELECT文を使います。

Select * from テーブル名で、そのテーブル名のデータを取得できます。

fromの前にカラム名を「,」区切りで並べると、そこに記載されたカラムのデータを取得します。カラム名の代わりに「*」と書けば、そのテーブルにあるカラムのデータをすべて取得します。

ちなみに、MySQLにおけるクエリ文では、大文字と小文字を区別しませんので、「Select * from 生徒」でも「SELECT * FROM 生徒」でも同じ結果になります。

次にデータを入力します。「Insert Data」のクエリを以下のように変更します。

INSERT INTO `生徒` (`番号`, `苗字`, `名前`, `生年月日`,`年齢`, `性別`, `点数`) VALUES
(1, '相田', '陽介', '2005-03-06', 17, 1, 52),
(2, '伊藤', '真理', '2005-07-04', 17, 0, 86),
(3, '井出', '進', '2006-02-19', 16, 1, 68),
(4, '小川', '紗枝', '2005-10-6', 16, 0, 72),
(5, '加藤', '幸助', '2005-04-11', 17, 1, 38);

データを挿入(追加)するにはINSERT文を使います。

INSERT INTO `生徒` (`番号`, `苗字`, `名前`, `生年月日`,`年齢`, `性別`, `点数`) で、「生徒というテーブルに、[番号・苗字・名前・生年月日・年齢・性別・点数]の順番でレコードを追加する」という意味です。

VALUES に続いて、レコードの数だけ「,」で区切って行を足していきます。

「’相田’」「 ‘陽介’」「’2005-03-06’」のように、文字列型や日付型のデータは前後を「’」で囲みましょう。

Insert Data」を押すとデータを追加できます。確認もしておきましょう。

MySQLの基本的な機能として特定の条件でデータの絞り込みやソートも試してみましょう。

例えばこの中で点数が60より上の生徒を見たい場合は「Select Data」のクエリ文をこのように変更します。

Select * from 生徒 where 点数 > 60

ボタンを押してクエリを送ると、点数が60より上の生徒のデータのみが表示されます。

SELECT文にてテーブル名の後に「where [条件式]」 と書くと、その条件式にあったデータだけが取得できます。

点数が60より上の生徒のみが抽出された

生年月日順に並べたい場合は、次のようなクエリを送ります。

Select * from 生徒 order by 生年月日

SELECT文において、テーブル名の後に「order by [カラム名] 」と書くと、[カラム名]を昇順でソートした結果を出力します。降順で並べたい場合は「order by [カラム名] desc 」と書いてください。

生年月日が若い順に並べられたデータが返ってくる

MySQLでは、ここで紹介した以外にもさまざまなクエリを利用することができます。MySQLのクエリについてさらに詳しく知りたい方はMySQLのドキュメントをご確認下さい。

最後に、試し終わったらデータテーブルを削除しておきましょう。「Delete Table」の上にこのようなクエリ文を書きます。

DROP TABLE 生徒

このクエリを送れば「生徒」のデータテーブルを削除することができます。

サンプルプログラムの中身を見てみよう

このプラグインのコア部分についてはC++で書かれていますが、サンプルプロジェクトではブループリントで多くの部分が書かれています。

MySQLDBConnectionActorというクラスを継承したブループリントからMySQLの機能を利用することができる

基本としてはこれらのノードを利用することでサーバーにアクセスし、クエリを送り、情報を受け取ることができる

サンプルでは使用されていないが、イメージ画像を送ることができるノードも存在する

これらのノードを使って、ぜひ自分のプロジェクトでもMySQLを使ってみましょう!

注意:サンプルプロジェクト以外でこのプラグインを利用するには「libcrypto-1_1-x64.dll」、「libssl-1_1-x64.dll」、「mysqlcppconn-9-vs14.dll」という3つのDLLファイルが必要です。これはサンプルプロジェクトのBinaries\Win64というフォルダに収められていますので、もし必要な場合はこちらからコピーしましょう

発展編:自分のサーバーとデータベースを作ろう

今までアクセスしていた「db4free.net」はあくまでテスト環境のサービスのため、意図せずデータが削除されたりサーバーが停止したりしてしまう可能性があり、本番環境で使用するには不向きです。

ここでは新たに自分のパソコンをデータベースを持つサーバーとして設定し、サンプルプログラムでアクセスしてみましょう。

MySQLを使用するシチュエーションとしてLinux環境であることが多いのですが、ここではWindowsでの導入に絞って解説します

まずはMySQLの公式サイトへと行き、ダウンロードページから「MySQL Community (GPL) Downloads »」をクリックします。

次に「MySQL Installer for Windows」をクリックすると、ダウンロードするインストーラーを選択するページが出てきます。ここでは上の方の「Download」ボタンをクリックします。

続いてこのようなページが表示されます。ここではOracleアカウントでのアクセスを勧められていますが、今回は特に必要ないので下の「No thanks, just start my download.」をクリックします。

これでインストーラーのダウンロードが開始されます。ダウンロードしたmysql-installer-web-community-~.msiというファイルをダブルクリックで実行します。

ユーザーアカウント制御の認証が行われた後にインストーラーの画面が表示されます。ここでは「Developer Default」にチェックを付け「Next」を選択します。

次にインストールするパッケージを確認する画面となります。こちらもそのまま「Execute」のボタンを押します。

インストールにはある程度時間がかかるので注意

ダウンロードが終わったら「Next」を押して先に進もう

続いてMySQLの設定に移ります。ここは基本的には初期設定のまま「Next」や「Execute」を押していけば大丈夫ですが、一箇所だけパスワード設定を求められる場所があるので注意しましょう。

確認のため、パスワードは同じものを2回入力する必要がある

この画面まで来て「Execute」を押すと、MySQLに設定が適用される

適用が終わったら「Finish」を押して完了

これ以降はMySQL Routerというミドルウェアの設定なりますが、今回は特に必要ないので「Cancel」を押して終了させましょう。

「Cancel」を押せば、途中でも設定を中断できる

本当にキャンセルするのか聞かれるので、ここは「Yes」を選択する

この時点でこのパソコンはサーバーとして使えるようになっていますが、サンプルプログラムでアクセスするにはデータベースも必要なので、これもあらかじめ作成します。

Windowsのスタートメニューを展開すると、新しく「MySQL ?? Command Line Client(以下、コンソール)」というプログラムがあるはずです。これを起動しましょう。

黒い画面が出てきてパスワードを求められるので、さきほど設定したパスワードを入力しましょう。

サーバーにアクセスするとこのような画面が表示される

サーバー(この場合自分のパソコンですが)にアクセスできました。ここではサンプルプログラムと同じくサーバーにクエリを送ることができ、それによって新しくデータベースを作ることができます。

以下のようにクエリを入力し、Enterを押しましょう。

CREATE DATABASE gamemakersdb;

最後の「;」を忘れないように注意

これで「gamemakersdb」という名前のデータベースが作られました。もちろんデータベースは自分で好きな名前を付けることができますが、同じ名前のデータベースは作れないので注意しましょう。

データベースがしっかりと作られているか調べてみます。このようなクエリを入力するとデータベース一覧を出すことができます。

SHOW DATABASES;

デフォルトで用意されているデータベースに混じって、「gamemakersdb」がしっかりと作られていることが分かります。

データベースを作れたことは確認できたので、サンプルプログラムの方に戻ります。起動すると前に起動した時と同様にこの画面から始まります。

書かれている項目を以下のように変更します。

Server Name :localhost

Database Name :gamemakersdb

User Id :root

Password :(設定したパスワード)

全てが設定されていれば、前回と同じく問題なくデータベースに入れるはずです。

コンソールでアクセスしているデータベースとサンプルプログラムでアクセスしているデータベースが同じものであるかを確認しましょう。前と同じように「Create Table」で「codes_test」のデータテーブルを作成し、「Insert Data」でデータを入力します。「Select Data」で中身を確認すれば、データが入力されていることが分かります。

次にコンソールに戻り、データベースにアクセスします。コンソールでは「gamemakersdb」のデータベースには以下のようなクエリを入力すればアクセスすることができます。

USE gamemakersdb;

「Database changed」と表示されたら、「codes_test」の中身を表示させます。クエリ文はサンプルプログラムとほとんど同じです。

SELECT * FROM codes_test;

するとコンソール側では何もしていないのに、「codes_test」にデータが入力されていることが確認できます。

サンプルプログラム側と見比べてみると、全く同じデータが返ってきていることが分かります。これは別々のプログラムに同一のサーバーからデータが送られたことを示しています。

さて、これで自分のサーバーを立てることができました。ゲームで使用するようなサーバーを立てるにはまだいろいろなことをする必要がありますが、これはその最初の一歩となります。

MySQLのようなデータベース管理システムを、あなたのゲームでも活用してみましょう!

『MySQL Integration』ダウンロードページ『MySQL Integration』公式ドキュメント
wvigler

アンリアルエンジンにハマり、ぷちコンでゲーム作ってた男。映像編で2連覇したことも。
昔はよくアーケードゲームとかやってました。
一番やり込んだのは「ケツイ ~絆地獄たち~」「戦国BASARAX」あたり。ローグライトゲームとかも好きです。

関連記事

UE5で揺れ物を「かわいく」揺らすプラグイン「Kawaii Physics」が更新。髪が風になびく複雑な動きもパラメータ設定で手軽に制御
2024.07.25
Unreal Engine向けゲーム制作コンテスト「第22回UE5ぷちコン」開始!テーマは「ゆうえんち」。応募締切は9/8(日)
2024.07.22
Unreal Engine 5.4.3がリリース。Mac向けにパッケージ化する際に起こるエラーの修正や、BaseDeviceProfiles.iniの2024年発売のiPadへの対応など
2024.07.17
50代からゲーム開発を始めた第21回UE5ぷちコン最優秀賞作『ヘコむス』開発者インタビュー。約40年前の「床をヘコませてボールを転がす」アイデアをUEで実現!
2024.07.16
エピック ゲームズ ジャパンによる講演も行われた「第2回 Unreal Engine KYUSHU LT会 in 鹿児島」、アーカイブ動画および一部のスライド資料が公開
2024.07.11
ゲーム開発者必見のカンファレンス10選【GDC・CEDEC・Unreal Fest・U/Dayなど】
2024.07.11

注目記事ランキング

2024.07.20 - 2024.07.27
VIEW MORE

連載・特集ピックアップ

イベントカレンダー

VIEW MORE

今日の用語

フォグ(Fog)
フォグ 「霧」を意味する英単語。3DCGにおいて、現実の霧による見た目をシミュレーションする画面効果やエフェクトを指す。代表的なものとして、カメラから遠くにあるオブジェクトの色調を変化させることで遠近感を出す手法がある。
VIEW MORE

Twitterで最新情報を
チェック!