React・まず動かしてみる

ViteとTailwindで環境をつくる

npm create viteでReactのひな形を作り、開発サーバーを立ち上げ、Tailwind CSSをつなぐところまで。作られたファイルが何をしているのかを1つずつ確かめて、余計なものを掃除した状態から始めます。

ここから手を動かします。Reactが動く環境を作って、Tailwindをつなぐところまでを一気にやります。

読むだけの回を重ねるより、自分で打って確かめられる状態を先に作ったほうが、このあとの回が何倍も速く進みます。

npmnpmってなに?——npm installは何をしている?npmのコマンドに不安がある人は、先にこの1本を読んでおくと迷いません

①プロジェクトのひな形を作る

作業したいフォルダでターミナルを開いて、次のコマンドを打ちます。

npm create vite@latest

対話式に質問されるので、こう答えます。

質問答え
Project nameshima-zukan
Select a frameworkReact
Select a variantJavaScript

Select a variantにはTypeScriptなど似た選択肢が並びます。ここではJavaScriptを選びます。Reactの間違いと型の間違いが混ざると切り分けがむずかしくなるので、まずReactだけに集中し、後半の章でプロジェクトごとTypeScriptに移行します(実務でもよくある順番です)。

②中に入って、動かしてみる

cd shima-zukan
npm install
npm run dev

npm installpackage.jsonに書かれた道具(Reactの本体やVite)がダウンロードされ、npm run dev開発サーバーが立ち上がります。ターミナルにこう出ます。

  VITE v8.2.0  ready in 537 ms

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

表示されたhttp://localhost:5173/をブラウザで開いてください。

Viteの初期画面。中央にViteとReactのロゴが重なったイラスト、「Get started」という見出し、「Count is 0」というボタンが並んでいる
Viteが作ったサンプル画面。この時点でもうReactが動いています(ボタンを押すと数が増えます)

このサーバーは止めるまで動きっぱなしです。ファイルを保存すると自動で画面に反映されます(保存した瞬間に切りかわるので、リロードは要りません)。止めるときはターミナルでCtrl + Cです。

③何が作られたのか

フォルダの中はこうなっています。

shima-zukan/
├── node_modules/       ← 入れた道具の置き場(触らない)
├── public/             ← そのまま公開されるファイル
├── src/                ← ここに自分のコードを書く
│   ├── assets/
│   ├── App.css
│   ├── App.jsx
│   ├── index.css
│   └── main.jsx
├── .gitignore
├── .oxlintrc.json
├── index.html
├── package.json
├── package-lock.json
├── README.md
└── vite.config.js

多く見えますが、最初に意味を知っておくべきなのは3つだけです。

index.html——入口

<body>
  <div id="root"></div>
  <script type="module" src="/src/main.jsx"></script>
</body>

<div id="root">からっぽの箱です。ページの中身はここにReactが流しこみます。HTMLを直接書き足す場所ではありません。

src/main.jsx——つなぎこみ

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

createRoot(document.getElementById('root')).render(
  <StrictMode>
    <App />
  </StrictMode>,
)

rootの箱にAppを描いて」という指示です。このファイルはほとんど触りません。

<StrictMode>は開発中だけ働く見張り役で、あやしい書き方を見つけると警告してくれます(そのために処理をわざと2回実行するので、後の回で「なぜか2回動く」という現象に出会います)。

src/App.jsx——ここを書く

画面の中身です。このコースで書くのは、ほぼこのファイルとその仲間になります。

④余計なものを掃除する

ひな形にはサンプルの飾りが入っています。先に消して、まっさらな状態にします。デモの残骸の上に書き足すと、どれが自分のコードか分からなくなるからです。

消すのは次の2つです。

  • src/App.css(サンプル用のCSS。Tailwindを使うので不要)
  • src/assets/フォルダ(ロゴ画像。使いません)

そしてsrc/App.jsxを、この形まで削ります。

function App() {
  return <h1>しまちゃんのことりずかん</h1>
}

export default App

src/index.css中身を全部消して空にしておきます(次でTailwindの1行を書きます)。

⑤Tailwind CSSをつなぐ

このコースの見た目はTailwindで作ります。手順は3ステップです。

入れる

npm install --save-exact tailwindcss @tailwindcss/vite

tailwindcssが本体、@tailwindcss/viteViteに組みこむためのプラグインです。

npmnpmの怖い話——Shai-Hulud事件から学ぶ身の守り方--save-exactでバージョンを固定する理由。ひな形の^のままにしない習慣について

Viteに教える

import { defineConfig } from 'vite'
import react from '@vitejs/plugin-react'
import tailwindcss from '@tailwindcss/vite'

export default defineConfig({
  plugins: [react(), tailwindcss()],
})

pluginsの配列にtailwindcss()を足すだけです。

CSSから読みこむ

@import "tailwindcss";

この1行だけです。src/index.cssmain.jsxがすでに読みこんでいるので、つなぎこみの作業は要りません。

⑥効いているか確かめる

App.jsxにTailwindのクラスを足して、効いているかを見ます。

function App() {
  return (
    <h1 className="p-8 text-3xl font-bold text-sky-600">しまちゃんのことりずかん</h1>
  )
}

export default App

classではなくclassNameです。HTMLとの違いはここから始まります(理由は次の回で扱います)。

白い画面の左上に「しまちゃんのことりずかん」という青くて大きな太字の見出しが表示されている
文字が大きく・太く・青くなっていれば成功です。ここがスタート地点

このレッスンのまとめ

  1. npm create vite@latestでひな形を作る。フレームワークはReact、種類はJavaScript
  2. npm run devで開発サーバー。保存すると即反映、止めるのはCtrl + C
  3. index.htmlからっぽの<div id="root">にReactが中身を流しこむ
  4. ひな形の飾り(App.cssassets/)は先に消してまっさらにする
  5. Tailwindは入れる・vite.config.jsに足す・@import "tailwindcss";の3ステップ
  6. HTMLのclassは、ReactではclassName

次は、いま書いたclassNameのようなJSXの決まりごとを読み解きます。HTMLとよく似ているのに少しだけ違う——その「少しだけ」を先に片づけておきます。

やってみよう:ことりずかんの土台を作る

このコースで育てていくプロジェクトを、ここで作ってしまいます。

  1. ターミナルでnpm create vite@latestを実行し、名前をshima-zukan、React、JavaScriptを選ぶ
  2. cd shima-zukannpm installnpm run devでサーバーを起動する
  3. src/App.csssrc/assets/フォルダを削除する
  4. npm install --save-exact tailwindcss @tailwindcss/viteでTailwindを入れる
  5. vite.config.jstailwindcss()を足し、src/index.css@import "tailwindcss";の1行にする
  6. src/App.jsxを上の形に書きかえて、青い見出しが出るのを確認する

作業が終わると、フォルダはこうなっています。

shima-zukan/
├── node_modules/
├── public/
├── src/
│   ├── App.jsx        ← 中身を書きかえた
│   ├── index.css      ← 1行にした
│   └── main.jsx
├── .gitignore
├── .oxlintrc.json
├── index.html
├── package.json
├── package-lock.json
├── README.md
└── vite.config.js     ← tailwindcss() を足した

src/の中が3ファイルだけになっていれば、掃除は成功です。開発サーバーは次の回でも使うので、動かしたままにしておいてください。

よくある質問

Reactを始めるのにViteは必要ですか?
JSXを使うなら変換の仕組みが必要で、Viteはそれをいちばん手軽に用意できる道具です。CDNのスクリプトを読みこむ方法もありますが、本番では使わない書き方になるので、最初からViteで始めるほうが遠回りになりません。
テンプレートはJavaScriptとTypeScriptどちらを選べばいいですか?
このコースはJavaScript(react)を選びます。TypeScriptを同時に覚えると、型のエラーなのかReactの間違いなのか切り分けられなくなるためです。Reactに慣れたあと、後半の章でプロジェクトごとTypeScriptに移行します。
npm run devで表示されるURLは毎回同じですか?
既定ではlocalhostの5173番ポートが使われますが、そのポートがすでに使われていると5174、5175…とずれます。ターミナルに表示されたURLを見るのが確実です。
Tailwindの設定ファイル(tailwind.config.js)は作らないのですか?
今の版では必須ではありません。ViteのプラグインとCSSの@import 1行で動きます。色や余白を足したいときはCSSの中に@themeブロックを書きます。