ゼロから始めるFirebase入門

# Firebaseとは
Firebaseは、Googleが提供するアプリ開発プラットフォームで、mBaaSとして知られています。
mBaaSとは、モバイルアプリケーションのバックエンドサービスをクラウド上で提供することで、開発者がバックエンドの構築にかかる手間や時間を大幅に削減し。アプリケーションの開発に集中できるようにするサービスです。
Firebaseは、ユーザー認証、データベース、ファイルストレージ、リアルタイム通信など、アプリ開発に必要な様々な機能を提供します。

## 主要なFirebase機能
Firebaseの主要な機能には、以下のようなものがあります

### Firebase Authentication
多様な認証プロバイダー（Google、Facebook、Twitter、GitHubなど）に対応し、安全かつ簡単にユーザー認証を実装できるサービスです。
これにより、開発者は独自の認証システムをゼロから構築する必要がなくなります。

### Cloud FirestoreとRealtime Database
データをリアルタイムで同期させることができる、高性能なNoSQLデータベースサービスです。
これらのデータベースは、アプリケーションの開発とスケーリングを効率的かつ容易にします。

### Firebase Hosting
静的ウェブサイトやウェブアプリケーションを迅速かつ安全にデプロイできるウェブホスティングサービスです。
SSL証明書の自動発行やグローバルCDNを利用した高速配信を特徴としています。

### Firebase Cloud Functions
サーバーレスコンピューティングを実現するための機能であり、イベント駆動型のバックエンドロジックをクラウド上で実行できます。
これにより、サーバーの管理やスケーリングの必要がなくなります。

### Firebase Crashlytics
アプリのクラッシュレポートをリアルタイムで収集し、問題の原因を迅速に特定できるよう支援するツールです。

### Firebase Performance Monitoring
アプリのパフォーマンスを測定し、ユーザー体験の向上に役立つ洞察を提供します。

これらの機能によって、開発者がアプリを効率的に構築し、運用することをサポートします。

# Firebaseプロジェクトの作成
Firebaseプロジェクトを作成し、それをローカルのリポジトリと連携させる手順を説明します。

ブラウザでFirebaseコンソールにアクセスします。

https://console.firebase.google.com/u/0/

**プロジェクトを追加**をクリックします。
![create-project.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/458297/fee0d106-a901-0536-d5c8-2e484f3ac0d4.png)

プロジェクト名に任意の値を入力し、チェックボックスにチェックを入れた後、**続行**をクリックします。
![project-name.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/458297/975d6947-797f-cda4-6618-2653d60f87c6.png)

Googleアナリティクスの設定は、プロジェクトのニーズに応じて選択してください。
![google-analytics.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/458297/6a9c7c77-4697-5933-a978-158a095fe80b.png)

Googleアナリティクスを有効にした場合は、必要な設定を行った上で**プロジェクトを作成**ボタンをクリックします。
![create-project.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/458297/c6e6d361-a54b-3773-580b-ee80a6bb7894.png)

プロジェクトの作成が完了したら、**続行**ボタンをクリックします。
![created-project.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/458297/f87ccf35-45c0-1f30-85f4-149d12308f45.png)

これで、Firebaseの様々な機能を利用できるプロジェクトのダッシュボードが表示されます。
![project-dashboard.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/458297/ff2cd63d-0316-abe0-674b-d58f119cb8ca.png)


# Firebase CLI
Firebase CLIは、Firebaseプロジェクトの管理やFirebaseサービス（Firestore、Authentication、Hostingなど）の設定をコマンドラインから行うためのツールです。
Firebase CLIを利用して、プロジェクト管理、開発、テストを行う方法について解説します。

## Firebase CLIのインストール
Firebaseプロジェクトの管理やFirebaseサービス（Firestore, Authentication, Hostingなど）の設定をコマンドラインから行うために、Firebase CLIが必要です。
まず、以下のコマンドを実行して、Firebase CLIをグローバルにインストールします。
```bash
$ npm install -g firebase-tools
```
インストール後、バージョン情報を確認して、正しくインストールされたことを確認します。
```bash
$ firebase --version
```

## Firebaseにログイン
次に、Firebaseプロジェクトを管理するためにFirebase CLI経由でGoogleアカウントにログインします。
```bash
$ firebase login
```
ブラウザが開くので、ログインプロセスを完了させます。
Firebaseコンソールで使用している同じアカウントでログインしてください。
![select-account.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/458297/303f003a-487a-58fb-35f2-d5fbec97b2c4.png)
![login-firebase-cli.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/458297/6bd6b5d5-e3c4-47d1-6d8f-20f818186027.png)
![request-google-account.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/458297/0e8054fe-cc0f-72ef-4cf9-192e15a0ad87.png)
ログインに成功すると以下の画面に遷移します。
![firebase-successful.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/458297/150cb8a7-93d2-be10-4e78-b02dc13c3f77.png)

## プロジェクトの初期化
プロジェクトディレクトリに移動し、以下のコマンドを実行してFirebaseプロジェクトを初期化します。
```bash
$ firebase init
```
いくつかの質問が表示されるので、プロジェクトに必要なFirebaseの機能（Firestore、Functions、Hostingなど）を選択し、先ほど作成したFirebaseプロジェクトを選択して連携させます。

## プロジェクトの設定
`firebase init`コマンドによって、`firebase.json`が作成されます。
このファイルは、Firebase CLIでアセットをデプロイするために必要です。
例えば、Firebase Hosting、Cloud Firestore、Cloud Functions for Firebaseを利用する場合、デフォルトの`firebase.json`の設定例は以下の通りです。
```json:firebase.json
{
  "hosting": {
    "public": "public",
    "ignore": [
      "firebase.json",
      "**/.*",
      "**/node_modules/**"
    ]
  },
  "firestore": {
    "rules": "firestore.rules",
    "indexes": "firestore.indexes.json"
  },
  "functions": {
    "predeploy": [
      "npm --prefix \"$RESOURCE_DIR\" run lint",
      "npm --prefix \"$RESOURCE_DIR\" run build"
    ]
  }
}
```

これで、ローカルのプロジェクトがFirebaseプロジェクトと連携され、Firebaseの各種サービスを利用できるようになりました。

## プロジェクトの管理
自分のFirebaseプロジェクトのリストを表示できます。
```bash
$ firebase projects:list
```

## デプロイの実行
プロジェクトディレクトリから以下のコマンドを実行すると、ローカルプロジェクトの変更をFirebaseプロジェクトにデプロイできます。
```bash
$ firebase deploy
```

特定のFirebaseサービスまたは機能だけをデプロイしたい場合は、部分デプロイを利用できます。
例えば、Hostingサービスだけに変更をデプロイする場合は、以下のコマンドを使用します。
```bash
$ firebase deploy --only hosting
```
その他のサービスに対しても、--onlyオプションに続けてサービス名を指定することで、特定のサービスのみをデプロイできます。

## ローカルテスト
Firebase CLIは、`firebase serve`と`firebase emulators:start`の2つのコマンドを提供し、Firebaseプロジェクトのローカルでのテストを支援します。

### firebase serve
`firebase serve`コマンドは、Firebase Hostingにホストされる静的ファイルやFirebase Cloud Functionsをローカル環境で簡単にテストするために使用されます。
これにより、デプロイメント前にウェブサイトやアプリケーションの静的コンテンツとサーバーレス関数の動作を確認できます。

Firebase Hostingの静的コンテンツをテストする際には、以下のコマンドを使用します。
```bash
$ firebase serve --only hosting
```
HTTP関数をテストする際には、以下のコマンドを使用します。
```bash
$ firebase serve --only functions
```

### firebase emulators:start
`firebase emulators:start`コマンドは、Firebaseの複数のサービスをローカルでエミュレートします。
Firebaseのサービス（Firestore、Functions、Hostingなど）をローカルでエミュレートし、開発中のアプリケーションをテストできます。
```bash
$ firebase emulators:start
```
開発中のアプリケーションがFirebaseのさまざまなサービスとどのように連携するかを、本番環境にデプロイする前に確認することが可能です。

Firebase CLIを活用することで、開発プロセスが大きく効率化され、Firebaseの強力な機能を最大限に活用することができます。


# まとめ
この記事では、Firebaseの基本について説明しました。
Firebase CLIのセットアップから、プロジェクトの作成、ローカルでのテスト、デプロイまでの手順を解説しました。
このガイドを活用して、Firebaseを使ったアプリ開発の効率化と、プロジェクト管理の改善を図ってください。

間違っている箇所や疑問に思ったことがあれば、ぜひコメントをください！
最後まで読んでいただき、ありがとうございました。