10
9

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

Unityでデータベースを利用したい人に向けたFirestore入門

Posted at

はじめに

Unityを利用したときにデータベースサーバーまで自分で構築するのは面倒ですよね。そんな時に便利なのがクラウド・データベースです。

クラウド・データベースにはいくつか種類がありますが、今回はFirestoreについて紹介しようと思います。

Firestoreについてはすでに数多く存在しているので、それらの記事を紹介しつつ自分なりにまとめるという形にしています。

Firestoreとは

Google社が提供するNoSQL型のデータベース

NoSQLとは

NoSQLとはNot only SQLの略で関係データベース以外のデータベースを指します。名前からしてNotSQL(SQLでない)に勘違いされることがありますが、れっきとしたSQLの一種です。

Firestoreの構造

  • リレーショナルデータベースでいうところのテーブルをコレクション、カラムをドキュメントIDという。
  • jsonのような構造になっておりコレクションの中にドキュメントIDがある、ドキュメントIDの中にコレクションがある場合もある
  • 最上位以外のコレクションはサブコレクションと呼ばれる

概要の把握についてはこちらの記事がわかりやすかったです

また、公式ドキュメントが日本語かつ量もそこまで多くないので読んでおくといいと思います。

データの操作

以下のコードはC#によるものなので、他の言語の方は公式ドキュメントをご覧ください。

基本的にCollectionとidを指定してデータの操作をするイメージです

INSERT

dataBase = FirebaseFirestore.DefaultInstance;

// 追加データの用意
Dictionary<string, object> data = new Dictionary<string, object>()
{
   {"Name", "Hoge"},
};

// id未指定(自動で生成されます)
Task writeTask = dataBase.Collection(Collection).Document().SetAsync(data);

// id指定
Task writeTask = dataBase.Collection(Collection).Document(id).SetAsync(data);

SELECT

var db = FirebaseFirestore.DefaultInstance;
QuerySnapshot getData = await db.Collection(Collection).GetSnapshotAsync();
foreach (var document in getData.Documents)
{
    Dictionary<string, object> DictionaryData = document.ToDictionary();
    // idが一致するものを検索
		if (document.Id.Equals(id))
    {
				Debug.log(DictionalyData["Name"].ToString())
    }

}

UPDATE

var db = FirebaseFirestore.DefaultInstance;
Dictionary<string, object> data = new Dictionary<string, object>()
{
   {"Name", "sayyyyy"},
};

DocumentReference OriginData = db.Collectn(Collection).Document(id);

OriginData.UpdateAsync(data);

DELETE

var db = FirebaseFirestore.DefaultInstance;
DocumentReference DeleteData = db.Collection(Collection).Document(id);
DeleteData.DeleteAsync();

取得した情報の変換

取得してきたデータはそのままでは型が違うので利用できません。そのため取得してきたデータに対してキャストする処理を記述してあげる必要があります。

// String
docDictionary["path"].ToString();

// int
(int) Convert.ChangeType(docDictionary["path"], typeof(int));

// bool
(bool) Convert.ChangeType(docDictionary["path"], typeof(bool));

// array
(List<object>) Convert.ChangeType(docDictionary["path"], typeof(List<object>));

// timestamp
(Timestamp) Convert.ChangeType(docDictionary["path"], typeof(Timestamp));

詰まったところ

Firestore側で権限を変更するのを忘れていて、データベースにアクセスできませんでした。かなり時間を費やしました…

auto incrementの実装

FirestoreはRDBMSと異なり、標準ではAuto Incrementをサポートしていないらしい。まあそりゃそうなんだけど…

実装する方法は下記記事で解説してくれていました。

参考資料

10
9
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
10
9

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?