こんにちは、MSKです。
ここ数日でReactとreact-router-domを使ったホームページを作っていて、それをGitHub Pagesで公開しました。
ところが、ローカルで動いていたアプリはデプロイすると真っ白なページしか表示されなくなりました。
この問題を解決したので備忘録として残します。
開発環境
今回の開発では主に以下を使いました。
- React@v18
- typescript
- react-router-dom@v6
- gh-pages@v4

react-router-dom@v6での実装
以下のブログではv5を使っていましたが、今回はv6を使います。
少し実装方法が変わったので、書いておきます。
↑の記事と同じようにページを作っておきます。
例えば、
import React from 'react'
const Home= () => {
return (
<div>
Home
</div>
)
}
export default Home;
のような感じです。
次に後で作るリンクと上で作ったコンポーネントを結びつけるコンポーネントを作ります。
import React from 'react';
import {BrowserRouter, Routes,Route} from 'react-router-dom';
/** ここに各ページをimport */
const RouteManager:React.FC = () => {
return (
<BrowserRouter>
<Routes>
<Route path='/' element={<Home />} />
<Route path='/about' element={<About/>}/>
<Route path='/works' element={<Works/>}/>
<Route path='/contact' element={<Contact />}/>
<Route path='*' element={<NotFound />}/>
</Routes>
</BrowserRouter>
)
}
export default RouteManager;
ここがv5と違っていて、v5ではcomponentというプロパティにコンポーネント名を入れていましたが、v6ではelementにJSXとしての要素として設定します。
最後にリンクを作って、各ページを遷移できるようにします。
<nav>
<Link to="/">
<a>ホーム</a>
</Link>
<Link to="/about">
<a>紹介</a>
</Link>
<Link to="/works">
<a>作品集</a>
</Link>
<Link to="/contact">
<a>お問い合わせ</a>
</Link>
</nav>
これでローカルで実行してみると、上手く遷移できることが確認できました。
問題
GitHub Pagesにデプロイする準備をします。
gh-pagesをインストールして、次のようにpackage.jsonを編集します。
{
"name": "my_app",
"homepage": "https://<githubのユーザー名>.github.io/<このプロジェクトのgithubでのリポジトリ名>",
"version": "0.1.0",
・・・・
"scripts": {
"predeploy": "npm run build",
"deploy": "gh-pages -d build",
"start": "react-scripts start",
"build": "react-scripts build",
"test": "react-scripts test",
"eject": "react-scripts eject"
},
・・・
homepageというフィールドを追加して、<>で囲まれた箇所に適切な名前を入力します。
scriptsフィールドにpredeployとdeployというフィールドを追記します。
これで準備OKなので、次のコマンドでgithubにデプロイします。
npm run deploy
publishedと出たら、GitHubの該当するリポジトリに移動して、Settingsからpagesを選択します。
sourceを設定します。
僕の場合はgh-pagesでデプロイした際に作成されるgh-pagesブランチを選択して、/rootフォルダを指定しました。
Actionsからデプロイが完了したことを確認して、URLを開いてみると真っ白なページしか表示されていませんでした。

原因と解決策
原因は上の設定ではルートがhttps://<GitHubのユーザー名>.github.io/とみなされるので、react-router-domで設定したpath=’/’はhttps://<GitHubのユーザー名>.github.io/とみなされているので、真っ白なページが表示されているということでした。
GitHub Pagesにデプロイする時にreact-router-domで設定しているpathとLinkを次のように設定するとちゃんと表示されました。
import React from 'react';
import {BrowserRouter, Routes,Route} from 'react-router-dom';
/** ここに各ページをimport */
const RouteManager:React.FC = () => {
return (
<BrowserRouter>
<Routes>
<Route path='/<このプロジェクトのgithubでのリポジトリ名>/' element={<Home />} />
<Route path='/<このプロジェクトのgithubでのリポジトリ名>/about' element={<About/>}/>
<Route path='/<このプロジェクトのgithubでのリポジトリ名>/works' element={<Works/>}/>
<Route path='/<このプロジェクトのgithubでのリポジトリ名>/contact' element={<Contact />}/>
<Route path='*' element={<NotFound />}/>
</Routes>
</BrowserRouter>
)
}
export default RouteManager;
<nav>
<Link to="/<このプロジェクトのgithubでのリポジトリ名>/">
<a>ホーム</a>
</Link>
<Link to="/<このプロジェクトのgithubでのリポジトリ名>/about">
<a>紹介</a>
</Link>
<Link to="/<このプロジェクトのgithubでのリポジトリ名>/works">
<a>作品集</a>
</Link>
<Link to="/<このプロジェクトのgithubでのリポジトリ名>/contact">
<a>お問い合わせ</a>
</Link>
</nav>
この修正を行ってデプロイするとGitHub Pagesで作成したアプリが表示されました。
最後に
GitHub Pagesは簡単に無料でアプリを公開することができるので便利ですが、たまにひっかかる箇所があるので、忘れないようにブログにしました。
以上、「GitHub Pagesでreact-router-dom@v6を使って悩んだ!」でした。
ご覧いただき、ありがとうございました。
