Firebaseの環境構築

> この記事は[Angular+Firebaseでチャットアプリを作る](http://qiita.com/Yamamoto0525/items/a76ea4b3924eeb82b0f9)のエントリーです。
> 前記事：[AngularのPipeを使って、日付を変換する](http://qiita.com/Yamamoto0525/items/afc1c23ea56ae20a1931)
> 次記事：[AngularのプロジェクトにFirebaseを導入する](http://qiita.com/Yamamoto0525/items/437a2884c0c51f5a3af8)

# この記事で行うこと

本稿では、Firebaseの環境構築を行っていきます。

- [Firebaseのプロジェクトを作成する](http://qiita.com/Yamamoto0525/items/fb23707831ff6d181544#firebase%E3%81%AE%E3%83%97%E3%83%AD%E3%82%B8%E3%82%A7%E3%82%AF%E3%83%88%E3%82%92%E4%BD%9C%E6%88%90%E3%81%99%E3%82%8B)
- [Firebase CLIをインストールする](http://qiita.com/Yamamoto0525/items/fb23707831ff6d181544#firebase-cli%E3%82%92%E3%82%A4%E3%83%B3%E3%82%B9%E3%83%88%E3%83%BC%E3%83%AB%E3%81%99%E3%82%8B)
- [Firebaseのデプロイをする]()

### Firebaseとは

2014年にGoogleに買収された、MBaas（Mobile Backend as a Service）プラットフォームです。
Realtime DatabaseやCloud Storage、Hostingなど、モバイルアプリ、WEBアプリの開発に必要なインフラを提供しています。

インフラの種類によって[有料、無料のプラン](https://firebase.google.com/pricing/)が異なりますが、開発レベルの使用であればほとんどのインフラを無料で利用することができます。

これまでバックエンド開発にかけていた手間がかなり少なくなるので、フロントエンドの開発に集中したい、スタートアップで素早くサービスを構築したいという方にオススメです。

*****
（追記：2020/6）現時点（2020年6月）での最新の内容に書き換えています。
*****


# 実装内容

## Firebaseのプロジェクトを作成する

Firebaseを利用する場合は、大前提として[Googleのアカウントを取得](https://accounts.google.com/SignUp?hl=ja)する必要があります。
まだGoogleアカウントを取得していない場合は、無料版もあるのでそちらを取得してください。

アカウントの準備ができたら、Firebaseのコンソールにログインします。
右上にある「コンソールへ移動」を押して、コンソール画面に遷移します。

![screenshot-firebase.google.com-2020.06.18-11_29_20.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/112566/948b1e23-a600-f386-2dc3-bd37c1402ae5.png)

コンソールに移動したら、画面中央にある「プロジェクトを追加」をクリックします。
表示される指示に従って、新しいプロジェクトを作成します。

![screenshot-console.firebase.google.com-2020.06.18-11_31_19.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/112566/565cbaae-3090-a006-4fa8-f3163f0c9a25.png)

これでプロジェクトの作成は完了です。
今回作成するのはWEBアプリなので、画面中央にある「</>」をクリックします。

![screenshot-console.firebase.google.com-2020.06.18-11_56_46.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/112566/2a2b4f98-896b-6af2-8e9b-0cb7cb681e2e.png)


クリックすると「ウェブアプリにFirebaseを追加」という画面が表示されるので、アプリのニックネームを入力し、Hostingの設定にチェックをいれて「アプリを登録」ボタンを推します。

![screenshot-console.firebase.google.com-2020.06.18-12_02_07.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/112566/01c8d793-4022-d1e1-66ed-db3e31032f24.png)

「Firebase SDK の追加」、「Firebase CLI のインストール」は内容を確認した後、「次へ」ボタンを押してください。
「Firebase Hosting へのデプロイ」画面に遷移したら、内容を確認し、「コンソールに進む」をクリックしてください。ここに書かれている内容は、次のセクションで実行します。

![screenshot-console.firebase.google.com-2020.06.18-12_17_23.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/112566/5ed1e437-c984-f2e2-7679-9fcc44696d0d.png)

## Firebase CLIをインストールする

Firebaseを利用するには、「Firebase CLI」が必要になります。
これによって、ローカル環境からリモートのFirebaseを操作できるようになります。

```bash
npm install -g firebase-tools
// ハンズオンを進める場合はバージョンを合わせるため、
// npm install -g firebase-tools@8.4.3
// でインストールしてください。
```
Firebase CLI をインストールしたら、Googleアカウントを使用してログインします。

```bash
firebase login
? Allow Firebase to collect CLI usage and error reporting information? y
```

上記コマンドを実行すると、Googleアカウントの認証画面に遷移します。
FirebaseCLIのアクセス許可をすると、次の画面が表示されログインが完了します。

![Firebase CLI.png](https://qiita-image-store.s3.amazonaws.com/0/112566/ef77ff72-da09-c514-022a-388a4a5e822f.png)

## Firebaseのデプロイをする

本プロジェクトでは「Firestore」「Hosting」を利用します。
「Firestore」を利用するためには、Firebaseのコンソール画面で初期設定が必要になります。

![screenshot-console.firebase.google.com-2020.06.18-13_37_41.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/112566/5927c6c4-47a0-aeb6-8a33-b94fe07484a6.png)

![screenshot-console.firebase.google.com-2020.06.18-13_38_20.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/112566/c5d63d1d-4d65-b533-dde5-4249000f52f6.png)

リビジョンを選択肢、完了をクリックすれば初期設定は終了です。

![screenshot-console.firebase.google.com-2020.06.18-13_39_25.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/112566/8027c674-ec7f-9bf2-3b3e-754a5eaa63be.png)

ターミナルでデプロイしたいプロジェクトに移動し、初期コマンドを叩きます。
本プロジェクトでは「Firestore」「Hosting」を利用するので、spaceキーを使って該当項目にチェックをいれます。

```bash
cd MyApp
firebase init
? Which Firebase CLI features do you want to set up for this folder? Press Space to select features, then Enter to confirm your choices. 
 ◯ Database: Deploy Firebase Realtime Database Rules
 ◉ Firestore: Deploy rules and create indexes for Firestore
 ◯ Functions: Configure and deploy Cloud Functions
 ◉ Hosting: Configure and deploy Firebase Hosting sites
 ◯ Storage: Deploy Cloud Storage security rules
 ◯ Emulators: Set up local emulators for Firebase features
```

利用するFirebaseのプロジェクトを確認されるので、上記で作成したプロジェクトを選択します。

```bash
? Please select an option: (Use arrow keys)
❯ Use an existing project 
  Create a new project 
  Add Firebase to an existing Google Cloud Platform project 
  Don't set up a default project 
? Select a default Firebase project for this directory: (Use arrow keys)
❯ ngchat-xxxx (NgChat) 
```

ダイアログ形式で設定方法を聞かれますので、基本デフォルト設定、FunctionsはTypeScriptで進めていきます。


```bash
? What file should be used for Firestore Rules? (firestore.rules) 
? What file should be used for Firestore indexes? (firestore.indexes.json) 
? What do you want to use as your public directory? (public) 
? Configure as a single-page app (rewrite all urls to /index.html)? (y/N) y
✔  Firebase initialization complete!
```
これで基本設定は完了です。
最後にデプロイをし、Hosting URLにアクセスして表示を確認します。

```bash
firebase deploy
///
✔  Deploy complete!
Project Console: https://console.firebase.google.com/project/ngchat-xxx/overview
Hosting URL: https://ngchat-xxx.web.app
```
![screenshot-ngchat-f1343.web.app-2020.06.18-13_53_09.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/112566/6a4a7fe5-0c91-2275-543f-dacd49ed2fc8.png)

hostingを停止させるときは、次のコマンドを実行します。

```bash
? Are you sure you want to disable Firebase Hosting?
  This will immediately make your site inaccessible! y
✔  Hosting has been disabled for ngchat-xxx. Deploy a new version to re-enable.
```

これでFirebaseの環境構築は完了です。
次からはAngularプロジェクトにFirebaseの導入をしていきます。

### ソースコード

この時点での[ソースコード](https://github.com/Yamamoto0525/NgChat/commit/41ffacf9db1351a26f58ce2e7629821a68855bea)