LoginSignup
17
11

More than 3 years have passed since last update.

React Router付のReact AppをFirebase Hostingでホストする

Last updated at Posted at 2019-05-31

Firebase Hositing は SPA を上げることが前提となっているので、Reactなどと相性が良い。また /index.html へすべてのルーティングを回してくれるので、React RouterでURLのパスとSPAを対応つけることもできる。

Create React App がデフォルトで build フォルダにすべてを出力するところをちゃんとFirebase Hostingと関連付けてあげれば基本的にそれだけですべて行くので、手順だけを健忘禄的にメモしておく。

参考にした公式ドキュメント

完成品

キャプチャ.PNG

最終的にこんな感じにホスティングできる。

https://router-study.firebaseapp.com/topics/components

上記URLのサイトでは index.html しかないけれども、ルーティングに合わせてコンテンツが変わるSPAになっている。

ソースコード

https://github.com/sifue/router-study

Firebase で ReactApp / React Routerをホスティングするための手順

React App を作る

環境は

vagrant@ubuntu-bionic:~/localworkspace/router-study$ npm -v
6.4.1
vagrant@ubuntu-bionic:~/localworkspace/router-study$ node -v
v8.16.0

まずは Create React App をインストールして動作確認。

npm install -g create-react-app
create-react-app router-study
cd router-study

yarn start

http://localhost:3000/

動いていればOK。

React App を Firebase に対応させる。

npm install -g firebase-tools
firebase login
firebase init

今後のための設定として

  • Firestore
  • Functions
  • Hosting
  • Storage

選んでおくと便利。セキュリティルールやインデックスのファイルを作っておいてくれる。

アップロードするプロジェクトを選択or作成。

  • firestore.roles
  • firestore.indexes.json

作成。Fuctionsの言語はご自由に。ここでは、

  • JavaScript

で、ESLintは強制 y を選択。

出力フォルダは、public ではなく リソースは build ディレクトリ を入力する。ここが一番重要。

すべてのURLを index.html にするのはデフォルトの設定。
storage.rulesも作っておくと便利。

firebase serve --only hosting -o 0.0.0.0

でhosting起動。

http://localhost:5000/

アクセスして、Firebase のデフォルトHTMLが動いていればOK。

React App をビルドして、Firebaseローカルサーバーでホスティング。

yarn build && firebase serve --only hosting -o 0.0.0.0

http://localhost:5000/

これで、React Appが起動できてればOK

Datastore/Firestore、Storage、Functionsをそれぞれ

https://console.firebase.google.com/

で開いて設定しておく。

firebase deploy

https://${自分のプロジェクト}.firebaseapp.com

などにアクセス。React Appが動いていることを確認。

React Routerをインストールして動かしていく。
yarn add react-router-dom

src/App.js を Example: Nested Routing に編集。


import React from "react";
import { BrowserRouter as Router, Route, Link } from "react-router-dom";

function App() {
  return (
    <Router>
      <div>
        <Header />

        <Route exact path="/" component={Home} />
        <Route path="/about" component={About} />
        <Route path="/topics" component={Topics} />
      </div>
    </Router>
  );
}

function Home() {
  return <h2>Home</h2>;
}

function About() {
  return <h2>About</h2>;
}

function Topic({ match }) {
  return <h3>Requested Param: {match.params.id}</h3>;
}

function Topics({ match }) {
  return (
    <div>
      <h2>Topics</h2>

      <ul>
        <li>
          <Link to={`${match.url}/components`}>Components</Link>
        </li>
        <li>
          <Link to={`${match.url}/props-v-state`}>Props v. State</Link>
        </li>
      </ul>

      <Route path={`${match.path}/:id`} component={Topic} />
      <Route
        exact
        path={match.path}
        render={() => <h3>Please select a topic.</h3>}
      />
    </div>
  );
}

function Header() {
  return (
    <ul>
      <li>
        <Link to="/">Home</Link>
      </li>
      <li>
        <Link to="/about">About</Link>
      </li>
      <li>
        <Link to="/topics">Topics</Link>
      </li>
    </ul>
  );
}

export default App;
yarn start

で webpack の Webローカルサーバーで動作確認。これだとエラーを教えてくれる。

http://localhost:3000/

にて Router がちゃんと動いてくれていることをチェック。ちゃんとURLパスと内容の連動を確認。

最後にビルドして、 firebase にデプロイ。

yarn build && firebase deploy

https://${自分のプロジェクト}.firebaseapp.com

などにアクセス。ちゃんと動いていれば完成。

感想

Create React Appが過去、バージョン依存関係の関係上設定が難しかった Webpack/Babel/JSX/ESLint の設定を完全にやってくれてしかもローカル WebServer でリアルタイムビルド、エラーまで出してくれるようになって神。React.jsの進化に感動です。

17
11
1

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
17
11