Cloud Firestore によるデータベース機能を試す
「Cloud Firestore」によるデータベース機能を試したので、まとめました
1. Cloud Firestore
「Cloud Firestore」は、Firebaseが提供するNoSQLクラウドデータベースサービスです。階層構造のデータを格納することができます。
階層構造の要素は、次のとおりです。
階層構造の設計のポイントは、次のとおりです。
2. 使用料金
使用料金は、次のとおりです。
3. データベースの作成
はじめに、データベースを作成します。
(1) Firebaseのコンソールでプロジェクトを作成。
(2) Firebaseプロジェクトで「Firestore Database」を選択し、「データベースの作成」を押す。
(3) 「本番モード」と「テストモード」を選択。
「テストモード」は、全ユーザーがアクセスが許可されているモード、「本番モード」は自分でアクセス権限のルールを編集するモードです。
(4) 「リージョン」を選択。
デフォルトの「データベース」が生成されました。データベースの各種操作が可能になります。
(5) 「コレクションを開始」をクリックし、コレクションの情報 (コレクションID) を入力し、「次へ」をクリック。
(6) 最初のドキュメントの情報 (ドキュメントIDと各種フィールド) を入力し、保存をクリック。
コレクションと最初のドキュメントが追加されます。
フィールドで使用できるデータ型は、次のとおりです。
4. サービスアカウントキーの準備
「Firebase Admin SDK」を利用するには、Firebaseプロジェクトの「サービスアカウントキー」が必要です。
(1) Firebaseプロジェクトの歯車アイコンをクリックし、「プロジェクトの設定」を選択し、「サービスアカウント」タブを選択し、「サービスアカウントを作成」ボタンを押す。
(2) 「新しい秘密鍵の生成」ボタンを押す。
「サービスアカウントキー」(*.json)がダウンロードできます。
5. PythonによるCloud Firestoreの操作
5-1. ドキュメントの取得
ドキュメントの取得手順は、次のとおりです。
(1) Pythonの仮想環境の準備。
(2) パッケージのインストール。
$ pip install firebase-admin
(3) Pythonスクリプトの作成。
「serviceAccountKey.json」には、自分のサービスアカウントキーのパスを指定してください。
import firebase_admin
from firebase_admin import credentials, firestore
# Firestoreへの接続
cred = credentials.Certificate("serviceAccountKey.json")
default_app = firebase_admin.initialize_app(cred)
db = firestore.client()
# ドキュメントの取得
col_ref = db.collection("users")
doc = col_ref.document("001").get()
if doc.exists:
print(doc.id, ":", doc.to_dict())
001 : {'age': 15, 'name': '後藤ひとり'}
5-2. ドキュメントの追加
ドキュメントの追加手順は、次のとおりです。
# ドキュメントの追加
col_ref = db.collection("users")
col_ref.document("002").set({
"name": "喜多郁代",
"age": 15
})
5-3. ドキュメント一覧の取得
ドキュメント一覧の取得手順は、次のとおりです。
# ドキュメント一覧の取得
docs = db.collection("users").stream()
for doc in docs:
print(doc.id, ":", doc.to_dict())
001 : {'age': 15, 'name': '後藤ひとり'}
002 : {'age': 15, 'name': '喜多郁代'}
5-4. ドキュメントの更新
ドキュメントの更新手順は、次のとおりです。
# ドキュメントの更新
col_ref = db.collection("users")
col_ref.document("002").update({
"age": 16
})
5-5. ドキュメントの削除
ドキュメントの削除手順は、次のとおりです。
# ドキュメントの取得
doc_ref = db.collection("users").document("002")
doc_ref.delete()
5-6. ドキュメントのクエリ
ドキュメントのクエリ手順は、次のとおりです。
# ドキュメントの追加
col_ref = db.collection("users")
col_ref.document("002").set({
"name": "喜多郁代",
"age": 15
})
col_ref.document("003").set({
"name": "伊地知虹夏",
"age": 16
})
col_ref.document("004").set({
"name": "山田リョウ",
"age": 16
})
# ドキュメントのクエリ
query = db.collection("users").where("age", ">=", 16)
docs = query.get()
for doc in docs:
print(doc.id, ":", doc.to_dict())
003 : {'age': 16, 'name': '伊地知虹夏'}
004 : {'age': 16, 'name': '山田リョウ'}
クエリ演算子は、次のとおりです。
クエリは、並び替えたり制限したりできます。
query = db.collection("users").where("age", ">=", 15).order_by("age", "DESCENDING").limit(3)
6. SwiftによるCloud Firestoreの操作
6-1. ドキュメントの取得
ドキュメントの取得手順は、次のとおりです。
(1) XcodeプロジェクトのFirebaseセットアップ。
FirebaseコンソールでFirebaseプロジェクトにiOSアプリを追加し、指示に従ってXcodeプロジェクトのFirebaseセットアップを行います。
(2) パッケージのインストール。
「firebase-ios-sdk」で「FirebaseAnalytics」と「FirebaseFirestoreSwift」をインストールします。
https://github.com/firebase/firebase-ios-sdk
(3) コードの作成。
import FirebaseFirestore
import FirebaseFirestoreSwift
// Firestoreへの接続
let db = Firestore.firestore()
do {
// ドキュメントの取得
let colRef = db.collection("users")
let doc = try await colRef.document("001").getDocument()
print("\(doc.documentID) : \(doc.data()!)")
} catch {
print("Error: \(error)")
}
001 : {'age': 15, 'name': '後藤ひとり'}
6-2. ドキュメントの追加
ドキュメントの追加手順は、次のとおりです。
do {
// ドキュメントの追加
let colRef = db.collection("users")
try await colRef.document("002").setData([
"name": "喜多郁代",
"age": 16
])
} catch {
print("Error: \(error)")
}
6-3. ドキュメント一覧の取得
ドキュメント一覧の取得手順は、次のとおりです。
do {
// ドキュメント一覧の取得
let colRef = db.collection("users")
let querySnapshot = try await colRef.getDocuments()
for doc in querySnapshot.documents {
print("\(doc.documentID) : \(doc.data())")
}
} catch {
print("Error: \(error)")
}
001 : {'age': 15, 'name': '後藤ひとり'}
002 : {'age': 15, 'name': '喜多郁代'}
6-4. ドキュメントの更新
ドキュメントの更新手順は、次のとおりです。
do {
// ドキュメントの更新
let colRef = db.collection("users")
try await colRef.document("002").updateData([
"age": 16
])
} catch {
print("Error: \(error)")
}
6-5. ドキュメントの削除
ドキュメントの削除手順は、次のとおりです。
do {
// ドキュメントの削除
let colRef = db.collection("users")
try await colRef.document("002").delete()
} catch {
print("Error: \(error)")
}
6-6. ドキュメントのクエリ
ドキュメントのクエリ手順は、次のとおりです。
do {
// ドキュメントの追加
let colRef = db.collection("users")
try await colRef.document("002").setData([
"name": "喜多郁代",
"age": 15
])
try await colRef.document("003").setData([
"name": "伊地知虹夏",
"age": 16
])
try await colRef.document("004").setData([
"name": "山田リョウ",
"age": 16
])
// ドキュメントのクエリ
let querySnapshot = try await colRef
.whereField("age", isGreaterThanOrEqualTo: 16).getDocuments()
for doc in querySnapshot.documents {
print("\(doc.documentID) : \(doc.data())")
}
} catch {
print("Error: \(error)")
}
003 : {'age': 16, 'name': '伊地知虹夏'}
004 : {'age': 16, 'name': '山田リョウ'}
ソート付きクエリは、次の通りです。
let querySnapshot = try await colRef
.whereField("age", isGreaterThanOrEqualTo: 15)
.order(by:"age", descending: true).getDocuments()
004 : ["name": 山田リョウ, "age": 16]
003 : ["age": 16, "name": 伊地知虹夏]
002 : ["age": 15, "name": 喜多郁代]
001 : ["age": 15, "name": 後藤ひとり]
クエリ演算子は、次のとおりです。
クエリは、並び替えたり制限したりできます。
let querySnapshot = try await colRef
.whereField("age", isGreaterThanOrEqualTo: 15)
.order(by:"age", descending: true)
.limit(to: 3).getDocuments()
関連
この記事が気に入ったらサポートをしてみませんか?