ルーティング機能を含む react アプリケーションを、ロリポップにデプロイする際の設定方法を紹介します。これからレンタルサーバーにポートフォリオを公開したい方におすすめの内容になっています。記事最下部に、デプロイ用のサンプルも用意しています。
目次
レンタルサーバーへのデプロイ時にルーティングが動かなくなる問題
開発環境では、react-router-dom は Link コンポーネントの to プロパティに、遷移先コンポーネントを指定すればルーティングが機能します。チュートリアルの通りですね。しかし、ロリポップなどのレンタルサーバーにデプロイする際には、そのままでは react アプリケーションはルーティングが機能しません。別途、追加の設定が必要になります。レンタルサーバーを借りた後に悩む方も多い事象です。本稿では対応方法をご紹介します。

レンタルサーバーではルーティング用に設定が必要と聞いて心配になってる😢レンタルサーバーでも react-router-dom は動作するの?
レンタルサーバーでも react-router-dom のルーティングは動作するよ!注意する設定項目は3つだけ!1つずつ順を追って解説していくので、ご安心を👍最後に動作デモも紹介するよ。

package.json に homepage プロパティを追記する
homepage プロパティに、デプロイ先のディレクトリを指定します。「ロリポップ契約ドメイン」に、ご自身の契約しているドメインを記述します。「react-routing-app」は、デプロイ先のディレクトリとなります。
{
"name": "react-routing-app",
"version": "0.1.0",
"private": true,
"homepage": "https://ロリポップ契約ドメイン/react-routing-app/",
"dependencies": {
...
},
"scripts": {
...
},
"eslintConfig": {
...
},
"browserslist": {
...
}
}
.htaccess ファイルを追加する
React のクライアントサイドレンダリングでは、"react-routing-app/about" や "react-routing-app/contact" を要求する際にも、about.html や contact.html がリターンされるわけではなく、常に index.html を利用します。ルーティング発生時に、常に index.html がリターンする指定を記述します。
RewriteEngine On
RewriteBase /react-routing-app/
RewriteRule ^index\.html$ - [L]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule . /react-routing-app/index.html [L]
この .htaccess ファイルは、public フォルダ配下に保存します。

Router basename プロパティを設定する
react-router-dom の Router コンポーネントの basename プロパティに、デプロイ先ディレクトリ名を指定します。
function App() {
return (
<Router basename="/react-routing-app">
<nav>
<ul>
<li>
<Link to="/">Home</Link>
</li>
<li>
<Link to="/about">About</Link>
</li>
<li>
<Link to="/contact">Contact</Link>
</li>
</ul>
</nav>
<Routes>
<Route path="/" element={<Home />} />
<Route path="/about" element={<About />} />
<Route path="/contact" element={<Contact />} />
</Routes>
</Router>
);
}
これら3つの設定を行うことで、ロリポップ上で react アプリケーションのルーティング機能が動作するようになります。
デプロイ用サンプルアプリケーション
注意点
package.json の homepage プロパティを、ご自身の契約しているロリポップのドメイン名に変更の上、ご利用ください。※下記参照
{
"name": "react-routing-app",
"version": "0.1.0",
"private": true,
"homepage": "https://ロリポップ契約ドメイン/react-routing-app/",
"dependencies": {
"@testing-library/jest-dom": "^5.17.0",
本サイトでのデモ
デプロイ用サンプルアプリケーションを本サイトに公開しました。本サイトはロリポップのライトプランを利用しています。ロリポップで React のルーティングが問題なく動作することが分かります。
https://watermargin.net/react-routing-app/
PR:ロリポッププラン一覧
React そのものは、HTML, CSS, JavaScript の集合体として動作しますので、ロリポップのどのプランでも大丈夫です。ロリポップは安価でサーバーを借りることができるので、ポートフォリオサイトの作成・公開に最適です。
| プラン名 | データベース | 速度 | データ容量 | 料金 |
|---|---|---|---|---|
| エコノミープラン | 99 円~ | |||
| ライトプラン | 264 円~ | |||
| スタンダードプラン | 495 円~ | |||
| ハイスピードプラン | 550 円~ | |||
| エンタープライズプラン | 2200 円~ |
