Firebase, 生のHTML(Java Script)を用いた簡単な開発環境をつくる

# はじめに
私がはじめてデータベースに触れたのはFirebaseである。
ネットゲームのようにDBはネット上に存在することが当たり前だと思っていたからである。
その中でFirebaseはとても使いやすかった。
そのおかげでJava Script, DBに対する理解度が深まって他の言語に対する抵抗もかなり減る結果になった。
ここでは初心者が簡単にDBを用いたホームページなどを作るとき、基本的な設定がわかるように、書いておく


# 環境
window 10 
node.js 18.12.1
Firebase 8.6.5


# 基本設定

## Firebase

Firebaseにログインし、直感的にわかるように、使ってみる → プロジェクト追加をする

https://firebase.google.com/

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2821152/466642a8-e7b2-b9f7-4238-7116c65e96a2.png)

使ってみるをクリックし、プロジェクトを追加する
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2821152/6e264484-ea7c-d30b-b67b-3cecffef7a25.png)

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2821152/bfda40e1-9bdb-e12f-52e8-c585e3d73545.png)


![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2821152/485ae325-d040-2791-5d9d-eb2ec39d77f4.png)


## Authentication

Authentication, Firestore, Hostingの使用設定をしておく

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2821152/6776c12e-17a0-a068-3ada-6ea94767dc62.png)
  
メール、パスワード使用を登録
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2821152/8d3a226e-ebe0-9712-4c1b-b88b0f3d67d6.png)

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2821152/572eaa83-5dca-5dd7-a437-958fdb2f1a38.png)

## Firestore Database

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2821152/f7035601-0e5e-0ca9-7808-adb40fff8697.png)

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2821152/b2693316-99f9-9466-7397-fe0328f23530.png)

物理的に近い場所を選択

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2821152/d6852fd0-0fe3-f9ab-cada-8bddd89dbcab.png)
## Hosting
あとのために、Hostingもやっておきます

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2821152/bd48b498-f306-a97b-5a6e-edb8bf8636f7.png)




# 環境設定

https://nodejs.org/ja/

node js を最新バージョンでダウンロードする

ここでは
node js 18.12.1 を使用した


ここからはVSCODE
```terminal: Terminal
npm install -g firebase-tools@9.23.1
firebase login
firebase init
```
## Firebase init

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2821152/96b0fc75-9e0b-3054-c648-9571d24de10e.png)


```terminal
? Please select an option: Use an existing project 
? Select a default Firebase project for this directory: for-qiita-e3ffb (先ほど作ったプロフェクトを選択)
? What do you want to use as your public directory? public
? Configure as a single-page app (rewrite all urls to /index.html)? No
? Set up automatic builds and deploys with GitHub? No
? What file should be used for Firestore Rules? firestore.rules (エンター)
? What file should be used for Firestore indexes? firestore.indexes.json (エンター)
```


## 生成後の画面

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2821152/d57925db-1920-9b54-ee37-afe81f103b28.png)

新しいindex.htmlを生成し、必要な情報だけを残した
Firebase 8Vの方が個人的に扱いやすいため、Versionは8.6.5にした
```html:index.html
<!DOCTYPE html>
<html lang="en">
<head>
  <meta charset="UTF-8">
  <meta http-equiv="X-UA-Compatible" content="IE=edge">
  <meta name="viewport" content="width=device-width, initial-scale=1.0">
  <title>Document</title>
</head>
<body>

  <!-- まだ情報量が多い V8を使用 -->
    <script src="https://www.gstatic.com/firebasejs/8.6.5/firebase-app.js"></script>
    <script src="https://www.gstatic.com/firebasejs/8.6.5/firebase-auth.js"></script>
    <script src="https://www.gstatic.com/firebasejs/8.6.5/firebase-firestore.js"></script>
    <script src="https://www.gstatic.com/firebasejs/8.6.5/firebase-storage.js"></script>
  
</body>
</html>
```

## アプリ設定
ウェブで利用できるように設定しておく

メインの画面で丸いアイコンのwebをクリック

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2821152/07d02ea6-b73c-b3bd-1aed-9314be8beefe.png)

名前を適当に入れて登録、Firebase Hositingの設定はしてない
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2821152/1c6baf4e-b634-e55c-3b50-d69551cd1077.png)

script タグから `firebaseConfig`の中のapikey, authdomain などの情報をコピーする
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2821152/13be0122-fea0-94ae-8124-bc55adc2e124.png)


以下のようにapikeyの情報を貼り付ける。

```html: index.html
<!DOCTYPE html>
<html lang="en">
  <head>
    <meta charset="UTF-8" />
    <meta http-equiv="X-UA-Compatible" content="IE=edge" />
    <meta name="viewport" content="width=device-width, initial-scale=1.0" />
    <title>Document</title>
  </head>

  <body>

    Hello brothers 

    <script src="https://www.gstatic.com/firebasejs/8.6.5/firebase-app.js"></script>
    <script src="https://www.gstatic.com/firebasejs/8.6.5/firebase-auth.js"></script>
    <script src="https://www.gstatic.com/firebasejs/8.6.5/firebase-firestore.js"></script>
    <script src="https://www.gstatic.com/firebasejs/8.6.5/firebase-storage.js"></script>

    <script>
      const firebaseConfig = {
        apiKey: "your key",
        authDomain: "your key",
        projectId: "your key",
        storageBucket: "your key",
        messagingSenderId: "your key",
        appId: "your key",
      };

      firebase.initializeApp(firebaseConfig);
    </script>
  </body>
</html>

```







## データの設定

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2821152/25b5d4d4-7538-8a1a-9f17-fa4052b71a06.png)


![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2821152/225c35fe-6593-e076-65b5-637e04ffd48f.png)

## ルール変更
読み込みにはデータに対する権限のルールがある
デフォルト設定では権限が全員に対してfalseになっているので、trueに変えておく
将来的にこ個人情報を扱うことになると、より詳細な設定が必要になるかも

### 設定前
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2821152/8c40ea1f-cf97-6971-9157-ad8ecac48b58.png)

### 設定後
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2821152/6b6d0e35-3aca-1a5c-48ab-568f180b2825.png)



# データの読み込み 

```html: index.html
<!DOCTYPE html>
<html lang="en">
  <head>
    <meta charset="UTF-8" />
    <meta http-equiv="X-UA-Compatible" content="IE=edge" />
    <meta name="viewport" content="width=device-width, initial-scale=1.0" />
    <title>Document</title>
  </head>

  <body>

    Hello brothers 


    <script src="https://www.gstatic.com/firebasejs/8.6.5/firebase-app.js"></script>
    <script src="https://www.gstatic.com/firebasejs/8.6.5/firebase-auth.js"></script>
    <script src="https://www.gstatic.com/firebasejs/8.6.5/firebase-firestore.js"></script>
    <script src="https://www.gstatic.com/firebasejs/8.6.5/firebase-storage.js"></script>

    <script>
       const firebaseConfig = {
        apiKey: "your key",
        authDomain: "your key",
        projectId: "your key",
        storageBucket: "your key",
        messagingSenderId: "your key",
        appId: "your key",
      };

      firebase.initializeApp(firebaseConfig);
    </script>

    <script>
        const db = firebase.firestore();
        db.collection('test').get().then((snapshot)=>{
          snapshot.forEach(doc => {
            console.log(doc.data())
          });
        })

    </script>
  </body>
</html>
```

```terminal
firebase serve
```
 
開発者ツール → コンソール

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2821152/cbe694de-8ca7-f3be-2013-ddf1cf9fcfeb.png)

問題なくFirestoreからデータを読み込めた

# 終わりに
ここではFirebaseと生のHTMLの組み合わせによる環境構築をまとめた
最近ではReact, Vue などが主流ではあるが、昔ながらの生のHTMLも魅力がある。何よりも簡単な初期設定、緩いルール、とりあえずは動くシステム、それとFirebaseの組み合わせなら、入門としてはとても良い練習、遊びになると思う