#目的
Firebaseって何?
使ってみたいけどどんなものなの?って人向け
#ざっくりFirebaseってどんなものなのか?
ざっくり説明します。
Googleが提供するBaasの一種。
Node.jsを利用したWebアプリケーションのバックエンドサービスです。
と言っても何を言っているのかわからないと思います。
Firebaseの基本的な構想としては(と言うよりもBaasの構想かな?)バックエンドの開発が必要ないサービスです。
例えば、ログイン機能。
Authenticationの機能がFirebase側で用意されていますので、フロントでFirebaseのAuthenticationを記述します。
そうするとあら簡単、ログイン機能完成です。
こう言ったバックエンドサービスを提供しているのがFirebaseなんですよ。って理解で良いと思います。
#Node.jsとは?
Node.jsとは、javascriptで開発可能な、サーバーサイド向けのプラットフォームのことです。
プラットフォームである。と言うことが重要です。フレームワークではありません。
簡単に言うと、Javascriptのコードを解釈して、バックエンドで動作させることができるのがNode.jsです。
実行する機能を持っているので、フレームワークとは明確に異なります。(単純なAPIの集合体ではないってことです。)
#Node.jsの利点
##フロントもバックエンドも同じ言語で記述できる。
Javascriptをかけるエンジニアだけ集めればいいじゃん!
→ 人員を集めるハードルが下がる。
→ そして地球は平和になる。
##シングルスレッドで、かつ非同期で動作するJavascriptをサーバー側でも動作させることができる。
多くの端末からアクセスされるシステムに強い!(C10K問題の解消)
→ スマホアプリなんかの開発が楽になる!
→ そして地球は平和になる。
#ここがすごいよFirebase
##バックエンドの処理がいらない!
上の説明と重複しますが、以下のようなシステムの場合を考えてみましょう。
「ログイン」
「会員登録」
「商品登録」(写真アップロード)
・
・
etc
こんなシステムの場合、バックエンドの処理が一切必要ありません。
ログイン・・・Firebaseが用意している関数を利用すれば即実装可能。
DBへの登録・・・フロント側からDBの保存処理用の関数を呼べば登録可能。
写真のアップロード・・・Storage(AWSでいうとS3みたいな機能)への保存処理をフロントから呼ぶ
・
・
・
みたいな感じですので、フロント側の処理でほとんどの処理が実装可能です。
##ミドルウェアが一切必要ない!
これすごいんすよ。
一番感動したのが、ローカル環境でコマンドラインから
firebase serve
って打つと、ローカルからFirebaseのDBを勝手に参照してくれるんです。
各自で環境を用意する必要が一切ない。
Node.js入れて、firebaseCli入れて、firebase loginして実行すればどこでも誰でも環境完成です。
configで参照先編集して、とかvagrantの環境を自分用に編集してとか、ファイアーウォールの設定してとか諸々の準備が必要ありません。
##運用費やっす!
小規模のスマホアプリやWebアプリなら断然安いです。
企業様向けのシステムでも小規模システムなら運用費数百円〜千円前後で済むこともあります。
大規模になると、多分高くなります。(従量課金なので)
見積もったことないのでわからないんですが、大規模な開発はそもそもBaasの基本設計思考から外れるんじゃないのかな?と個人的には思っています。
#ここが困るよFirebase
##RDBMSとは違う!どっちかっていうとKVSに近いDB!
つまりこういうことです。
・条件文に否定が使えない。
・条件文にorが存在しない。(最新のアップデートで使えるようになったんでしたっけ?)
・Group Byが使えない
etc
RDBMSに慣れていると、すっごく不便に感じます。
解消方法としては、Algoriaってツールが代表的ですね。
Algoriaに関しては・・・ざっくり言うと、全文検索を実現してくれるツールです。
使用感としては、AWSのElasticsearchと似た感じなのかなぁ。
※Algoriaの導入にはお金がかかります。
##Functionsで拾えないエラーがある。
Functionsっていうバックエンドで動かしたい場合に利用する機能があります。(例えばバッチ処理とか、他システムからのAPI通信とか)
ここでエラーログが出力されなくて困りました。
今回本問題にぶつかったのは、恐らくメモリが足りなくて怒られているんじゃないか?という予想をしたエラー。
本当の原因はまだ分かっていないんですが、何故か処理が途中で止まる。エラーログも吐き出されない。
本当に困りました。メモリを上げて実行してみたら正常に動作しましたので、一応解決という方針にしましたが。。。
#Firebaseの導入すべきプロジェクト
##独断と偏見による 導入するならこんなプロジェクトじゃない?
・リアルタイムで通信が必要なシステム
・接続クライアントが多いシステム
・小規模なプロジェクト
##独断と偏見による 導入すべきではないプロジェクト
・大規模なプロジェクト
・複雑なデータ管理が必要なプロジェクト
#まとめ
私が感じた個人的なFirebaseの強みは、バックエンドの処理が必要ないこと。
逆にいうと、必要機能はFirebaseが用意してくれているので、Firebaseを超えた機能を使いたい場合、または、既存機能を使わず、カスタマイズして利用したい。などは非常に大変だと思います。
つまりカスタマイズ性が低い。
その点で言うと、AWSはカスタマイズ性が高いです。できないことがほぼ無い。ミドルウェアだって用意し放題だし。
しかしながら、小規模開発、またはリアルタイム通信を沢山行いたい。と言う案件であれば、機能、料金的にみても、Firebaseがオススメです。
(と言うかC10K問題にぶつかるんならNode.js利用が良いのですが。)
因みに、私が個人的にアプリ開発をするとなれば、Firebaseを使います。
圧倒的な運用費の安さが魅力です。
企業様からの案件だったら、案件内容にもよりますが、要望に答えやすいように、AWSをオススメしちゃうかなー。
まぁでも、提案内容にもよりますが、機能的な制限はAWSよりはありますが、Firebaseを選ぶ企業様も多いんじゃないかなー。だって安いし。
ってのが個人的な所感です。