思い立ったらサクッとSPAサイトが作れたらいいなぁと思っていたのですが、Reactはちょっとしたサイトを作るにも大掛かりになってしまうので諦めていました。
しかし、最近ReactのRecoilを触り始めたのですが、Recoilを使うと、Reactも随分シンプルに書けるようになっていました。
フロントエンドの手軽さはReact+Recoilで解決できそうなので、後はバックエンドをサクッと作れれば夢が叶いそうです。
そこで、モバイルアプリのバックエンドをサクッと作れる方法として、「Google Firebase」と「AWS Amplify」をよく聞くので試してみました。
ここでは、それぞれを使ってみた感想を書こうと思います。
FirebaseとAmplifyがやってくれること
Firebase、Amplify共に、バックエンドで面倒な、下記のような作業をやってくれます。
リソースの提供
- ホスティング
- ユーザー認証
- データベース
- ストレージ
- 関数
これらのバックエンドリソースをお膳立ててくれます。 しかも、それらはスケールするように構成されていて、将来アクセスが増えるようなことがあっても、何もしなくてもそのまま使えます。
ユーザー認証の簡素化
- ユーザー管理や認証
- 認証済みユーザーによる、バックエンドリソースへのアクセス
これらを自分で実装する必要がなく、SDKを使って簡単に行えます。プログラマは、ユーザーがログインした状態からコードを書くことができます。
以上により、FirebaseやAmplifyを使うと、プログラマは、インフラや認証はサービスに丸投げして、アプリロジックに専念することができるようになります。
Google Firebase
元々Firebaseは、Googleとは関係ない会社の、チャットアプリを作るためのバックエンドサービスが始まりで、それをGoogleが買収して、モバイルアプリのバックエンドサービスへと拡張したものです(Wikipediaより要約)。
その流れもあって、Firebaseは、その基盤としてGCPを利用しているものの、Firebase単体で1プロダクトとして完結しています。
Firebaseの単位は1アプリ(プロジェクト)で、違う目的のアプリを作る場合は、新たに別のFirebaseプロジェクトを作ります。 ただし、同じ目的のアプリならば、1アプリでSPA、iOS、Androidなど複数のプラットフォームのアプリを作ることができます。
Firebaseプロジェクトを1つ作ると、それ専用のGCPプロジェクトが作られます。
AWS Amplify
Amplifyは色んな説明がされていて、実際に使ってみるまでは、正直何なのかさっぱり分かりませんでした。
使ってみて自分なりの結論は
「モバイルアプリのバックエンドを、AWS上で簡単に構築するためのコマンド集」
でした。
Firebaseが1アプリ1プロジェクトだったのに対し、Amplifyは、AWSの1サービスに過ぎません。
なので、Amplifyではアプリをいくつも作ることができます。そして、アプリ毎に専用のバックエンドリソースが作成されます。
ただ、これらのリソースは、別にAmplify専用というわけではなく、通常のAWSサービスと同じもので、単にAmplifyがコマンド1つでAWS上に自動で作ってくれただけです。
例えばホスティングの場合、Amplifyが、CloudFormationを使って、S3とCloudFrontを作成しているに過ぎず、作成されたS3とCloudFrontは、むき出しのままAWSコンソールに表示されます。
一方Firebaseのホスティングの場合、アプリ作成時のGCPとは別の、Firebase専用のホスティング先が利用され、GCPからは独立しています。
Google FirebaseとAWS Amplifyの違い
モバイルアプリのバックエンドサービスの目的は、ユーザーの「インフラのことは考えたくない。認証まわりの実装はやりたくない」というニーズを満たすもので、そういった点では、Firebase、Amplify、共に満たしています。
FirebaseとAmplifyの一番大きな違いは、その立て付けですね。
Firebaseはプロダクト、Amplifyはツールといった粒度でした。
Firebaseが、Firebaseという、モバイルアプリのバックエンドをまるっと提供するサービスに対し、Amplifyは、AWSでのモバイルアプリのバックエンド構築を楽にするコマンド集になります。
強引に例えるなら
- Firebaseはブログサービス
- AmplifyはレンタルサーバーのWordPressインストールサービス
といったところでしょうか。別の言い方をすれば
- 「バックエンドが分からなくてもアプリが作れる」のがFirebase
- 「バックエンドの構築が簡単にできる」のがAmplify
でしょうか。
料金
Firebaseが流行った理由の1つとして、無料で使えるというのがあるかと思います。
インフラが無料で使えるので、個人でもランニングコストゼロでアプリの配信ができるのは魅力ですね。
ただ、無料アプリは個数が限られていますし、関数が使えないので凝ったアプリを作るには有料プラン必須になります。
それでも、料金は無料範囲超過分からなので、ちょっとしたアプリなら料金はほとんど発生しないかと思われますが。
感想など
モバイルアプリのバックエンドサービスと聞いてイメージするのはFirebaseの方が近いですね。
Amplifyは、ある程度バックエンドの知識がある人が使う前提の代物でした。
Firebaseの方が敷居が低いのですが、アプリ毎にGCPプロジェクトが作成されるので、1アプリの重みはでかいです。
Firebaseでは、目的の違うアプリは別アプリに分けた方がいいとアドバイスがあります。逆に言えば、みんないろんな目的のアプリを1つのアプリ(プロジェクト)に入れてるんじゃないかなぁと思うのですが、プロジェクトを分けるのは面倒なので、そうしたくなる気持ちは分からなくもないです。(開発と本番に環境を分けるのも、Firebaseのお作法に則るなら、別アプリになってしまいますし…)
どちらがいいかの性能・機能による単純比較は難しく、アプリの立ち位置や開発体制で、どちらが向いているかが決まりそうです。
例えば今回の件に関しては、機能毎に独立した単純なアプリを手軽にポコポコ作りたかったので、Amplifyが合ってそうかなぁと考えているのですが、個人利用ではFirebaseで遊んでみたいなぁと考えています。Firebaseの方がファーストインプレッションのワクワク感が強いですしね。