Firebaseのデータベースで何ができるか?

記事
IT・テクノロジー

Firebaseのデータベースで何ができるか?

Firebase は色々な機能を提供しています。その中でもよく使われる機能はログイン(ユーザー認証)とデータベースです。 データベースと言うと何か難しそうな気がしますが、基本はデータを置く場所です。データをどのように整理しておくかは工夫が必要ですが、インターネット上のデータを置く場所と考えるとわかりやすくなります。基本のデータの形は Javascript でよく利用されるデータ形式の JSON なので、Javascript のプログラムとは相性が良いので便利です。

SQL との違いは?

Web アプリや Web サービスと連携してよく利用されるデータベースに SQL があります。よく比較されますが、一般的なアプリやサービスでは SQL より扱いやすいデータベースです。

SQL のデータの基本は「テーブル」です。イメージとしては誰もが利用したことがある表計算の表のイメージです。Microsoft の Excel が代表的なアプリですが、色々なデータをまとめるのに利用したことがある方は多いと思います。

SQL のデータベースを利用する場合に必要なことは以下の通りです

* 表(テーブル)のフォーマットを決める
* 表(テーブル)をデータベース上に作成
* 表のデータを出し入れする記述(SQL)を書く
SQL 自体はデータベース上のテーブルにデータを入れたり、読み出し、更新、削除をするための記述で厳密にはプログラムではありませんが、通常はプログラムからデータベースとデータのやりとりをする際に利用されます。

テーブルに保存されるデータの各項目は予め決める必要があって、実際にデータを出し入れする前にデータベースの準備をしておく必要があります。通常は、サーバー側でプログラムを動かしてデータをやりとりする場合が多く、Web ブラウザで動作するフロントエンドの Javascript のプログラムとは別のプログラムをサーバー側(バックエンド)に作る必要があるので開発が複雑になります。

これに対して Firebase のデータベース(Cloud Firestore)は、Javascript で扱うオブジェクトの JSON 形式のデータを直接保存する事ができます。データを保存するのが、SQL の場合はテーブルなのに対して、Firebase のデータベース(Cloud Firestore)ではコレクションと呼ばれる「入れ物」に JSON 形式のデータを保存します。

事前に、データの構造を決める必要もなく、Firebase の API を呼び出すだけで利用できるので、SQL よりは簡単で手軽に利用できます。

テーブルも扱える

Micorsoft Excel のような表形式のデータは全ての行のデータの項目が同じなので扱いやすく、プログラムを書く場合でもよく利用される形式のデータです。Firebase のデータベースでももちろん扱うことができます。一言で言えば、コレクションに入れるデータ(ドキュメント)のデータ項目(フィールド)を同じにすれば良いだけです。

Firebase の場合は、コレクションに入れるデータ(ドキュメント)のデータ項目は同じである必要はなく、各データで違うデータの項目で保存もできるので自由度がより高くなっていますが、当然、上で書いたようにデータの項目を揃えればテーブルと同じ構造のデータを扱うのも問題ありません。

欠点は?

データ構造に自由度があるのが大きな特徴ですが、欠点もあります。 一番大きな欠点は「クエリー」は SQL の方が強力で色々なことができますが、Firebase のクエリーは最小限の事しかできません。

SQL のデータベースを設計する際は、通常は正規化とよばる最適化を考慮したデータ構造にします。簡単に言うならばテーブル間で同じデータ(重複するデータ)を作らないように設計します。その上で複数のテーブルを組み合わせてクエリーを記述して必要なデータを効率よく取り出せるようにします。

一方で Firebase の場合、複数のコレクションにまたがるようなクエリーは直接は記述できないので、データの取り出しは各コレクションごとに行う必要があります。従って、SQL のデータベースを設計するときのような正規化はデータの検索を複雑にしてしまうので、必ずしも SQL のデータベースの設計方針と同じような設計をしない場合も多くなります。

こうした制限があるため、複数のテーブルを関連させた大きなデータの格納や検索には余り向いていないと言えます。(理論的には実装は可能です)Firebase の料金体系をみると、データベースのクエリーの数や読み込み、書き込みの回数が料金に影響するので、一つのデータの検索に複数のクエリを多用する必要があるアプリの場合、どうしてもアクセスの回数が増えてしまうので料金的にも不利だと言えます。

向いているアプリは?

Firebase が向いているアプリやサービスは小規模な多くのデータを必要とするようなアプリです。 例えば、Web ページのフッターやヘッダーの文字を読み込むなど、Web サイトの設定情報を置いておくとか、チャットやメールのようなメッセージの一時格納に使うなどは余り複雑なクエリーは必要でなく、色々な形式のデータを扱う必要が多いため相性が良いアプリだと言えます。

* メッセージの一時収納
* Web サイトのタイトルなどの設定
* グループやグループに所属する利用者の管理
* Microsoft Excel のシート(表)で管理できる程度のデータ管理
などは、比較的クエリーもシンプルで Firebase でも検索や管理がやりやすい例です。

Firebase のデータベースは高速!

もう一つの特長は Firebase のデータベースは高速という点です。 よく Firebase の利用事例として、チャットのアプリなどが紹介されていますが、Firebase はチャットなどデータの更新をリアルタイム(に近い形)で処理するようなアプリに向いています。 誰かが複数の人にメッセージを送るようなアプリを実装した場合、データベースにメッセージを書き込む形で他の利用者と共有するようにすると、メッセージをやりとりするチャットのアプリが簡単に実現できます。

データベースのデータが更新されたイベントを各利用者のアプリが検出してほぼリアルタイムで更新した情報を表示することが簡単にできます。

別の例としては、インターネットを利用して他のサービスとのやりとりをする場合アクセスが遅く待ち時間が多くなる場合があります。このような場合、Firebase に他のサービスのデータのコピーを保持させて(キャッシュして)Firebase のデータベースのデータを使うことで、待ち時間を改善することも可能です。Firebase と他のサービスのデータの整合は、裏で(バックエンドで)行うようにすると、利用者には待ち時間が少ないストレスのないアプリやサービスとして提供できます。

アプリの可能性は無限!

Firebase のデータベース(Cloud Firestore)の利用方法は色々考えられる思います。 「データベース」と言うと何を奥1のかなかなかピンと来ない場合も多くなります。しかし、シンプルに考えると Web アプリで使うデータのうち

* 後でまた使いたいデータ
* 保存しておきたいデータ

は Firebase のデータベースに残しておけば、次にアプリを立ち上げた場合でも再利用できるのでアプリやサービスの価値が上がります。データを残していない場合、アプリを起動する度に設定を行う必要があったり、データの読み込みや入力を行うことが必要があります。Web ブラウザを利用したアプリの場合、端末(PC やスマホ)のデータのアクセスにはセキュリティ上の制約があるため、データを保存する場合は基本的にはサーバー側(バックエンド側)になります。

Firebase は JSON で保存できるため、Web アプリや Web サービスにはとても相性がよく手軽に利用できるため便利です。

ログイン機能と組み合わせて使う場合が多い!
Firebase に限らずインターネット上のデータベースにデータを置いて利用するアプリの場合、ログイン機能(ユーザー認証機能)と組み合わせて利用する場合が多くなります。これは特殊なケース、例えばデータを不特定多数の利用者で共有するような場合です。具体的な例としては公開掲示板のようなアプリを作る場合は、不特定多数の人が同じデータを共有して利用するので利用者を特定する必要はありません。

しかし、メッセージのやりとりをする場合などは、宛先の利用者以外には読めなくするというような措置が必要になります。そのような場合、利用者を特定するために、認証機能を利用して予め利用者を特定した上でデータの所有者を決めて扱う場合が多くなるため、データーベース機能はログイン機能と組み合わせて使うケースが圧倒的に多くなります。

Firebase を利用する場合、このログイン機能(ユーザー認証機能)もサポートしているのでとても便利です。 特に、ログイン機能とデータベースの連携も比較的簡単でセキュリティルールもこのログイン(ユーザー認証)の結果を取り込んで記述するのです。

実際に殆どの Web アプリやサービスでは、Firebase のデータベース(Cloud Firestore)の機能で十分カバーできるため Firebase を利用すると簡単にアプリを作ることが可能です。

まとめ
Firebase のデータベースをどのように使って Web サービスや Web アプリを作るかを紹介してきました。 「データベース」と考えると難しく見えますが、基本的には「よく使うデータ」や「再利用したいデータ」の置き場所と考えると、シンプルで考えやすくなります。 データの所有者などを特定するログイン(ユーザー認証)など組み合わせて利用したい機能も提供しているので、Web で利用価値の高いアプリを最低限のプログラムで実現できます。事前の設定も SQL ほど面倒ではないので初めて Web アプリ、Web サービスを開発する方でも簡単に Web アプリ、Web サービスを作れます。
サービス数40万件のスキルマーケット、あなたにぴったりのサービスを探す