個人開発でデータベースを扱う方法は何がベストなのか
Unityでアプリを作るにしても、Webサービスを作るにしても、データベースを扱うことは必須です。
潤沢に資産があるならデータベースサーバを借りて、データベースソフトをインストールして…とできますが、何せ個人でやることなのでそんなお金はどこにもない。
AzureやAWS、Firebase Realtime Databaseといったクラウドサービスの無料枠を使うにしても、同時接続数やらなんやら制限がある。
完全に個人用ならまだしも、外部公開して第三者に使ってもらうにはちょっと…という感じ。
色々考えた結果、せっかくXSERVERと契約しているのだから、
XSERVERにMySQLを構築⇒PHPでWebAPI化⇒アプリやWebサービスで利用
が一番いいのでは?という結論に至りました。
XSERVERにMySQLを構築
サーバーパネルからデータベースが追加できます。
ユーザを作ることでデータベースにアクセスできるようになります。
MySQLメニューの「phpmyadmin」から管理画面にログインするとテーブルの作成やら列の設定やらができるようです。
PHPでWebAPI化
PHPは触ったことないのですが、とりあえず「URLにアクセスして結果を返す」というやり方さえ確立してしまえばあとはどうにでもなるので、テキストを返すだけの超シンプルなWebAPIをサンプルで作りました。
WebFTPのpublic_html配下にtest.phpファイルを作成します。
で、以下のようなコードを書いてみます。
<?php
echo "TEST RETURN";
?>
「TEST RETURN」という文字が返ってくる、ただそれだけのプログラムです。
「http://ドメイン名/test.php」にアクセスすると画面上に「TEST RETURN」と表示されました。
あとは、クエリ文字列を受け取るロジックやデータベースアクセスをするロジックをPHPファイル内に実装すればいいだけなので、WebAPIは実現できそうです。
アプリやWebサービスで利用
使う側は、C#だろうとVB.NETだろうとJavaScriptだろうと、HTTPリクエストを送信して結果を返す仕組みはあるので、上記のURLを投げるだけです。
この記事の方法でもできました。
なぜWebAPI化するのか?
MySQLがあるなら直接アクセスすればいいと思われるかもしれません。
データベースに直接アクセスする場合、アクセスユーザやパスワードの情報を埋め込むことになります。
悪意のあるユーザにコードを解析されてユーザとパスワードが漏洩したら、データベースにアクセスされて情報を抜かれたり改竄されたりしてしまいます。
そのためあくまでデータベースの入り口はWebAPIに限定しておく必要があります。
また、複数のサービスから同じデータベースを使う場合に、同じWebAPIを通せばアクセス制限なんかを一元管理できます。
※今はXSERVERのMySQLには外部から直接アクセスできないようになっているようです。
データベース問題が解決して一安心
ずっとデータベース環境どうしようと悩んでいたんですが、これで解決しそうなので安心して開発に専念できます。
あとはPHPでWebAPIの中身を実装する方法を勉強しなければ…。