Firebaseを紐づける方法

# まえがき
最近、ReactやRailsを学んでいると <strong>Firebase</strong> を目にしませんか？
<strong>Firebase</strong> とは、バックエンド機能提供サービスです。
私は、フロントエンド や グラフィック を専門に業務しているのですが、バックエンドへの理解を深めたいと思い、紐付け方法を忘却録として記録します。

# Firebaseの設定(ブラウザ上)

![firebase_setting-1.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/262991/54e6c8ec-38dd-f25f-6f22-b8aebf47f2f9.png)

<a href="https://firebase.google.com/?hl=ja" target="blank">Firebase</a> で設定を行います。

##プロジェクトの作成
![firebase_setting-2.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/262991/e81ad984-8e9a-dd82-0a17-1712c741f1aa.png)
任意のプロジェクト名を設定してください。

##各種設定
プロジェクトの設定後、GogleAnalyticsの設定を行います。任意のアカウントを設定してプロジェクト作成を完了させてください。

##ロケーションの設定
![firebase_setting-3.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/262991/196a659d-fa65-4b90-7886-7fabdf6a478d.png)

top画面から設定へ進み、ロケーションの設定を行ってください。
↓の画像で 未選択 になっている箇所です。

![firebase_setting-4.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/262991/f7b08e06-4c82-9372-dd07-7f303df57f9e.png)

![firebase_setting-5.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/262991/fccb207d-2790-bde6-1f85-62dc69fa12e6.png)

日本であれば <strong>asia-northeast1</strong> を選択してください。
この設定は、作成後に編集できないので注意してください。

##アプリの作成
先の設定画面から、画像の(Here)の部分をクリックしてください。
私は、webアプリケーションを作成したいのでこのマークを選択します。

![firebase_setting-6.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/262991/7535ff60-7282-12a9-b365-64e45d06301d.png)

クリック後、アプリ名と詳細の設定を行うので、任意の名前を入力してください。

![firebase_setting-7.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/262991/0f56014c-14fd-0e09-515f-7c2f7b71c463.png)

この後、難しい内容の設定を行いますが、そのまま進めてください。
以上で、アプリの作成が完了されます。

##データーベースの作成
FirebaseのTOPページから、データーベースの設定へお進みください。
![firebase_setting-8.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/262991/5e750288-694e-71bc-169a-af029278df42.png)

![firebase_setting-9.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/262991/1580ff71-2f5c-c6ea-7807-e065296c3ec4.png)

データベースの作成から、設定を行ってください。
本番環境で設定してください。

##課金制(Blaze/従量制)への設定
作成しただけでは、<strong>Spark</strong>の設定になっています。
このままでは、デプロイ する際にエラーが発生してしまいます。
以前までは、これで問題なかったのですが<strng>(Blaze/従量制</strong>へ移行したため発生するそうです。

![firebase_setting-10.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/262991/d4de364c-3712-4e54-c7b9-639aa69d4a12.png)

TOP画面で、従量制への変更が行えるので実行してください。
金額は、個人で使うのなら発生はしません。
(※場合より、金額が発生するかもしれません。個人で確かめてください)

以上で、ブラウザでの準備が完了しました。

# Firebaseの設定(コマンド)
作業環境では、事前にローカル環境にFirebaseをダウンロードしています。
## Firebaseのインストール

以下のコマンドを、実行環境のディレクトリで入力してください。

```terminal:コマンド
npm install --save firebase 
```

##Firebaseへのログイン
Firebaseを設定したいディレクトリに移動してください。

```terminal:コマンド
firebase login
```

ログインアカウントの変更がある場合は、↓のログアウトを行ってください。

```terminal:コマンド
firebase logout
```

## Firebaseをinitする
init を行うことにより、Firebaseと接続することができます。

```terminal:コマンド
firebase init
```

# Firebaseのinit後の操作
initすると、各種の設定をコマンドで行うことになります。

##使用サービスの選択

```terminal:コマンド
? Which Firebase CLI features do you want to set up for this folder? Press Space to 
select features, then Enter to confirm your choices. (Press <space> to select, <a> t
o toggle all, <i> to invert selection)
❯◯ 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
```
使用するサービスを選択してください。

##実行プロジェクトの選択

```terminal:コマンド
? 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 
```
ブラウザでの登録で プロジェクトを作成 しました。
そのプロジェクトを使うので、一番上を選択してください。

##実行プロジェクトの実行

```terminal:コマンド
First, let's associate this project directory with a Firebase project.
You can create multiple project aliases by running firebase use --add, 
but for now we'll just set up a default project.

? Please select an option: Use an existing project
? Select a default Firebase project for this directory: (Use arrow keys)
❯ 登録されたプロジェクト (登録されたプロジェクト) 
```
<strong>❯ 登録されたプロジェクト (登録されたプロジェクト) </strong> で間違いなければ エンター を押してください。

##Firebaseルール設定について

```terminal:コマンド
? What file should be used for Firestore Rules? firestore.rules

Firestore indexes allow you to perform complex queries while
maintaining performance that scales with the size of the result
set. You can keep index definitions in your project directory
and publish them with firebase deploy.
```
こだわりがなければ、エンターを押してください。

##Firestoreインデックス設定について

```terminal:コマンド
? What file should be used for Firestore indexes? (firestore.indexes.json) 
```
こだわりがなければ、エンターを押してください。

##Cloud Functionsの記述設定

```terminal:コマンド
? What language would you like to use to write Cloud Functions? (Use arrow keys)
❯ JavaScript 
  TypeScript 
```
JavaScript か TypeScript を選んでください。

##Firestoreインデックス設定について

```terminal:コマンド
? What file should be used for Firestore indexes? (firestore.indexes.json) 
```
こだわりがなければ、エンターを押してください。

##ビルド先の生成フォルダ設定

```terminal:コマンド
? What do you want to use as your public directory? (public) 
```
デフォルトは public ですが、変更をしたい際は入力してください。(例/build)

##シングルページアプリケーションとして設定するか？

```terminal:コマンド
? Configure as a single-page app (rewrite all urls to /index.html)? (y/N) 
```
デフォルトは no です。もしも、シングルページアプリケーションで作成する際は y を押して エンター してください。

以上で完了しました。

#Firebaseと紐付ける(init)
Firebaseと紐づけるために、initを行います。

```terminal:コマンド
firebase init
```

#おまけ
##ビルドをする

```terminal:コマンド
npm run build
```

##デプロイする
```terminal:コマンド
firebase deploy
```

#あとがき
以上が"Firebaseを紐づける方法"でした。
最近、Firebaseを使用する機会が増えたので理解を深めたいと思います。
ここまで、ご覧いただきありがとうございました。

#参考リンク

<a href="https://www.youtube.com/watch?v=AUaWCCl5JXk&t=415s" target="blank">日本一わかりやすいReact入門【実践編】#2...サクッと環境構築しよう</a>
<a href="https://firebase.google.com/docs/firestore/pricing?hl=ja" target="blank">Cloud Firestore の課金について</a>
本当に、ありがとうございました。


#Myリンク
また、Twitter・Portfolio のリンクがありますので、気になった方は
ぜひ繋がってください。プログラミング学習を共有できるフレンドが出来るととても嬉しいです。

<a href="https://twitter.com/0819_tateishi" target="blank">Twitter</a>
<a href="https://ayu-portfolio.herokuapp.com/" target="blank">Portfolio</a>
<a href="https://github.com/ayu0819" target="blank">Github</a>