【備忘録】Firestoreのメリット

投稿日:2024/12/04 最終更新日:2024/12/04

【備忘録】Firestoreのメリット

Firestoreとは

FirestoreはNoSQL のサーバーレスデータベースであり、Apple/Android アプリやウェブアプリなど複数のクライアントからネイティブ SDK を介して直接アクセスできる。

スキーマレスであること

スキーマレスとはデータベース構造をあらかじめ定義しておく必要のないということを意味する。

つまり、データ構造を把握する必要が無くデータ投入に併せて自由にDB構造を変えることが出来る。

しかし、自由に改変できることで返ってnullの発生を起こすこともありうる。

なぜならDBを複数のクライアントで操作する場合、投入するデータに違いが発生することがあるから。

ただ、型生成が不要であるためスキーマ情報から型情報を取得する必要が無いというメリットもある。近年は静的型付けが主流であり、PrismaORMなどを利用したDB設計も多くみられる。

そのため、PrismaORMから型情報を取得して型付けをする流れになる。

このようにスキーマレスなFirestoreでは実は型付けをすることもできる。

converterというコンバータオブジェクトを利用することによってDBの更新などに対して型検査を行えるため、型情報にないデータの挿入をはじくことが出来る。

この場合スキーマレスでは徐々に無くなってしまう部分もあるが、良い部分を残しつつDB運用をすることも可能になる。

マイグレーションがない

マイグレーションとはDBの変更内容をファイルに記録&実行して DB のスキーマを更新していく手法のことを指す。これは、既存のデータを維持しながらスキーマの変更履歴を管理して安全性を保つためには必要である。逆を言えば、DBの更新時はマイグレーションを基本的に挟む必要があるということ。

その点Firestoreではマイグレーションが無い。

つまり、「DB更新→マイグレーション→アプリ側の修正」といった手順を踏まなくてもよくなるので、ダウンタイムの発生を可能な限り抑えることが出来る。

スケーリングを自動でしてくれる

スケーリングとはアプリケーションなどの処理能力や容量を需要量に合わせて調整することを指す。

例えば、通常アクセス量が多くないアプリケーションの場合、何かのイベントなどを行った際にアクセス量が増大することが考えられる。

その際にサーバーの処理能力が追いつかなくなりサービスの停止などのダウンタイムを発生させることがある。

スケーリングとはアクセス数の増大した時などにサーバーの処理能力や容量をスケールアップもしくはスケールアウトすることによってその時々に適した調整を行う必要性がある。

Firestoreの場合は需要量に合わせてスケーリングを自動で行ってくれるため、開発者にとっては非常に楽になる。

他にもAmazon DynamoDBも自動スケーリングを行ってくれる。

モダンフロントエンドでの活用

Zod+Firestore(with converter)の事例があった。

https://tech.gamewith.co.jp/entry/2023/12/05/115148

※今度色々試してみようと思うので追記します