Firebase セットアップ

Firebase セットアップ

実行環境
M1 MacbookAir 16GB

npm install -g firebase-tools

でFirebase CLIをインストール

次に料金体系などを調べておく
これは以前、従量課金でワトソンを使ったら
後で数万円の請求が来たことがあるので
調べるようにしている

使うのは無料枠にする

chatGPTの回答

Firebaseの無料枠と料金プランについて説明します。
Firebaseの無料枠 (Sparkプラン)
Firebaseには無料で利用できるSparkプランがあり、主に以下のサービスに対して無料枠が提供されています:
1. Firebase Hosting:
    * 1GBのストレージ
    * 10GB/月のデータ転送量
2. Firestore (NoSQL データベース):
    * 1GBのストレージ
    * 50,000 回/月の読み取り操作
    * 20,000 回/月の書き込み操作
    * 20,000 回/月の削除操作
3. Realtime Database:
    * 100MBのストレージ
    * 1GB/月のデータ転送量
4. Firebase Authentication:
    * 無制限の認証 (メール/パスワード、匿名、Google、Facebook、Twitterなど)
5. Firebase Cloud Functions:
    * 125,000呼び出し/月
    * 400,000GB-秒の計算時間/月
    * 5GBの出力データ転送量/月
6. Firebase Cloud Messaging:
    * 無制限のプッシュ通知 (送信数に制限なし)
7. Firebase Cloud Storage:
    * 1GBのストレージ
    * 5GB/月のデータ転送量
その他の注意点
* Firebase Authentication はSparkプランで無制限に利用できますが、電話認証(SMS認証)については無料枠があり、それを超えると従量課金が発生します。

次に

Firebase CLIのインストール

Firebase Hostingの設定があったので
有効にしているようだが使わない場合はどうなるか?
を調べる

今回のように、**WebhookサーバーとしてFirebaseを使用する場合、Firebase Hostingは必須ではありません**。Webhookサーバーを構築するためには、主に次のFirebase機能を使用します:

1. **Firebase Cloud Functions**:
– Webhookのエンドポイントを作成するために使用します。Cloud Functionsを使えば、サーバーレスでスケーラブルなWebhookサーバーを簡単にセットアップできます。

2. **Firebase Firestore(またはRealtime Database)**:
– 必要に応じて、Webhookからのデータを保存するために使用します。例えば、音声データのテキスト変換結果や、ユーザーアクションのログを記録するなどの用途です。

### Firebase Hostingが必要ない理由

– **サーバーレスアーキテクチャ**:
– WebhookサーバーのエンドポイントはCloud Functionsで処理されるため、物理的なサーバーや特定のホスティング環境は不要です。

– **静的コンテンツがない**:
– Webhookサーバーは、通常、静的なウェブページを提供するわけではなく、リクエストを受け取って処理するだけのエンドポイントを提供します。したがって、静的コンテンツをホストする必要がない場合、Firebase Hostingは無関係です。

### まとめ

WebhookサーバーをFirebase Cloud Functionsで実装する場合、Firebase Hostingは必要ありません。Firebase Hostingは主に静的ウェブサイトやSPA(シングルページアプリケーション)の公開に使用されるため、Webhookサーバーの構築には直接関係がありません。

そのため、今回はFirebase Hostingを有効にしなくても、Webhookサーバーとしての機能は十分に提供されます。Firebase Cloud Functionsと、必要に応じてFirestoreなどの他のFirebaseサービスを組み合わせて使用すれば、要件を満たすことができます。

ということなので
使うのは
Firebase Cloud Functions
Firebase Firestore(またはRealtime Database)
ということになる

firebase functions(バックエンドサービス)を使うなら
nodeは18 or 20(public beta)が必要らしい

Firebase Functions(Cloud Functions for Firebase)を使用する場合、
現在サポートされているNode.jsのバージョンは18と、最近追加された20(パブリックベータ版)です。
これはFirebaseが提供する最新の機能やセキュリティ強化のためです。

### Firebase FunctionsでのNode.jsバージョンの要件

1. **Node.js 18**:
– これは現在のデフォルトでサポートされている安定版のNode.jsバージョンです。Node.js 18は長期サポート(LTS)リリースであり、セキュリティやパフォーマンスの向上が期待されます。
– Firebase CLIを使用して新しいCloud Functionsプロジェクトを作成する場合、デフォルトでNode.js 18が使用されます。

2. **Node.js 20 (Public Beta)**:
– Node.js 20は最新の機能を試すためのパブリックベータ版として提供されています。新しい言語機能やパフォーマンスの改善が含まれていますが、ベータ版であるため、プロダクション環境での使用には慎重になる必要があります。
– Node.js 20を使用するには、Firebaseプロジェクトの設定で明示的に指定する必要があります。

### Node.jsバージョンを指定する方法

`firebase-functions`のNode.jsバージョンを指定するには、`package.json`ファイルで指定します。以下の例のように設定してください。

```json
{
  "engines": {
    "node": "18"
  }
}
```

または、Node.js 20を使用したい場合は:

```json
{
  "engines": {
    "node": "20"
  }
}
```

### まとめ

– Firebase Functionsで最新の機能とセキュリティを利用するためには、
Node.js 18が推奨されており、これは現在のデフォルトです。
– Node.js 20はパブリックベータ版であり、新しい機能を試したい場合に利用できますが、
プロダクション環境での使用には慎重を要します。
– `package.json`でNode.jsのバージョンを明示的に指定することで、
使用するNode.jsバージョンをコントロールできます。

この情報に基づいて、プロジェクトの要件に最も適したNode.jsのバージョンを選択し、
Firebase Functionsを利用してください。

既に
npm install -g firebase-tools
 を実行しているが nvm install 20 nvm use 20 の後に再度実行する必要があるか?

の答えは

Node.jsのバージョンを変更した後、
`npm install -g firebase-tools`を再度実行する必要は**通常ありません**。
以下に、状況を整理してお答えします。

### なぜ再インストールが不要か

- **グローバルインストール**: `npm install -g firebase-tools`でインストールした`firebase-tools`は、グローバルにインストールされているため、Node.jsのバージョンに依存せず、システム全体で利用できます。
- **互換性**: Firebase CLIは通常、異なるNode.jsのバージョンで互換性があります。したがって、Node.jsのバージョンを切り替えた後でも、既にインストールされているFirebase CLIが動作します。

### nvmでNode.jsのバージョンを変更した場合の注意点

1. **パッケージの互換性**:
   - Node.jsのバージョンを切り替えた場合、特定のプロジェクトが新しいNode.jsバージョンで動作しない場合があります。この場合、プロジェクトの依存関係(`node_modules`)を再インストールする必要がありますが、これは`firebase-tools`の再インストールとは関係ありません。

2. **環境設定**:
   - `nvm use 20`でNode.js 20を使用するようにした場合、シェルセッション内でそのバージョンが有効になります。このシェルセッション内で`firebase-tools`コマンドを使用することに問題はありません。

### Firebase CLIのバージョンを確認する方法

Firebase CLIのバージョンが適切に動作しているか確認したい場合、以下のコマンドでバージョンを確認できます。

```bash
firebase --version
```

### まとめ

- `nvm`でNode.jsのバージョンを切り替えた後に、`firebase-tools`を再インストールする必要は通常ありません。
- Firebase CLIはグローバルにインストールされているため、Node.jsのバージョンを変更しても利用できます。
- `firebase --version`でCLIのバージョンが正常に動作しているかを確認してください。

これにより、`nvm`でのNode.jsバージョンの切り替えとFirebase CLIの使用が円滑に行えるはずです。

とのこと

つまり
WebhookサーバーとしてFirebaseを使用する場合
Firebase Cloud Functionsが必要
これを使用するには
Node.js 20 (Public Beta)
が必要

chatGPTでは

nvm install 20

となっているが
実行すると

zsh: command not found: nvm

M1macにインストールした時には

nodebrew install-binary stable


v22.7.0
がインストールされている

ちなみにバージョンを指定するので

nodebrew ls-remote

で調べると
20の場合は

v20.0.0  v20.1.0  v20.2.0  v20.3.0  v20.3.1  v20.4.0  v20.5.0  v20.5.1
v20.6.0  v20.6.1  v20.7.0  v20.8.0  v20.8.1  v20.9.0  v20.10.0 v20.11.0
v20.11.1 v20.12.0 v20.12.1 v20.12.2 v20.13.0 v20.13.1 v20.14.0 v20.15.0
v20.15.1 v20.16.0 v20.17.0  

となっている

今回は

v20.17.0
をインストールするので

nodebrew install-binary v20.17.0

結果は

Fetching: https://nodejs.org/dist/v20.17.0/node-v20.17.0-darwin-arm64.tar.gz
######################################################################### 100.0%
Installed successfully

使用バージョンを変更

nodebrew use v20.17.0
use v20.17.0

確認のため

node -v

とすれば

v20.17.0

となる

nodebrew ls

の結果は

v20.17.0
v22.7.0

current: v20.17.0

でインストールされているバージョンも確認

ここまでできたので
ゼロから始めるFirebase入門

を参考に

firebase login 

としたら

zsh: command not found: firebase

となる
chatGPTでは再度実行不要と言っていたけど

npm install -g firebase-tools   

を実行しインストール

firebase --version           

を実行すると

13.16.0

と表示される

Firebase でサイト公開

Firebase でサイト公開

Firebase プロジェクトの設定ができると
firebase.json
というファイルが作成される

これは
firebase init で作成された設定用ファイルになる

また public フォルダ内に
404.html が作成される

これらを確認したら
次にサイトを公開するので
プロジェクトフォルダに移動し

firebase deploy

を実行するとアップロードされ
Hosting URL が発行される

あとはこのURLをブラウザで表示すればページが表示される

また、変更をして更新をするときには
再度

firebase deploy

を実行すれば更新できる

サイトの更新履歴については
Firebase にログインして
Hosting をクリックすれば更新履歴を確認できる

また、バージョン管理もされているので
ロールバック機能を使うことで過去の状態に戻すことも可能

firebase プロジェクトの設定

firebase プロジェクトの設定

公開するフォルダを
firebase 用に初期化する

まず public のあるディレクトリに移動

cd MyPortfolioProject

次に

firebase list

を実行

これで現在 firebase にあるプロジェクト一覧が表示される

必要になるのは
Project ID / Instance の値

今回は
myportfolioproject-5e36a
を使う

次に初期化

firebase  init --project=myportfolioproject-5e36a

実行するとどのサービスを使うかい聞かれるので

◯ Hosting: Configure and deploy Firebase Hosting sites

までカーソルを十字キーで移動して
スペースで決定してから
Enter

いくつか変更があったので
create-react-appで作ったアプリをFirebaseで公開する方法

を参考に実践

ここから少し変わっている

? Please select an option: 
❯ Use an existing project 
  Create a new project 
  Add Firebase to an existing Google Cloud Platform project 
  Don't set up a default project 

とでてくる

今回はすでに作成したプロジェクトを使うので
そのままEnter

What do you want to use as your public directory? (public) 

となり
どのフォルダを公開用にするかと聞かれるので
これも デフォルトの public でよいので
そのまま Enter

次に

Configure as a single-page app (rewrite all urls to /index.html)? (y/N)

と聞かれSPAとして設定するかきかれるけど
今回は No にしたいので
そのままEnter でOK

SPAは Single Page Application の意味

次に

File public/index.html already exists. Overwrite? (y/N) 

となり
public の中にある index.html を上書きするか聞かれる
No なので Enter でOK

これで
Firebase initialization complete!
と表示されれば初期化はOK

ubuntu 16.04 へ Firebase-tools のインストール

ubuntu 16.04 へ Firebase-tools のインストール

Firebase CLI リファレンス

を参考にインストール

Node.js を使うため
npm を使ったインストールにする

sudo npm install -g firebase-tools

でインストール

しかし

firebase -V

を実行しても

┌────────────────────────────────────────────────────────────┐
│             firebase-tools update check failed             │
│            Try running with sudo or get access             │
│            to the local update config store via            │
│ sudo chown -R $USER:$(id -gn $USER) /home/snowpool/.config │
└────────────────────────────────────────────────────────────┘
/usr/local/lib/node_modules/firebase-tools/node_modules/configstore/index.js:53
				throw err;
				^

Error: EACCES: permission denied, open '/home/snowpool/.config/configstore/firebase-tools.json'
You don't have access to this file.

    at Object.openSync (fs.js:443:3)
    at Object.readFileSync (fs.js:343:35)
    at Configstore.get (/usr/local/lib/node_modules/firebase-tools/node_modules/configstore/index.js:34:26)
    at new Configstore (/usr/local/lib/node_modules/firebase-tools/node_modules/configstore/index.js:27:45)
    at Object.<anonymous> (/usr/local/lib/node_modules/firebase-tools/lib/configstore.js:4:18)
    at Module._compile (internal/modules/cjs/loader.js:776:30)
    at Object.Module._extensions..js (internal/modules/cjs/loader.js:787:10)
    at Module.load (internal/modules/cjs/loader.js:653:32)
    at tryModuleLoad (internal/modules/cjs/loader.js:593:12)
    at Function.Module._load (internal/modules/cjs/loader.js:585:3)

となってしまう

このため

sudo chown -R $USER:$(id -gn $USER) /home/snowpool/.config

を実行

これで再度

firebase -V

を実行すると
少し時間がかかるけどバージョンが表示される

これで

firebase login

を実行すると

i  Firebase optionally collects CLI usage and error reporting information to help improve our products. Data is collected in accordance with Google's privacy policy (https://policies.google.com/privacy) and is not used to identify you.

? Allow Firebase to collect CLI usage and error reporting information? (Y/n) 

となり
利用状況のデータを送信しますかとでるので
Yes ならそのまま Enter でOK

するとブラウザが立ち上がるので
アカウントを選択

次の画面で許可をクリック

これで
Firebase CLI Login Successful
となればOK