Firebaseのデータベースアクセス
Firebase のデータベースアクセス
Firebase のデータベースを利用する魅力の一つは、フロントエンド(Web ブラウザ)から直接アクセスできることがあります。一方で、バックエンドを実装すれば、バックエンドを経由したアクセスも可能です。では、どちらを利用するのが良いのかというと状況によって選択肢は変わってきます。この記事では、両方の利点と欠点をまとめて見ました。状況によって使い分けるコツとして活用ください。
目次 |
---|
初心者にはどちらが良い? |
バックエンドを経由してアクセスする |
バックエンドのサービスをどう作るか? |
拡張性か簡単に作るか? |
まとめ |
初心者にはどちらが良い?
最初に考えるのは、Web 開発の初心者の場合です。 この場合は、迷わずにフロントエンドから直接利用する方法がおすすめです。 理由は簡単で、バックエンドを作る必要が無いからです。Firebase の利点を最大限に活用して、短時間でシンプルに実装するのが良いと思います。バックエンドの開発やデータベースの設定だけでも、初心者には大きな負担です。従って、フロントエンドの開発に集中できるのは Firebase を活用する大きな理由になります。
では、この方法の欠点はなんでしょうか?
細かいことを挙げれば色々あると思いますが、大きな欠点は 2 点です。
- Firebase 以外のデータベースに移行するのが面倒
- セキュリティルールの設定が必要
もう少し具体的に書くと、Firebase のデータベースをフロントエンドから直接呼び出しているので、Firebase 以外のデータベースを利用するには、フロントエンドのコードを基本的には全面的に書き直す必要があります。これが、大きな問題になるかと言うと殆どの場合は大きな問題では無い場合が多いかと思います。このモデルの場合は、フロントエンドに集中した開発が大きな理由なので基本的に、余り選択肢がありません。フロントエンドのコードだけなので、当然別のデータベースを利用する場合、大掛かりな変更が必要になるのはある意味当然といえます。
ただ、可能性としては、アプリやサービスのアクセスの規模によっては、Firebase の従量制の料金体系だと運用コストが高くなってしまう場合は可能性としてはありえます。その場合は、別のデータベースでの実装を模索する事になりますが、その場合は大きな変更になるという事です。
セキュリティルールは、データベースのアクセスの権限を必要最小限にしてデータの保護をする必要があるという事です。このモデルの場合プログラムは基本的にフロントエンドだけなので、ソースコードは全て閲覧可能です。その場合、データベースのアクセスの管理は、セキュリティルールで行います。これは、Firebase コンソールで、Firebase のサーバー側で行うか、firebase-tools の SDK を利用して設定します。これをしないと、セキュリティ上、データが不正に書き換えられたり、不必要なデータアクセスをされるリスクがあります。従って、インターネットに公開して運用を始める前に、セキュリティルールを設定して必要以上の権限を与えないように管理する必要があります。
初心者以外でも、手っ取り早く、Web サービスや Web アプリを開発する場合にはこのオプションは非常に便利です。
バックエンドを経由してアクセスする
これは、上級者モードです。 バックエンドのサービスを作成して、バックエンドのサービスを通してデータベースにアクセスするようにします。 当然ですが、バックエンドのサービスを実装する必要があるので開発の手間は多くなります。
バックエンドからの Firebase のデータベースへのアクセスは、firebase-admin(firebase admin SDK)を利用してアクセスします。 プログラムの書き方自体は、フロントエンドからアクセスする場合とほぼ同じインターフェースでプログラムをかけるので便利です。 フロントエンドのコードを書いたことがあれば、バックエンドのコードを書く事自体は簡単なので余り大きな負担ではありません。
フロントエンドからは、カスタムで API を設定します。その API をフロントエンド(Web ブラウザ)から呼び出すことでデータベースにアクセスする仕組みにします。
この方法が有利な点は、将来的に別のデータベースを使う場合でも、フロントエンドのコードはそのままでバックエンドの API の中身だけを書き換えれば、データベースの切り替えができる事です。当然、バックエンドのコードは作り直す事になりますが、フロントエンド側のコードを変える必要が無いのは大きな魅力です。
もう一つの魅力は、セキュリティルールを設定する必要が無い事です。バックエンドからは基本的に Firebase のデータベースのデータには読み込み、書き込みを含めて全てアクセスできるので Firebase のセキュリティルールは不要です。
ただし、データベースのアクセスに制限を設ける場合は、バックエンドのプログラムで対応する必要があります。 API に認証の仕組みを取り入れたりして、API 毎にどのようにアクセスを管理するかをバックエンドのプログラムで実装する必要があります。
この方法は、バックエンドや API の仕組みをよく理解しておく必要がありますが、フロントエンドとバックエンドで実装を分ける事ができるので便利な場合が多くなります。フロントエンドは UI(ユーザーインターフェス)を中心に、バックエンドは、データベースやデータ処理を中心にコードを分ける事ができるので、やや規模の大きなアプリやサービスを開発する場合には有利になります。
バックエンドのサービスをどう作るか?
バックエンドのサービスは、Firebase のデータベースを利用する場合は、同じく Firebase を利用するのが便利です。 もちろん、Firebase admin SDK がサポートする言語を利用すれば、別のバックエンドでも利用できます。(例えば Python など)
バックエンドでは、REST API を利用するのが便利で、必要な処理やアクセスに URL を割り当てられて、その URL が指定された場合に必要な処理やデータベースアクセスをして結果をフロントエンドに返す形で実装します。Firebase のバックエンドは、通常は Functions を利用して実装します。手軽に実装をするには、「express」のフレームワークを利用すると便利です。
Express は、指定された URL と HTTP のメソッド毎に処理を簡単に分ける事ができるので、REST API を実装するのが簡単になります。
バックエンドでは、Firebase のログイン情報を利用したり、セッションを管理してセキュリティを確保する必要があります。さらに、トークン(パブリックキー/公開鍵)などを利用する方法もあります。
拡張性か簡単に作るか?
どちらを選ぶかは、将来の拡張性と簡易性のどちらが重要かを見極める必要があります。 簡単に作るには、フロントエンドから直接アクセスしてセキュリティルールを設定するのが一番簡単なのは上で説明した通りです。
Firebase の利点をフルに利用するには、この方法がやはり便利な方法の場合が多い t 思います。
バックエンドを作ることで、フロントエンドとバックエンドを分離して実装することが可能になり、バックエンドを入れ替えるだけで必要に応じて実装を入れ替えることができます。将来の拡張性を考えると便利ですが、いずれにしてもバックエンドの作り直しが必要になります。そう考えると、実際にバックエンドを入れ替えるのがわかっている場合を除けば、わざわざバックエンドを分けて実装するのは作業量などを考えた上で慎重に決める事をお勧めします。この方法が便利なのは、データベースの構造が複雑で、セキュリティルールの設定が大掛かりになる場合です。セキュリティールール自体は、データベースの利用もできるのでかなり複雑なルールの設定も可能です。しかし、バックエンドを介してアクセスするようにすれば、プログラムでアクセスの権限を管理できるので複雑なルールでも比較的設定しやすい場合が多くなります。
まとめ
Firebase のデータベースの利用には、基本的には Web ブラウザからアクセスする方法で実装するのが一般的です。 初心者でも簡単に、短期間でデータベースを利用した Web アプリや Web サービスを作ることができます。
ただ、よりセキュリティの強いアプリやサービスを開発したり、複雑なデータベースを作る必要がある場合には、バックエンドを実装して従来の開発に近い形で開発する方法も選ぶ事ができます。
Firebase は、初心者から上級者まで必要に応じて利用方法を選べる強力なシステムといえます。