IT業界で気づいたことをこっそり書くブログ

くすぶってるアプリエンジニアが、日々気づいたことを適当に綴っていきます(受託→ベンチャー→フリー→大企業→ベンチャー→起業)

モバイルアプリ開発におけるクラウド選定の主流と歴史的経緯、あとFirebaseって何やねんという話

注意:社内勉強会用にあまり調べず超ざっくり書いたものですので、厳密には違う場合があるかもしれません。

ゴール1:何でAWSとFirebaseが混ざってるのか理解する
ゴール2:AWSやFirebaseでよく使うやつを覚える

 

クラウドサービス

クラウドサービスといえばファイルを保存しておくサーバーと言うイメージが一般的だと思いますが、サービス開発者におけるクラウドサービスも似たようなものです。
情報・ファイルを保存したり、そもそもWebサイトがそこに入っていたり、APIサーバーを置く場所だったりします。見え方としては昔からあるレンタルサーバーと大差ありません。何かすごい機能がいっぱいついたレンタルサーバと言ってもさほど問題有りません。

補足:スケーラブル

一応違いを書くと、スケーラブルかどうかという点が大きいです。ユーザーが100人なら100人分のリソースを使い、ユーザーが1億人なら1億人のリソースを使ってくれるという部分がクラウドサービスの革新的な部分です。

補足:オンプレミス

自分でサーバーを用意することをオンプレミスと言います。個人的には自鯖の方がしっくり来るんですが。

補足:ホスティングサービス

レンタルサーバーと似た意味

現代のサービスはほぼクラウドサービスを使っている

流行り始めたのは2010年前後だったと思います。

Web系サービスではアクセス量が桁違いに増減するケースが多く、それに対応できないとサーバーが落ちるといったトラブルに見舞われることになります。そのためインフラエンジニアがスケール部分を担っていましたが、それがクラウドサービスの登場で激変しました。

スケーラブルなサービスはすごい

半自動的に来たユーザーの分だけリソースが確保されるというのはとても都合の良いものでした。
これはリアル店舗を想像するとわかりやすいです。お客さんが大量に来たらお店が大きくなり、来ないときは小さくなるようなイメージです。コストが浮きますし機会損失も減ります。

3大クラウドサービス AWSGCP、Azure

AWS:アマゾン
GCPGoogle
Azure:マイクロソフト
です。
世界的なシェアで言えばAWS>Azure>GCPという感じですが、日本ではAWS一強のような感じです。

スクリーンショット 2021-02-13 18.03.02

補足:クラウドサービスではなくホスティングサービスにすると3大ではなくなります。もっと上が居るらしい。

AWSGCP、Azureのモバイルアプリ開発における位置づけ

AWSドキュメントがクソ分かりづらい、しかし使うしかない、実務経験者は多いけど全部使いこなせる人は稀、サポートが有料でめちゃ高い
GCPドキュメントは分かりやすいけど流行ってない、実務経験者が少ないから使えない、後発組、AIには強いという噂
Azure:海外で流行ってるらしい

モバイルアプリ開発でも基本的にAWSを使います。個人的にAWSじゃなかった案件はほとんどありませんでした。

AWSでよく使う機能(サービス)

あくまでモバイルアプリ開発でよく話題に上がる機能(サービス)です。
名前が死ぬほど覚えづらい

EC2(重要)
ホスティングサーボスそのもの。ぶっちゃけこれだけしか使わないことがよくある。laaSとかいうやつ。

Lambda
何かイベントがあった時に、特定の処理を実行する。
例えば画像をアップロードした時に、同時にサムネイル用の画像を作っておくとか。

S3(重要)
ファイルを置く所

RDS
普通なデータベース。
注意したいのは、EC2の中にデータベースを含むことができるので、最初はこいつの存在意義が謎だと思います。私は2回くらい教えてもらいましたが忘れました。

DynamoDB
NoSQLなデータベース
所謂サーバーレスという開発手法で使うやつ。詳細は別の機会に。

CodeDeploy
自動デプロイするやつ。Githubなどと連携して、masterにpushしたらデプロイするみたいな感じで使うらしい(使ったことはない)

IAM(重要)
AWSにあるものへのアクセスを管理する仕組み。鍵。

Cognito(重要)
認証機能。サインアップとかログインの機能を実現できるやつ。

AWSサービス多すぎ問題

これだけあります。1個覚えるのに数日、極めるのには数ヶ月は掛かります。
しかもドキュメントは分かりづらいしググっても情報があまり出てこない。

スクリーンショット 2021-02-13 18.41.33

AWSの学習コスト問題

AWSにありがちですが、1個のAWS機能を使用すると、自ずと他の機能も使わなければならないという状態になり、雪だるま式に学習コストが上がっていくという問題があります。
モバイルアプリ開発者的には「サクッとこの機能を実現したい」のに、気づけばAWSの泥沼にハマっていてどこかで諦めるということが多いです。

AWSの機能は汎用的に作られているため、ピンポイントで機能を実現できるものではなくなります。そのためAWSを極めるか諦めるかという選択になり、最終的に「EC2に全部入れてしまえ(普通のサーバーとして扱う)」ということによくなります(最近はそんなことないか)

Firebaseってなんやねん

FirebaseはGoogleモバイルプラットフォームです。モバイルに特化しています(Webでも使えます)
これはモバイルアプリ開発でよくある要望をピンポイントで独立した機能として提供しているため、開発者に受け入れられました。

結果「AWS使ってるのに、何かFirebaseというGoogleのサービスも使っている」とか、「cognito使わずにFirebase Authenticationを使う」ということになります。

Firebase Authentication

最初に流行ったのはFirebase Authenticationです。これは「○○でサインイン」というSNSログインの機能を実現するもので、AWSではcognitoのライバルです。ただ非常に使いやすかったため流行りました。cognitoはたぶんweb側で使われていると思います。あとAWSへのアクセスとか(自信薄)

参考:最近の良さげなCognito記事 Cognitoで学ぶ認証・認可 in AWS

スクリーンショット 2021-02-13 18.51.53

Firebaseのよく使う機能

AWSを使っているプロジェクトでも普通に使う機能満載です。

Authentication(重要)
○○でログイン、SNSログインを実現する。

Firestore
NoSQLなデータベース

Storage
ファイル置く所

Crashlytics(重要)
アプリがクラッシュした時にログを送信してくれる

App Distribution(重要)
アプリを配布する
DeployGate、Testflightの仲間

Analytics(重要)
ユーザー分析をする諸々の機能
GoogleAnalyticsの移行先

おわりに

AWSが流行り始めてから10年ちょっと。
Firebaseが流行り始めてから4年程度。
だいぶ早いですね。