商品等のご購入はAmazonがおすすめ

久しぶりにReactでWEBサイトを作ってみた

ホームページ

ReactというWebサイト作成お便利ツールがあるのですが、なぜか登場時から高いシェア率を維持しています。

WEBフレームワークランキング
https://2022.stateofjs.com/ja-JP/libraries/front-end-frameworks/

流行り物には手を出したいお年頃ですので、ちゃちゃっと簡単なWebサイトを作ってみました。

使用ライブラリ等

{
    "name": "react-test",
    "homepage": "./",
    "version": "0.1.0",
    "private": true,
    "dependencies": {
        "@emotion/react": "^11.11.3",
        "@emotion/styled": "^11.11.0",
        "@mui/icons-material": "^5.15.10",
        "@mui/material": "^5.15.10",
        "@testing-library/jest-dom": "^5.17.0",
        "@testing-library/react": "^13.4.0",
        "@testing-library/user-event": "^13.5.0",
        "@types/jest": "^27.5.2",
        "@types/node": "^16.18.83",
        "@types/react": "^18.2.58",
        "@types/react-dom": "^18.2.19",
        "axios": "^1.6.7",
        "cors": "^2.8.5",
        "dotenv": "^16.4.5",
        "express": "^4.18.2",
        "next": "^14.1.0",
        "nodemailer": "^6.9.10",
        "react": "^18.2.0",
        "react-dom": "^18.2.0",
        "react-router-dom": "^6.22.1",
        "react-scripts": "5.0.1",
        "react-scroll": "^1.9.0",
        "typescript": "^4.9.5",
        "web-vitals": "^2.1.4"
    },
    "scripts": {
        "start": "set HOST=0.0.0.0&&react-scripts start",
        "build": "set GENERATE_SOURCEMAP=false&&react-scripts build",
        "test": "react-scripts test",
        "eject": "react-scripts eject"
    },
    "eslintConfig": {
        "extends": [
            "react-app",
            "react-app/jest"
        ]
    },
    "browserslist": {
        "production": [
            ">0.2%",
            "not dead",
            "not op_mini all"
        ],
        "development": [
            "last 1 chrome version",
            "last 1 firefox version",
            "last 1 safari version"
        ]
    },
    "devDependencies": {
        "@types/react-scroll": "^1.8.10"
    }
}

ファイル・フォルダ構成

ファイル・フォルダ構成

基本的にはnpmのreactテンプレートをそのまま流用しました。

import React from 'react';
import {Routes, Route} from "react-router-dom";

import Top from "./pages/top"
import Concept from "./pages/concept";
import Systems from "./pages/systems";
import About from "./pages/about";
import Contact from "./pages/contact";
import Article from "./pages/article";
import PrivacyPolicy from "./pages/privacy-policy";
import NotFound from "./pages/404";

import Footer from "./components/Footer"
import HeaderTop from "./components/Header/HeaderTop";
import HeaderCenter from "./components/Header/HeaderCenter";
import HeaderBottom from "./components/Header/HeaderBottom";
import ScrollUpButton from "./components/ScrollUpButton";

const App: React.FC = () => {
    return (
        <>
            <HeaderTop/>
            <HeaderCenter/>
            <HeaderBottom/>
            <Routes>
                <Route path="/" element={<Top/>}/>
                <Route path="/concept" element={<Concept/>}/>
                <Route path="/systems" element={<Systems/>}/>
                <Route path="/about" element={<About/>}/>
                <Route path="/contact" element={<Contact/>}/>
                <Route path="/article" element={<Article/>}/>
                <Route path="/privacy-policy" element={<PrivacyPolicy/>}/>
                <Route path="*" element={<NotFound/>}/>
            </Routes>
            <ScrollUpButton/>
            <Footer/>
        </>
    );
};

export default App;

Webサイトの基幹部分はこんな感じです。

レンタルサーバーへの公開方法

正直サイト制作よりこれに苦労しました。

専用サーバーならビルドしたものをWEBルートに配置すればOKだと思うのですが、当サイトのようにWordPress用のサーバーのサブフォルダにアップロードすると不具合が多発してほんとに大変でした。

あくまでreact-router-domを使用している場合はですが、index.tsxに

<BrowserRouter basename="/react-test/">
    <App/>
</BrowserRouter>

このように「basename=”/<サブフォルダ名>/”」を追加します。

また、上記したようにpackage.jsonに「”homepage”: “./”,」を追加します。

最後に「public」フォルダに下記のファイルを追加します。

Options -MultiViews
RewriteEngine On
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^ index.html [QSA,L]

この状態にしたうえで「npm run build」を実行します。

そしてビルドされたものをサブフォルダに突っ込めば完了です。

Xserverの場合はルートディレクトリは「public_html」です。

成果物

React App

注意事項

今回のWebサイトは進学塾センシンをモデルに作成しております。

また、専用サーバーではないため、「お問い合わせ」など実際には機能しない部分も含まれています。

まとめ

今回はReact+TypeScript+MUIを主軸に制作しました。

MUIを使用するとそれっぽく見えるのがよかったです。

コメント

タイトルとURLをコピーしました