図解で、Google Firebaseが大好き！な理由

# 図解で、Google Firebaseが大好き！な理由

- Spark（無料）プラン
- バックエンド／サーバーサイドの保守・運用が不要
- インターネット公開に必要なしくみが揃ってる

**つまり、Firebaseをベースにプログラミングすれば、すぐにWEBアプリをインターネットに公開できる！** アプリ（コード）を開発してWEBアプリとして公開するには、バックエンド側のサーバー（インフラ）を準備するには「仮想サーバー、サーバーOS、DBミドルウェア、ドメイン、DNS、SMTP、SSLサーバー証明書、ファイアウォール、その他いろいろ」面倒なインフラの設計構築がたくさんある。それらサーバーの監視、ドメイン/SSL証明書の年間更新、OS/ミドルウェアのアップデートなど継続的な運用も必要だ。Firebaseなら、サーバーの準備や運用の労力から解放されたうえでバックエンドの機能を使うことができる。そしてSpark（無料）プランが存在するので学習目的や開発フェーズは無料開始してから従量課金へ移行できることがとても嬉しい。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/189936/c0f6e194-8f9f-278d-0593-775266ac4e8c.png)

クラウドの仮想サーバーと比べると

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/189936/516b5f31-64b8-4a11-c090-b1366b998040.png)


# WEBアプリを作ってFirebaseを理解する

IT系コミュニティなど、何かのグループに所属するメンバーをWEBサイトの一部として公開するWEBアプリを作ってみる。メンバーの紹介は静的HTMLでコンテンツ制作して公開するのは簡単だが、メンバー自身がSNSの記事のように自己紹介を編集したり、新しいメンバーが参加したときには自分で自己紹介を投稿したり、動的なWEBサイトにしたい。WEBアプリの名前はメンバー紹介「Member-App」とする。WEBサイトのHTMLページにインラインフレーム\<iframe\>でコンポーネントとして追加して使う。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/189936/c9e348dc-b8e1-aa1e-ab77-dc3885fd6595.png)

## Firebase Hosting：コードのデプロイ先（保存する場所）

メンバー紹介「Member-App」は、（１）アプリにログインせずにインターネットで閲覧できる「メンバー紹介ページ」と（２）アプリにログインしてメンバーの自己紹介データを編集する「データ入力フォーム」の２つの機能を持つWEBアプリとする。WEBアプリのソースは、HTML, CSS, JavaScript, アイコンなど画像のファイルで構成し、［Firebase Hosting］にアップロードする。Githubの様にファイル一覧を見る事はできないのでソースはデプロイ元で管理する（自分はプライベートGithubを利用）。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/189936/cf0971a9-7a13-4892-3aed-ee43c4e6c0e1.png)

## Firebase Firestore Database：データベース

メンバーの自己紹介データは、［Firestore Database］に保存する。用語がコレクションとかドキュメントとか呼ばれるので理解するために図「ツリー型の構造」に示す通り、アプリのプロジェクトの中に複数のコレクションと呼ばれるデータの集合を用意する（RDBのテーブルに相当するもの）。そのコレクションの中に（レコードに相当する）ドキュメントを追加して、ドキュメントの中にフィールドと対になるデータを追加していく。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/189936/ecb49edb-33ef-b3bc-7da3-f316bb784d4d.png)

[コードのサンプルはこちら（JavaScript + Firestoreデータベース［作成, 読み出し, 更新, 削除］）](https://qiita.com/1Kano/items/a78c2240d09327a4f886)

## Firebase Storage：ファイルの保存

メンバー紹介「Member-App」は、メンバーのアバター画像を各自で変更できるようにする。予め用意してあるアイコンを選んでもいいし、クライアントPCで画像ファイルを選択して［Firebase Storage］にアップロードしてもいい。ファイル共有ストレージのように複数のフォルダを作って、ファイルを保存できる。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/189936/2335074d-9505-9a2d-ebcd-4354d347a3e2.png)

[コードのサンプルはこちら（JavaScript + Firebase クラウド ストレージ［PC内の画像をアップロード、ダウンロードして画像を表示］）](https://qiita.com/1Kano/items/2f00d901c5480f4720e4)



## Firebase Authentication：ユーザーIDの認証

ログイン用のユーザーIDやパスワードを独自で作るのは膨大な労力とセキュリティリスクが高い。［Firebase Authentication］を使うと電話やメールなど12個の認証方式を利用できる。メール（SMTP）や電話のショートメッセージを送信するしくみが備わっているってすごいし、何よりもパスワードなど個人情報をアプリ側に保有しないので安全な運営が可能。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/189936/84bb8d1a-ecaf-fc18-097e-af626684252c.png)

ユーザーIDの認証手段がすごい。メール、電話、グーグルIDなど、12個のユーザIDから認証方法を選べる。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/189936/800ab7c9-1461-9bef-5eac-b99a82af596b.png)

送信するメールのテンプレートもFirebaseのAuthenticationメニューで作成できる。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/189936/f88b4558-8c03-72b2-c5a4-8d47503dff6c.png)

メールを送信するSMTPサーバーもFirebaseの機能に備わっている。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/189936/9e53e19c-498f-14ae-8d25-ba8aee37e735.png)

アプリを利用するユーザーはメールアドレスのみであり（メール認証の場合）パスワードを保存しないので個人情報保護のリスクを最小化できる。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/189936/1ebf5134-4290-20be-8c29-f1c7ea793ca5.png)

## Firebase：アプリ開発とコードデプロイ

HTMLやJavaScriptなどのコードは[Visual Studio Code]で記述した。コマンドライン[> firebase serve]を実行すると、ローカルPCのWEBブラウザのURLで [http://localhost:5000/] にアクセスできるようになり、PCでWEBの動作を検査できる。この検査では、ローカルPCでFirabaseの認証やデータベース接続を実行することもできるが、本番ではlocalhostは拒否し、本番サーバーのドメインだけ認証できるようにする。なお、完成したjavascriptのコードは、コマンドライン[> firebase deploy]を実行すると[firebase hosting]にアップロードされる。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/189936/cefa4ca3-c250-ddc1-2d80-355ce8fdcc3f.png)

アップロードが成功するとステータスの「デプロイしました」が追加される。アップロードしたＷＥＢアプリに不具合が見つかったら、過去のデプロイ履歴でロールバックを選び過去に正しく動作していたバージョンに素早く戻すことができる。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/189936/2ef4cda8-c7d1-a29d-ced5-7ded0252da1b.png)

## Firebase：セキュリティ（アクセス制御）

Firebaseのデータベースとストレージには、アクセス制御のコード記述が激減する「ルール」を設定できる。［Firebase Authentication］でログインしていれば読み書きが可能、ログインしていなくても読み込みは可能、といった「ルール」を設定する。不正アクセスもモニタリングできたり、読み書き回数は無料範囲内に収まっているか確認することもできる。Spark(無料)プランの上限を超過した場合は、ファイル取得ができなくなります。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/189936/d9ca9446-bf92-c44c-7e9d-f2fd1dad0d71.png)

## Firebase：まとめ

FirebaseをベースにWEBアプリ開発するなら、今まで必要だった仮想サーバーなどバックエンド（サーバーインフラ/OS/DBミドルウェア/SSL証明書など）の準備と保守・運用の労力から解放されて、WEBアプリのプログラミングに注力することができる。IT系コミュニティ（グループ）のメンバー紹介WEBアプリを作ってFirebaseでの開発を検証した。もうすぐ僕らインフラ屋さんの仕事はなくなりますね、といっても10年くらいは衰退しつつ残るかな。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/189936/c8185077-9376-b2c3-a8a6-7c7682758b2f.png)

## 完成したメンバー紹介「Member-App」アプリ！

コミュニティ（グループ）を作って、グループメンバーの自己紹介をWEBサイトに表示するアプリ。メンバー自身が、メール認証でアプリにサインインして自己紹介データを編集・公開できる。無料公開中、どなたでも自由にご利用ください。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/189936/db9c8ab6-634c-6748-62a5-bc18a68572dd.png)

以上