React.ts(Redux と Firebase を用いた開発) プロジェクトの流れ
はじめに
React.ts でプロジェクトを作成する際の、
プロジェクト作成からファイル削除、開発の流れを自分の中でテンプレ化することで、
React.ts での開発スピードを上げるため
## プロジェクト開始
- プロジェクト作成
作りたいアプリ名のフォルダを mkdir
プロジェクト作成
npx create-react-app . --template redux-typescript
- プロジェクトスタート
yarn start
モジュールのインストール
- Material-ui
yarn add @material-ui/core @material-ui/icons
- Firebase
yarn add firebase
出来ない場合は yarn upgrade を実行後、再度実行する
※↑ は global で add していれば必要ない?
次に Firebase console でプロジェクトを新規作成
作成後はコードのアイコンをクリックし、
アプリを登録し(Hosting はあとで)
console に戻り、
歯車の「プロジェクトを設定を選択」。コードアイコンをクリック
var firebaseConfig 内をコピーし、vscode に env ファイルをプロジェクト直下に作成(.env)
貼り付ける
REACT_APP_FIREBASE_APIKEY="hogehoge"
REACT_APP_FIREBASE_DOMAIN="appname.firebaseapp.com"
REACT_APP_FIREBASE_DATABASE="https://appname.firebaseio.com"
REACT_APP_FIREBASE_PROJECT_ID="appname"
REACT_APP_FIREBASE_STORAGE_BUCKET="appname.appspot.com"
REACT_APP_FIREBASE_SENDER_ID="123456~"
REACT_APP_FIREBASE_APP_ID="1:1234hoge:web:132b4j54n4hogehoge~"
1 回ターミナル切ってもう一度 yarn start
src/firebase.ts を作成
import firebase from 'firebase/app';
import 'firebase/auth';
import 'firebase/firestore';
import 'firebase/storage';
const firebaseConfig = {
apiKey: "hogehoge",
authDomain: "appname.firebaseapp.com",
projectId: "appname",
storageBucket: "appname.appspot.com",
messagingSenderId: "123456~",
appId: "1:1234hoge~:web:35n4ijgrtjhogehoge~"
};
const firebaseApp = firebase.initializeApp(firebaseConfig)
export const db = firebaseApp.firestore();
export const auth = firebaseApp.auth();
export const storage = firebase.storage();
export const provider = new firebase.auth.GoogleAuthProvider();
features/counter の counterSlice.ts のみを features 直下に移動し、counter フォルダを削除する
counterSlice.ts→userSlice.ts に名前を変更後、ファイル内の AppThunk の import を消す。
features/userSlice.ts を以下のように変更
import { createAsyncThunk, createSlice, PayloadAction } from "@reduxjs/toolkit";
import { RootState } from "../app/store";
// import { fetchCount } from "./counter/counterAPI";
export const userSlice = createSlice({
name: "user",
// ユーザー設定に必要な情報を追加
//stringが型推論として入るS
initialState: {
user: { uid: "", photoUrl: "", displayName: "" },
},
// The `reducers` field lets us define reducers and generate associated actions
reducers: {
login: (state, action) => {
state.user = action.payload;
},
logout: (state) => {
state.user = { uid: "", photoUrl: "", displayName: "" };
},
},
});
export const { login, logout } = userSlice.actions;
export const selectUser = (state: RootState) => state.user.user;
export default userSlice.reducer;
app/store.ts を以下のように変更
import { configureStore, ThunkAction, Action } from "@reduxjs/toolkit";
import userReducer from "../features/userSlice";
export const store = configureStore({
reducer: {
user: userReducer,
},
});
export type AppDispatch = typeof store.dispatch;
export type RootState = ReturnType<typeof store.getState>;
export type AppThunk<ReturnType = void> = ThunkAction<
ReturnType,
RootState,
unknown,
Action<string>
>;
App.ts の div タグ内を空にする。logo の import を削除する
redux devtools の導入
App.css→App.modules.css に変更
App.modules.css の中を書き換える
App.ts に import styles from "./App.modules.css"
Google 認証機能の追加
App.ts でログイン時は Feed.tsx
ログアウト時は Ayth.tsx に遷移するように処理書く
Auth.tsx に Material-ui でログイン時のテンプレを書く
ログイン画像はアプリに関連ありそうな画像で固定する
Google サインインボタンの実装
チーム開発の流れ
git checkout setup-video-component
実装
でけた
git diff --cached -w
git add -A
git commit -m "feature/issue 番号_やった内容"
git push origin setup-video-component
紐づいた内容のプルリクエストを github 上にて Master(Main)に対して行う
git checkout feature
git merge setup-video-component
git push origin feature
デプロイ
- firebase console で Hosting 開く
npm run dev
firebase login
firebase init
↓
Hosting を選択
↓
Use an existing project を選択
↓
アプリ名選択
↓
public ではなく build と入力
↓
firebase deploy
完成!!