2
3

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

Firebaseを使ってみた 〜第三章 Firestoreからデータを取得する 〜

Last updated at Posted at 2020-10-11

React Hooksを使いチャットボットアプリを作成しています。

この章ではFirestoreに保存した中から初期データを取得するまでを行います。

第一章 サービスをデプロイする
第二章 Firestoreにデータを保存する
第三章 Firestoreからデータを取得する

Firestoreを使う準備の流れ

[1. config.jsファイルを作成する](#menu1) [2. エントリポイントを作成する](#menu2) [3. 初期データを取得する](#menu3) [4. まとめ](#menu4)

1. config.jsファイルを作成する

srcディレクトリ配下に「firebase」ディレクトリを作成し、その中に「config.js」ファイルを作成します。 Firebaseのページに移り、「プロジェクトを設定」画面へ遷移します。 ![スクリーンショット 2020-10-11 10.43.44.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/578913/76085cc3-1c47-d3c1-788e-78fee668a2a1.png)

の下部にあるFirebase SDK snippetの構成にチェックを入れ、下に記載してあるコードをコピーしconfig.jsファイルに貼り付けます。
スクリーンショット 2020-10-11 10.44.22.png

貼り付けた内容を他の画面で使うので、exportしておきます。

firebase/config.js
const firebaseConfig = {
  apiKey: "******",
  authDomain: "******",
  databaseURL:"******",
  projectId: "******",
  storageBucket: "******",
  messagingSenderId: "******",
  appId: "******",
  measurementId: "******"
};

export default firebaseConfig

こちらの内容はGitHubなどに公開して問題ない内容のようですが、firestoreのセキュリティ設定をしておかないと簡単に書き込みをされてしまうので注意してください。(セキュリティ設定に関してはこちら

2. エントリポイントを作成する

firebaseディレクトリ配下に「index.js」ファイルを作成し以下記述をします。
firebase/index.js
import firebase from 'firebase/app'        //firebaseを読み込み
import 'firebase/firestore'                //firebaseの中のfirestoreを読み込み
import firestoreConfig from './congfig'    //先ほど作成したconfigファイルを読み込み

firebase.initializeApp(firesbaseConfig);   //firebaseを初期化
export const db = firebase.firestore();    //初期化したfirebaseのfirestoreを使う

3. Firestoreからデータを取得する

Firestoreからデータを取得していきます。まず、先ほど作成したdbをインポートします。
src/App.jsx
import { db } from './firebase/index'

useEffectを使い、ページ読み込み時に全データを取得するようにします。
async,await付きの即時関数で記述していきます。(即時関数について参考記事

src/App.jsx
import React, {useState, useEffect} from 'react'
import { db } from './firebase/index'

const App = () => {
 const [dataset, setDataset] = useState({});

  useEffect(() => {
    (async () => {
      const initDataset = {};
      await db.collection('[チャットボットのjsonファイルで設定したキー]').get().then(snapshots => {
        snapshots.forEach(doc => {
          const id = doc.id
          const data = doc.data()
          initDataset[id] = data
        })
        setDataset(initDataset)
      })
    })()
  },[])

ここで行っていることは以下です。

  • collectionにアクセスし、データ(doc)を取得(データはsnapshotsに全て格納される)
  • snapshotsの中身をforEachで回し、id,dataを取り出す
  • 取り出したidをキーにinitDatasetの中にデータを格納する

あとは任意の場所でinitDatasetからidをキーにデータを取り出して使います。

4. まとめ

この章ではエントリポイントを作成し、Firestoreに格納したデータを取得しました。

今回初めて使ったみたのですが、記述すべき内容が把握できればとても簡単にできることがわかりました。手軽にバックエンド環境を用意したい方にはお勧めです!

2
3
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
3

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?