FlutterでのCloud FireStore導入手順


■Node.jsインストール
サーバサイドで動作するJavascript環境
npm(Node Package Manager)を同梱している
（今回はnpmを使ってfirebase-toolsをインストールするためにNode.jsをインストールする）

用途例）
- webサーバ構築
- api作成
- DBの連携

https://nodejs.org/en/

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/136142/2b787135-c89b-513a-58a9-05bfcabfc162.png)

■firebase-toolsインストール
Firebaseをコマンドラインから操作するためのコマンド

ターミナルで以下を実行
```
npm install -g firebase-tools
```

-> "npm error Error: EACCES: permission denied"が発生したのでsudoで再実行

■Firebaseアカウント、プロジェクトの作成
https://firebase.google.com/?hl=ja

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/136142/46881f6e-46b1-8408-1491-fabfbd697641.png)

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/136142/c9850d9b-bfd6-22e2-151a-de93e97a10e2.png)

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/136142/e907b631-c570-8ab6-df74-817abc152150.png)

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/136142/483279f2-3ac8-55d8-ca75-1ccd01ad11be.png)

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/136142/46a6f198-5407-632d-7d8f-bc0020594561.png)

Flutterを選択

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/136142/51d0fa03-40dc-256e-b24a-4db804e31103.png)

以下、「Firebase CLIをインストールしてログインする」を行う
（Flutter SDKはインストール済みなのでスキップ）

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/136142/9220cc1f-2087-dea5-e2f8-2a13525ca536.png)

以下コマンドをプロジェクトのターミナルで打ち、ログイン
```
firebase login
```

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/136142/0a02e8e3-65dd-616f-923e-4dd905b286cc.png)

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/136142/d6fc7eb5-0e00-8461-e999-6ef70d548b43.png)

↑の指示通り、以下コマンドを実行

```
dart pub global activate flutterfire_cli
```

パスを通すよう指示が出るので、以下を~/.zshrcに追加

```
export PATH="$PATH":"$HOME/.pub-cache/bin"

```

zshを読み込み直す必要があるため、

```
source ~/.zshrc
```

2つ目の指示コマンドを実行

```
flutterfire configure --project=flutter-todo-7dd9a
```

以下聞かれる
```
Which Android application id (or package name) do you want to use for this configuration, e.g. 'com.example.app'? 
```

android/app/build.gradleにある
```
applicationId="〜〜〜"
```
の値を入力

メモ：Androidのapplication IDに対するiOSのbundle IDは以下を見れば確認できる

ios/Runner.xcodeproj/project.pbxprojにある
```
PRODUCT_BUNDLE_IDENTIFIER = 〜〜〜;
```

成功すると、Firebaseと通信するための以下設定ファイルが追加される
（firebase_coreとcloud_firestoreのパッケージがないため、エラーになっている。後ほどPub getする）

```
lib/firebase_option.dart
```


先に進み、Clud Firestoreを選択

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/136142/e7a351d3-4011-e01c-acda-aa52e40a736c.png)

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/136142/9d3c94ea-ea0b-cd6b-412e-54641da7a535.png)

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/136142/d92def2c-4a2a-da14-5ec1-b73fa2865d70.png)

firebase_coreとcloud_firestoreをPub get

■動作確認時のエラー

```
INSTALL_FAILED_INSUFFICIENT_STORAGE
```
というエラーが出た場合、エミュレータを落として、以下のWipe Dataを実行

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/136142/5a7bd133-b35a-7409-5563-241d99bce5bc.png)

```
[cloud_firestore/permission-denied] The caller does not have permission to execute the specified operation.
```

というエラーが出た場合、以下のようにルールを変更
https://qiita.com/yuuki-h/items/7a63ad3d315d95bb7e4d

＜変更前＞
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/136142/d6287b54-22eb-a5f9-dab0-beffbb3cce5b.png)

＜変更後＞
```
rules_version = '2';

service cloud.firestore {
  match /databases/{database}/documents {
    match /{document=**} {
      allow read, write: if request.time < timestamp.date(2025, 12, 12);
    }
  }
}
```

■補足
上記で設定済みのデータベースを別アプリで使いたい場合、

> 2つ目の指示コマンドを実行

```
flutterfire configure --project=flutter-todo-7dd9a
```
の部分を実行する。

アプリ実行時に以下のエラーが出た。

```
Execution failed for task ':app:processDebugGoogleServices'.
> No matching client found for package name 'com.xx.xx'
```

https://qiita.com/teruis/items/5c278c27b4cf5a4b338e
こちらに記載の方法で解決。