Firebase:良い、悪い、素晴らしい.


導入


私の開発者の1人は、これがフロントエンド開発者である最高の時代であると言いました、そして、これは真実です.そこにはあらゆる種類の偉大なアプリケーションを作るために力を与える技術がありますクリックのカップルと私たちのフロントエンドからそれらを使用する準備が整いました.
今日、我々はこれらのテクノロジー、Firebaseの1つをカバーするつもりです.

Firebaseは何ですか?


FireBaseは、開発者が構築、リリース、およびWeb、Android、およびIOSのアプリを監視するためのツールのセットを提供するGoogleによってバックアップされたサービスプラットフォームとしてバックエンドです.
認証、データベース、ストレージ、リアルタイムデータベース、ホスティング等について話しています.

Firebaseの私の背景


私はFireBaseを使用してアプリケーションを構築していますが、私が建てた2月までの完全な強さではありませんzen 生産性のアプリは自分自身を中心に私のタスクに集中し、Vercel&HasNode Hackathonに参加するのに役立ちます.禅の打ち上げからこのポストの日付まで、私はFirebaseの道具の80/90 %のように使いました、そして、ここで私は私の痛み、私がFirebaseと恋に落ちるようになったものと消化するのが少しより難しくされたものです.
あなたが得るこのポストの終わりに:
  • FireBaseによって提供される最も重要なツールの概要.
  • Firebaseが最もよく知っているシナリオを知っていてください.
  • 制限は、FireBaseを使用してアプリケーションを構築するときに見つけることができます.
  • 私のファイアベースのスキルを向上させるために私を務めたリソース.
  • 良い部品


    認証


    ほとんどの開発者は認証フローを持つアプリケーションを起動すると思います.FireBaseでは、このプロセスはうれしいと高速です.我々は、匿名のセッションに電子メール、Google、FB、githubからのプロバイダでの署名のための12のオプションがあります.

    有効にするには、資格情報を設定し、有効にするをクリックします.

    プロジェクトでは、このようにAuthのメソッドにアクセスできます.
    export const register = async (email, password) => {
        return firebase.auth().createUserWithEmailAndPassword(email, password).catch(reason => {
            throw new Error(reason.message);
        })
    }
    
    export const login = async (email, password) => {
        return firebase.auth().signInWithEmailAndPassword(email, password).catch((reason) => {
            throw new Error(reason.message);
        })
    }
    
    そして、最後のステップは、状態変化が認証されたユーザーをセット/解除するとき、聞く.
        firebase.auth().onAuthStateChanged((user) => {
            if (user) {
               ...
                firebaseState.user = user;
            }
        })
    

    データベース.


    私たちは2つのデータベースオプションのFireStoreとリアルタイムデータベースがありますどちらも内蔵のリアルタイム機能を提供します.あなたが他のツールとの機能を実装していたMySQLの背景から来て、これはFireBaseによって心吹きとキラー機能であり、それはチャット、およびコラボレーションツールのようなアプリケーションのオプションに行くことができます.
    どちらもSQLドキュメントベースのデータベースです.Firestoreより高度なクエリやルールを提供する強力です.ドキュメントを含むコレクションを作成し、すべてのドキュメントにサブコレクションを作成できます

    それはあなたのデータベースのコレクションとドキュメントのアクセスを許可する条件です.ここでは、例えば、ユーザーがそれらのためのタスクを作成し、ユーザがタスクの所有者である場合は削除および更新を許可するように指示しています.
    match /tasks/{taskId} {
      allow create: if request.auth != null && request.resource.data.user_uid == request.auth.uid;
      allow delete, update: if request.auth != null && resource.data.user_uid == request.auth.uid; 
    }
    
    しかし、あなたは、私は他のユーザーが自分のボードを見ることができるバージョン2.0で共有オプションを必要とする禅で、例えば、より高度なルールを設定することができます.我々はコレクションを保存しましたdocuments/shared/$(userUid)/accounts/${taskOwnerId}以下の規則は、「私が認証され、タスクが私のものであるか、または私と一緒のユーザ共有ボードに属しているならば、私にタスクを読ませます」と翻訳します.
    match /tasks/{taskId} {
      allow read: if (request.auth != null && resource.data.user_uid == request.auth.uid) || (exists(/databases/$(database)/documents/shared/$(request.auth.uid)/accounts/$(resource.data.user_uid))); 
    }
    

    関数


    すべてがフロントエンドで動作することはできません、サーバーから管理される必要がある機密データがあります.
    クラウド関数は、独自のサーバーを維持することの痛みなしでサーバー上のものを実行するFireBase方法です(別名Serverless)彼らは柔軟性があり、他のFirebaseツールと非常によく補完します.Authを使用してユーザーのサインアップの機能をトリガすることができます後、書き込み、更新、FireStoreのドキュメントを削除すると、バックグラウンドでスケジュールされた関数を実行すると、空が制限されます.

    バックエンドで定義する関数であるcallables *を持っていて、名前だけでフロントエンドから呼び出すこともできます.必要はありませんAxiosをインストールし、エンドポイントに呼び出しを行う.
    exports.shareMatrix = functions.https.onCall(async (data, context) => {
       const user = context.auth;
       // do stuff with data
      return "OK"
    })
    

    Defining the cloud function in the backend


    ...
     const shareMatrix = functions.httpsCallable('shareMatrix');
      shareMatrix(formData).then(() => {
        clearForm()
        emit('saved', formData)
      })
    ...
    

    Invoking the function in the frontend


    その他のツール。


    言及する価値がある他のツールは、ホスティング、記憶と分析です
  • ** デフォルトでSSLでFireBaseプロジェクトで複数のサイトを展開することを許可します.カスタムドメインを設定することができますし、以前のバージョンに展開を復元する
  • ストレージ:あなたのFireBaseプロジェクトのクラウドでファイルイメージ、ビデオ、オーディオなどを保存できます.
  • *フリー分析は、最も使用される機能、ユーザーの保持を追跡する.
  • 悪い。


  • データベース
    あなたがリレーショナルデータで働いているならば、あなたは2つのことをすることができますdenormalize your data , 言い換えれば、1つのクエリで推奨される方法で必要なすべての情報を文書を提供するために繰り返すか、またはあなたのデータを取得するために複数のクエリを行うには、すべての情報を格納するために繰り返しています.
  • ベンダーのロックイン:Googleがバックアップした部分を覚えていますか?よく、FireBaseは、多くのツールを持っている場合は、ハードを使用して、他のプラットフォームには、他のプラットフォームに移動するには、あなたのデータを保存し、別のサービスで復元する簡単なパスを持っていない明日の価格を明日を決定する場合は、他のプラットフォームに移動することです.
  • 固定価格はありません.多くのサービスが今日のように働くので、それは全く悪くありません、しかし、あなたが会計の観点からあなたの次の請求書のコストを予測することができないという事実は計画のために悪いです.
  • Firebaseを使うとき

  • FireBaseがAuth、ストレージ、ホスティング、サーバー、リアルタイムなどのより困難な部分の面倒を見ているので、高速開発が必要な場合は、プラスかもしれません.
  • あなたはリアルタイム機能を必要とし、あなたのアプリは多くの関係を必要としません.
  • また、Androidとのアプリのモバイル版が必要な場合、ネイティブ、例えば、私は自分の経験からスムーズに移行することができますと言うことができます.
  • 低コストソリューションを備えたプロトタイプMVP
  • Firebaseが最良の選択肢でないかもしれないとき

  • 複雑なデータベース関係の操作
  • つのベンダーに依存したくない
  • ラッピング


    FireBaseは、我々の関数を使用するために必要な-彼らの有料オプションでも低コストでアプリケーションを高速に開発することができます.それはアイデアを検証するための良いオプション、小さなサイドプロジェクトを構築し、私のような場合は、興味深い技術を試して楽しんでいる.
    これらの機能が好きなら、以下のような他の選択肢をチェックできます.
  • Supabase
  • Amplify
  • 私はあなたが役に立つことを願って、あなたがここにいるか、または任意の質問について教えてください.読書のおかげで、良い一日を過ごす.