Chapter 00

環境構築

Reactの開発環境をゼロから整えて、最初の画面を表示するまでの手順を学びます。

20 min

このチャプターで学ぶこと

  • Node.jsとnpmのインストールを確認できる
  • Viteを使ってReactプロジェクトを作成できる
  • プロジェクトの構造を理解できる
  • 開発サーバーを起動してブラウザで確認できる
  • App.jsxを編集して画面を変更できる

環境構築

Reactを始める前に、まず開発環境を整えましょう。Laravelを使ったことがあれば、composer create-project でプロジェクトを作った経験があるはずです。Reactでも似たような流れで、コマンド一発でプロジェクトの雛形が作れます。

Node.jsのインストール確認

ReactはNode.jsの上で動作するツールチェーンを使います。まずはNode.jsが入っているか確認しましょう。

node --version
npm --version

それぞれバージョン番号が表示されればOKです。Node.js 18以上を推奨します。

📝 メモ

Node.jsが入っていない場合は https://nodejs.org から LTS版 をインストールしてください。「LTS」は Long Term Support の略で、安定版という意味です。

Viteでプロジェクトを作成する

ReactプロジェクトのセットアップにはViteを使います。ViteはLaravelのViteインテグレーション(vite.config.js)でも使われているビルドツールなので、名前には馴染みがあるかもしれません。

ターミナルで作業したいディレクトリに移動して、以下のコマンドを実行してください。

npm create vite@latest my-react-app -- --template react

コマンドの意味を分解するとこうなります:

実行すると次のような出力が表示されます:

Scaffolding project in ./my-react-app...

Done. Now run:

  cd my-react-app
  npm install
  npm run dev

指示どおりにコマンドを実行しましょう。

cd my-react-app
npm install
npm run dev

npm install はLaravelでいう composer install に相当します。package.json に書かれた依存パッケージをすべてインストールします。

npm run dev を実行すると開発サーバーが起動します。

  VITE v5.x.x  ready in 300 ms

  Local:   http://localhost:5173/
  Network: use --host to expose

ブラウザで http://localhost:5173 を開いてみてください。

localhost:5173
Viteのウェルカム画面。ReactとViteのロゴが表示されている
開発サーバーが起動した直後の画面。ReactとViteのロゴが動いています
💡 ヒント

開発サーバーは Ctrl + C で停止できます。ファイルを編集すると画面が自動でリロードされる ホットリロード 機能がついているので、いちいちブラウザを更新する必要はありません。

プロジェクト構造を理解する

作成されたフォルダの中身を見てみましょう。

my-react-app/
├── public/          # 静的ファイル(favicon など)
├── src/             # ここにソースコードを書く
│   ├── assets/      # 画像などのアセット
│   ├── App.css      # App コンポーネントのスタイル
│   ├── App.jsx      # メインのコンポーネント ← まずここを触る
│   ├── index.css    # グローバルスタイル
│   └── main.jsx     # アプリのエントリーポイント
├── index.html       # HTMLのテンプレート
├── package.json     # 依存関係の定義(composer.json に相当)
└── vite.config.js   # Viteの設定

LaravelのMVCと比べると感覚がつかみやすいかもしれません。index.html が唯一のHTMLファイルで、そこに main.jsx が読み込まれ、App.jsx がレンダリングされるという流れです。

main.jsx を見てみる

// src/main.jsx
import { StrictMode } from 'react'
import { createRoot } from 'react-dom/client'
import './index.css'
import App from './App.jsx'

// id="root" の要素にReactアプリをマウントする
createRoot(document.getElementById('root')).render(
  <StrictMode>
    <App />
  </StrictMode>,
)

index.html を開くと <div id="root"></div> という空のdivがあります。Reactはここを起点にして、JavaScriptでHTMLを動的に生成します。これをSPA(シングルページアプリケーション)と呼びます。

📝 メモ

StrictMode は開発中だけ有効になる特別なコンポーネントです。潜在的な問題を早期に発見するために、コンポーネントを意図的に2回レンダリングします。本番ビルドでは何も影響しないので、消さずにそのままにしておきましょう。

App.jsx を見てみる

// src/App.jsx
import { useState } from 'react'
import reactLogo from './assets/react.svg'
import viteLogo from '/vite.svg'
import './App.css'

function App() {
  const [count, setCount] = useState(0)

  return (
    <>
      <div>
        <a href="https://vite.dev" target="_blank">
          <img src={viteLogo} className="logo" alt="Vite logo" />
        </a>
        <a href="https://react.dev" target="_blank">
          <img src={reactLogo} className="logo react" alt="React logo" />
        </a>
      </div>
      <h1>Vite + React</h1>
      <div className="card">
        <button onClick={() => setCount((count) => count + 1)}>
          count is {count}
        </button>
        <p>
          Edit <code>src/App.jsx</code> and save to test HMR
        </p>
      </div>
      <p className="read-the-docs">
        Click on the Vite and React logos to learn more
      </p>
    </>
  )
}

export default App

JavaScriptの関数の中にHTMLのようなコードが書かれています。これが JSX です。次のチャプターで詳しく説明しますが、まずは「関数がHTMLを返している」という大まかなイメージをつかんでおけば十分です。

はじめてのApp.jsx編集

では実際に画面を変えてみましょう。src/App.jsx を開いて、内容をすべて削除し、次のコードに書き換えてみてください。

// src/App.jsx
function App() {
  return (
    <div>
      <h1>はじめてのReact</h1>
      <p>環境構築ができました!</p>
    </div>
  )
}

export default App

ファイルを保存すると、ブラウザが自動でリロードされて画面が変わるはずです。これがホットリロードの威力です。

⚠️ 注意

export default App の行を忘れずに!これがないと他のファイルからこのコンポーネントを読み込めなくなります。Laravelのコントローラーで return view(...) を書き忘れるのに似たミスです。

✍ やってみよう

src/App.jsx をさらに編集して、自分の名前を表示してみましょう。例えばこんな感じです。

function App() {
  return (
    <div>
      <h1>こんにちは、山田太郎です</h1>
      <p>Reactの勉強を始めました!</p>
    </div>
  )
}

export default App

保存すると即座に画面が更新されることを体感してください。このフィードバックループの速さがReact開発の気持ちよさです。

まとめ

お疲れさまでした!このチャプターでは:

次のチャプターでは、このHTMLっぽいコード(JSX)の仕組みをしっかり理解していきます。