---
# System prepended metadata

title: Reactプロジェクト作成

---

# Reactプロジェクト作成
[参考](https://qiita.com/Takashi_Code_20/items/0dd566eba64da45ccd62#:~:text=EC2%E3%81%AF%E3%82%AF%E3%83%A9%E3%82%A6%E3%83%89%E5%86%85%E3%81%A7%E6%8F%90%E4%BE%9B%E3%81%95%E3%82%8C%E3%82%8B%E3%82%B3%E3%83%B3%E3%83%94%E3%83%A5%E3%83%BC%E3%82%BF%E3%83%BC%20%28%E3%83%AA%E3%82%BD%E3%83%BC%E3%82%B9%29%E3%81%A7%E3%81%99%E3%80%82%20%E5%BE%8C%E3%81%AB%E4%BD%9C%E6%88%90%E3%81%99%E3%82%8BReact%E3%82%A2%E3%83%97%E3%83%AA%E3%81%AF%E3%81%93%E3%81%AEEC2%E3%81%AB%E3%82%AF%E3%83%AD%E3%83%BC%E3%83%B3%E3%81%97%E3%81%BE%E3%81%99%E3%80%82%20%E6%A4%9C%E7%B4%A2%E7%AA%93%E3%81%A7EC2%E3%82%92%E6%A4%9C%E7%B4%A2%E3%81%97%E3%81%BE%E3%81%99%E3%80%82%20%E3%82%A4%E3%83%B3%E3%82%B9%E3%82%BF%E3%83%B3%E3%82%B9%E3%82%92%E8%B5%B7%E5%8B%95%E3%81%97%E3%81%BE%E3%81%99%E3%80%82,%E3%83%9E%E3%82%B7%E3%83%B3%E3%82%A4%E3%83%A1%E3%83%BC%E3%82%B8%E3%81%AFAmazon%20Linux%202%20AMI%E3%82%92%E9%81%B8%E6%8A%9E%E3%80%82%20%E3%82%A4%E3%83%B3%E3%82%B9%E3%82%BF%E3%83%B3%E3%82%B9%E3%82%BF%E3%82%A4%E3%83%97%E3%81%AFt2.micro%E3%82%92%E9%81%B8%E6%8A%9E%E3%80%82)



# React + Typescript な環境を構築する

### Reactのプロジェクトを作成
```bash
npx create-react-app {プロジェクト名} --template typescript
```
（例）
```bash
npx create-react-app react-sample --template typescript
```

### Tailwind css 追加
```bash
cd react-sample
npm install -D tailwindcss postcss autoprefixer
npx tailwindcss init -p
```

- tailwind.config.js
```json
/** @type {import('tailwindcss').Config} */
module.exports = {
  content: [
    "./src/**/*.{js,jsx,ts,tsx}",
  ],
  theme: {
    extend: {},
  },
  plugins: [],
}
```

- ./src/index.css
```css
@tailwind base;
@tailwind components;
@tailwind utilities;
```


## React Routerの設定
[参考](https://qiita.com/suisui654/items/1b89446e03991c7c2c3d)
[参考](https://qiita.com/MasakiFukunishi/items/861e21877d5333768847)

```bash
npm install -g yarn
yarn init
yarn add react-router-dom
```

Form.tsx
```js
import React from 'react';
import logo from './logo.svg';
import './App.css';

function Form() {
  return (
    <div className="App">
      <header className="App-header">
        <h1>
            Form
        </h1>
      </header>
    </div>
  );
}

export default Form;

```


index.tsx
```jsx
import React from 'react';
import ReactDOM from 'react-dom/client';
import './index.css';
import App from './App';
import Form from './Form'; // 追加
import reportWebVitals from './reportWebVitals';
import { Routes, Route, BrowserRouter } from "react-router-dom"; // 追加

const root = ReactDOM.createRoot(
  document.getElementById('root') as HTMLElement
);
root.render(
  <React.StrictMode>
    <BrowserRouter>
      <Routes>
        <Route path="/" element={<App/>} />
        <Route path="/form" element={<Form/>} />
      </Routes>
    </BrowserRouter>
  </React.StrictMode>,
);

// If you want to start measuring performance in your app, pass a function
// to log results (for example: reportWebVitals(console.log))
// or send to an analytics endpoint. Learn more: https://bit.ly/CRA-vitals
reportWebVitals();

```

App.tsx
```js
import React from 'react';
import logo from './logo.svg';
import './App.css';
import { Link } from "react-router-dom" // 追加

function App() {
  return (
    <div className="App">
      <header className="App-header">
        <img src={logo} className="App-logo" alt="logo" />
        <Link className='' to="/form">Formへ</Link>
      </header>
    </div>
  );
}

export default App;

```


サーバ起動
```
yarn s
```


## reactでSSRしてみた（XAMMP）
package.json("name"と同一のインデントに以下を追記)
```
"homepage": "http://localhost/react/",
```
publicフォルダに「.htaccess」を追加
```
Options -MultiViews
RewriteEngine On
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^ index.html [QSA,L]
```

以下のコマンドで生成されるbuildファイルの中身を C:\xampp\htdocs\react に入れる
```
npm run build
```

`http://localhost/react/`にアクセス