What
Reactのアプリ内でFirebaseを使うときにハマらずに環境構築するためのメモ
(2019年4月28日 初稿)
OS: macOS Catalina 10.15.4
Why
公式ドキュメントや他の記事を見ながらもハマったことが何度もあるのでここにまとめておく
Who
趣味でReact + Redux + Firebaseあたりでwebアプリを作っている人です。
構築方法
##Firebase側
Firebase console
-> プロジェクトを追加
-> アプリを追加
-> webアプリを選択
-> (Cloud Firestoreを使う場合) [Database]
-> [データベースの作成]
-> [本番環境で開始]
-> ロケーションは"asia-northeast1"を選択
##React側
npx create-react-app project-name
-> cd project-name
-> (Material-UIを使う場合) yarn add @material-ui/core
-> firebase init
-> 使うものを選択(functions, firestore, hostingなど)
-> SPAにするをYes
-> hosting用のディレクトリをbuild
に指定
-> 「Firebaseの既存のプロジェクトを使用」でさっき作ったFirebaseのプロジェクトを指定する
-> 完了
->
-> yarn add firebase axios (axiosはなくてもいい)
-> srcディレクトリ内に firebase_config.js
を作成
import firebase from 'firebase/app';
import 'firebase/firestore';
import 'firebase/functions';
import 'firebase/analytics'
const firebaseConfig = {
apiKey: "****************************",
authDomain: "****************************",
databaseURL: "****************************",
projectId: "****************************",
storageBucket: "****************************",
messagingSenderId: "****************************",
appId: "****************************",
measurementId: "****************************"
};
firebase.initializeApp(firebaseConfig);
export default firebase;
export const db = firebase.firestore();
firebaseConfigの部分は
firebase console
-> プロジェクト
-> [設定]
-> [プロジェクトの設定]
-> 下のほうにある「Firebase SDK snippet」
-> [構成]に表示を切り替える
-> firebaseConfig
の中身をコピー
Functionsを使う場合
トップディレクトリからfunctionsディレクトリに移動 cd functions
-> yarn add cors
(corsのアラートがでるのを防ぐ)
-> index.js
にて(以下はテンプレート)
const functions = require('firebase-functions');
const admin = require('firebase-admin');
admin.initializeApp();
const cors = require('cors')({origin: true});
exports.addRecord = functions.region('asia-northeast1').https.onRequest((req, res) => {
cors(req, res, () => {
admin.firestore().collection('posts').add({
name: req.body.name,
createdAt: new Date().toISOString(),
likes: 0,
})
.then(() => {
return res.status(201).json({message: "success"})
})
.catch((err) => {
return console.error(err);
});
return null;
});
});
###デプロイ時
Functionsだけ
-> firebase deploy --only functions
hostingしたい
->yarn build
->firebase deploy --only hosting, firestore