「モダンなWebアプリを作ってみたい!」「Reactってよく聞くけど、どうやって始めればいいの?」
そんなプログラミング初心者の方に向けて、今回はReact(リアクト)の基本から、自分のPCで初期画面を立ち上げるまでを、わかりやすく解説します!
プロジェクト全体のフォルダ構成や各ファイルの役割を詳しく解説します。
1. Reactとは?
まずは「Reactとは何か」をイメージで理解しましょう。
Reactは、Facebook(現Meta社)が開発した「Webサイトの見た目(UI)を効率よく作るためのJavaScriptライブラリ」です。
Reactの最大の特徴は、画面を「部品(コンポーネント)」の組み合わせで作るという考え方です。
- パズルを組み立てる感覚: 「ヘッダー」「ボタン」「入力フォーム」などを別々の部品として作り、それを組み合わせて1つのページを完成させます。
- 再利用ができる: 一度作ったの部品は、他のページでも何回でも使い回せます。
- 画面がサクサク動く: 開発中はコードを更新したら、ページ全体をリロード(再読み込み)することなく、変わった部分だけを一瞬で書き換えるため、非常に快適な操作感になります。
2. 必要な開発環境
Node.js(ノード・ジェイエス)
Reactのプロジェクトを作ったり、開発をサポートしてくれるツール群を動かすために必須のシステムです。
Reactを始めるには、事前にインストールする必要があります。
🔗Node.js 公式サイトから「LTS(推奨版)」をダウンロードしてインストールしてください。
【推奨バージョン】 現在、本番環境や個人開発で最も推奨される Active LTS(長期サポート版)は Node.js v24系 です。
すでに入ってる人は以下のコマンドで確認してみてください。
node -v
# または
node --versionアップデートするには公式サイトからインストーラーをダウンロードします。
- Node.js 公式サイト にアクセスします。
- 「LTS(推奨版)」 のインストーラー(.msi)をダウンロードして実行します。
- 画面の指示通りに進めれば、古いバージョンが上書きされて最新のLTSに更新されます。
3. プロジェクト作成コマンド
準備ができたら、さっそくReactのプロジェクト(開発用フォルダ一式)を作ってみましょう。 今回は、現在最も軽快で人気のある Vite というツールを使って作成します。
ちなみにPCに事前にViteをインストールしておく必要はありません。
Node.js(npm)が勝手に最新のものをダウンロードしてきてくれます。
まずはターミナル(WindowsならPowerShellやコマンドプロンプト、Macならターミナル)を開き、プロジェクトを作りたい場所に移動(cd)して、以下のコマンドを順番に実行します。
# 1. Viteを使ってReactプロジェクトの土台を作る(「my-react-app」は好きなフォルダ名でOK)
npm create vite@latest my-react-app -- --template reactバージョンによって異なりますが、対話式でいくつか質問されますので答えていきます。
Ok to proceed? (y)
# このまま進めるので y
◆ Which linter to use?
│ ● Oxlint
│ ○ ESLint
│ ↑/↓ to navigate • Enter: confirm
# Oxlint(オックスリント)は、設定不要で動作する最新のコードチェックツールです。
初心者にも扱いやすいですので Oxlint を選択します。
◆ Install with npm and start now?
│ ● Yes / ○ No
# npmでプロジェクト生成して開発サーバーも立ち上げるので Yes以下のような内容が表示されて開発サーバーが立ち上がります。
VITE v8.1.5 ready in 600 ms
➜ Local: http://localhost:5173/
➜ Network: use --host to expose
➜ press h + enter to show helpこの状態で http://localhost:5173/ をブラウザ(Chromeなど)のアドレスバーにコピペして開いてみましょう。初期画面が表示されれば成功です。
Ctrl + C で開発サーバーを停止したあとは、プロジェクトのディレクトリで以下のコマンドを入力すれば、再び開発サーバーを立ち上げることができます。
# 作成されたフォルダに移動する
cd my-react-app
# 開発サーバー立ち上げ
npm run dev4. フォルダの中身はどうなってる?(主要ファイル解説)
無事に開発サーバー立ち上げできたら、作成した my-react-app フォルダを開いてみましょう。たくさんのファイルが自動生成されていますが、初心者が最初に覚えるべき重要ファイルは4つだけです。
主要な構造を整理しました。
- index.html アプリの「土台」となる唯一のHTMLファイルです。
この中にある <div id=”root”></div> という空っぽの箱の中に、Reactが部品をどんどん流し込んで画面を作ります。 - src/(ソースフォルダ) これからあなたがコードを書いていくメインの作業部屋です。
- main.jsx
Reactアプリの「起動スイッチ」です。「index.html の root という箱に、Reactを送り込む」という橋渡しをしています。基本的には触らなくて大丈夫です。 - App.jsx
今画面に表示されている内容が書かれている「メインコンポーネント」です。まずはこのファイルを編集してアプリを作っていきます。 - App.css / index.css
見た目を整えるためのデザイン用のスタイルシート(CSS)です。
- main.jsx
5. 初期画面のコード解説
初期画面の見た目を作っているのは、主に src/App.jsx と src/App.css と src/index.css の3つのファイルです。それぞれのファイルがどんな役割を果たしているのか、仕組みをサクッと分解して解説します。
1. 構造と中身(HTMLのような部分):src/App.jsx
画面に表示されているロゴ画像やテキストなどの「骨組み」は、すべて src/App.jsx に書かれています。コードを開いてみると、以下のような記述があるのが分かります。
import { useState } from 'react'
// Reactで「数をかぞえる」などの状態を保持・更新するための仕組み(フック)を読み込んでいます
import reactLogo from './assets/react.svg'
import viteLogo from './assets/vite.svg'
import heroImg from './assets/hero.png'
// assets フォルダにある画像ファイルをJavaScriptの変数として扱えるように取り込んでいます
import './App.css'
// この画面全体のデザイン(CSS)を適用しています
function App() {
const [count, setCount] = useState(0)
// count:現在のカウント数を入れる箱(初期値は 0)
// setCount:count の中身を増やすための「更新用スイッチ」
// useState(0):値が変わると、Reactが画面の数字を一瞬で自動書き換えしてくれる機能です
// 以下のreturn ( ... ) の中に書かれているのが、画面に表示される見た目です
// 一見HTMLに見えますが、JavaScriptの中でHTMLっぽく書けるJSXという特殊な書き方です
return (
<>
<section id="center">
<div className="hero">
<img src={heroImg} className="base" width="170" height="179" alt="" />
<img src={reactLogo} className="framework" alt="React logo" />
<img src={viteLogo} className="vite" alt="Vite logo" />
// JSXの中で波カッコを使うと、JavaScriptの変数や数字を埋め込むことができます。
</div>
<div>
<h1>Get started</h1>
<p>
Edit <code>src/App.jsx</code> and save to test <code>HMR</code>
// HMR(Hot Module Replacement)とはコードを変更して保存した瞬間に
// ブラウザをリロードしなくても画面が一瞬で更新されるViteの機能のことです
</p>
</div>
<button
type="button"
className="counter"
onClick={() => setCount((count) => count + 1)}
// ボタンが押された時(onClick)に、setCount を呼び出して count の数値を +1 しています
>
Count is {count}
// ボタンのテキストの中に現在の count の数値をリアルタイム表示しています。
</button>
</section>
<div className="ticks"></div>
<section id="next-steps">
<div id="docs">
<svg className="icon" role="presentation" aria-hidden="true">
<use href="/icons.svg#documentation-icon"></use>
// SVGの外部参照(<use href="/icons.svg#..." />)
// public/icons.svg にあるアイコン画像を共通で呼び出しています
// JavaScriptの構文と被らないよう
// ReactではHTMLの class= を className= と書くルールになっています
</svg>
<h2>Documentation</h2>
<p>Your questions, answered</p>
<ul>
<li>
<a href="https://vite.dev/" target="_blank">
<img className="logo" src={viteLogo} alt="" />
Explore Vite
</a>
</li>
<li>
<a href="https://react.dev/" target="_blank">
<img className="button-icon" src={reactLogo} alt="" />
Learn more
</a>
</li>
</ul>
</div>
<div id="social">
<svg className="icon" role="presentation" aria-hidden="true">
<use href="/icons.svg#social-icon"></use>
</svg>
<h2>Connect with us</h2>
<p>Join the Vite community</p>
<ul>
<li>
<a href="https://github.com/vitejs/vite" target="_blank">
<svg
className="button-icon"
role="presentation"
aria-hidden="true"
>
<use href="/icons.svg#github-icon"></use>
</svg>
GitHub
</a>
</li>
<li>
<a href="https://chat.vite.dev/" target="_blank">
<svg
className="button-icon"
role="presentation"
aria-hidden="true"
>
<use href="/icons.svg#discord-icon"></use>
</svg>
Discord
</a>
</li>
<li>
<a href="https://x.com/vite_js" target="_blank">
<svg
className="button-icon"
role="presentation"
aria-hidden="true"
>
<use href="/icons.svg#x-icon"></use>
</svg>
X.com
</a>
</li>
<li>
<a href="https://bsky.app/profile/vite.dev" target="_blank">
<svg
className="button-icon"
role="presentation"
aria-hidden="true"
>
<use href="/icons.svg#bluesky-icon"></use>
</svg>
Bluesky
</a>
</li>
</ul>
</div>
</section>
<div className="ticks"></div>
<section id="spacer"></section>
</>
// 最初のreturn の直後にある空っぽのタグ <> と </> はReact Fragmentと呼ばれます
// Reactでは「1つのコンポーネントは必ず1つの大きな親要素で囲まなければならない」という
// ルールがあるため、余計な <div> タグを増やさずに全体を束ねる役割をしています。
)
}
export default App2. 見た目を作る装飾ファイル:src/index.css と src/App.css
src/index.css と src/App.css の違いは、一言でいうと「CSSが影響を与えるスコープ(適用範囲)の違い」です。
それぞれの役割と使い分けを分かりやすく解説します。
一目でわかる比較表
| 項目 | src/index.css | src/App.css |
| 役割 | アプリ全体のグローバル(共通)スタイル | App.jsx 専用のスタイル |
| 主な記述内容 | 画面全体の背景色、フォント設定、リセットCSSなど | App.jsx 内のボタン、レイアウト、独自の演出など |
| 影響範囲 | サイト全体のすべての要素 | 主に App.jsx 内のコンポーネント(※) |
※CSSの仕様上、App.css も裏では全ページに適用されますが、設計上の意図として「App コンポーネント用の装飾」として切り分けられています。
1. src/index.css(全体共通のベースデザイン)
index.css は、Webアプリ全体に適用したい「一番土台となるルール」を書き込む場所です。
どんなことが書かれている?
- ページ全体の背景色(body { background-color: … })
- アプリ全体で使うフォントの指定
- ブラウザごとの余白の違いを打ち消す「リセットCSS」
- ダークモード/ライトモードの共通カラー定義
どこで読み込まれている?
あまり触らない src/main.jsx の一番上で読み込まれています。
// src/main.jsx
import React from 'react'
import ReactDOM from 'react-dom/client'
import App from './App.jsx'
import './index.css' // ← ここでアプリ全体に適用!2. src/App.css(Appコンポーネント専用デザイン)
App.css は、主役である App.jsx というコンポーネントの中身を装飾するためのCSS です。
どんなことが書かれている?
- カウントボタンの形やホバー時の動き(.counter { … })
- ロゴを配置するレイアウト(.hero { … })
- ロゴをくるくる回転させるアニメーション(@keyframes logo-spin)
どこで読み込まれている?
src/App.jsx のファイル内で直接読み込まれています。
// src/App.jsx
import { useState } from 'react'
import './App.css' // ← App.jsx 内のパーツ用のCSSどう使い分ければいい?
自分で新しいパーツ(コンポーネント)を作っていくときは、以下のルールで分けるとコードが整理しやすくなります。
- 画面全体に関わること(フォント、画面全体の背景色、リンクの下線消しなど)は index.css に書く
- その画面や特定のボタンだけに効かせたいデザイン は App.css(または新しく作る Header.css や Button.css などの個別CSS)に書く
将来的に Tailwind CSS などのデザインライブラリを入れる場合も、index.css にセットアップのコードを書き込むのが一般的です。
6. まとめ&次のステップ
お疲れ様でした。これで無事にReactのスタートラインに立つことができました。
- Reactは 部品(コンポーネント)を組み合わせて作る
- Viteを使うと 一瞬で開発環境が作れる
- App.jsx が 画面のメインのパーツ、index.css app.css が画面の装飾パーツ
次回は、この初期画面の文字を書き換えて、実際に自分だけのコンポーネントを作っていく方法を解説します。


コメント