UnityからMYSQL(MariaDB)サーバにアクセスする方法をまとめました。他のブログではMYSQL CONNECTORというアセットが紹介されていましたが、自分の環境では上手くいかなかったので、Node.jsでAPIサーバを立ててweb requestする方法を取りました。
# この記事の対象者
- ・ データベースを操作するunityアプリに興味がある方
- ・ データベースをクラウド上に一般公開をしてみたい方
- ・ Unity、MYSQL、Linux、Docker、JavaScript等の基礎がわかる初~中級者
- ・ 上級者やプロの方には役には立たないと思います。手軽にサーバー構築を試してみたい人向け
# 動作環境
- ・ クライアント側 Unity 2020.3以上。(2019ではエラーでした)
- ・ サーバー側 Docker-composeが動く環境(windows、Mac、Linux)
すでにXAMPP等を使っている、使い慣れたものが他にある人は無理にDockerでなくとも構いません。
# Dockerの入手場所
Dockerの入手はこちらから。以下、Docker-composeがインストールされている前提で勧めます。
# MYSQLサーバーを構築する
# YAMLファイルの記述
ここで紹介するソースコードは全てGitHubで公開しています。ダウンロードする方はコチラ ネットからの拾い物に独自に手を加えました。
散々MYSQLと言っておきながら使っているのはMariaDBですが、全く同じように使えるのでご心配なく。dbのimageをMYSQLに変えても全く問題ありません。
# 使用にあたって
- ・ 当然ですがユーザー名、パスワードを変更しましょう。
- ・ ポート番号は所謂ウェルノウンポートです。気になる人は変更して下さい。
- ・ dbコンテナのポートはあえてexposeにしています。これはphpMyAdminとnode.jsサーバを通してしかアクセス出来ないようにするためです。直接アクセスもしたい方はports: 3306:3306と置き換えて下さい。
- ・ phpMyAdminはデータベースサーバをブラウザ上で操作する便利なツールです。ローカルならいいのですが、クラウド上にデプロイした場合は誰でもアクセス出来てしまいます。使わない時はすぐにコンテナを停止するか、phpMyAdminは使わずに直接MYSQLを操作するようにして下さい。
- ・ 後述するDockerfile、index.js、start.shをdocker-compose.ymlと同じ階層にいれてから起動してください。
# 他に必要なファイルを用意する
docker-compose.ymlファイルと同じ階層のディレクトリに以下の3つのファイルをコピーする。 Dockerfile
index.js
start.sh(node.jsを自動実行するだけのシェルスクリプト)
# docker-compose実行
上記のファイルを全て同じ階層のディレクトリに用意出来たら、
と入力してみましょう。初回起動時にはビルドから始まるので時間がかかります。また、WARNINGが大量に出ると思いますが、無視して構いません。
最終的に3つのコンテナが全てdoneになって、コマンド入力待ちの状態になれば起動されました。# pypMyAdminで動作チェック
試しにブラウザにULR(例:localhost:8080または、example.com:8080)を入力すると下のような画面が表示されると思います。
phpMyAdminの操作方法についてはブログやYoutube動画がいっぱいありますので、そちらを参照してください。ここでは割愛します。 表示されない場合は少し待つか、もう一度docker-compose up -dしてみて下さい。それでも表示されない場合はファイアウォール設定をチェックして該当のポートが開いているか見てみて下さい。# node.js、index.jsの動作チェック
データベースを直接読み書きするためのAPIサーバが機能しているかチェックします。データベースサーバのURLにクエリパラメータを付加する事でリクエストを渡しています。尚、通信の暗号化などは一切していないのでご注意下さい。必要な方は「MYSQL 通信 暗号化」などでググって下さい。
ブラウザのURL欄にこのような書式でユーザー名、パスワード、DB名、リクエストするSQL文を入力する。
ユーザー名、パスワードなどが間違ってなければ、このようにjson形式でレスポンスが帰ってくるはずです。スクショはSELECT * FROM テーブル名の結果。# Unity側での操作
# パッケージをインストールする
前述のGitHubからもダウンロードできますが、下記のスクリプトを使います。 MySqlAccess.cs
SQLTest.cs
ここではパッケージからインストールする方法を取ります。 Unityエディターのメニューから[Assets]-[Import Package]-[Custom Package]でMySqlAccessWithNodeJs.unitypackageをインポートして下さい。
# インスペクターに必要情報を入力する
サンプルシーンのgameobjectをクリックしてインスペクターからURLなどのログイン情報を入力して下さい。入力情報に誤りが無ければ実行すると下記のようにコンソールにMYSQLサーバからの通信結果が表示されます。
もしURLなどが間違っていれば下記のようにエラーログが表示されます。必要に応じエラー時の処理等を作ってもいいでしょう。# 最後に
XAMPPを使うよりだいぶ手間はかかりますが、より汎用性を考えdocker-composeを使用する方法を紹介しました。ここで紹介したデータベースサーバは非常に簡素なものです。セキュリティ対策もしてません。あくまでお手軽入門という事でご参考程度に。実際クラウド上で運用するのであれば様々な対策が必要になりますのでご注意下さい。