フロントエンドツールチェーン完全ガイド
Node.js / npm / TypeScript / Vite / React —— 5つの道具の役割と関係性
1. 5つの道具と役割一覧
| 名前 | 種類 | 一言で言うと | いつ使う |
|---|---|---|---|
| Node.js | 実行環境 | JavaScript をブラウザの外(PC上)で動かす土台。npm コマンドが付属する |
開発・ビルド中 |
| npm | パッケージ管理 | Vite・React・TypeScript などを取り寄せてインストールする「宅配係」 | セットアップ・追加時 |
| TypeScript | 言語 | JavaScript に型を足した言語。最終的にブラウザが読める JavaScript に変換される | コードを書くとき |
| React | UIライブラリ | 画面を「部品(コンポーネント)」で組み立てる道具。TypeScript で書く | コードを書くとき |
| Vite | ビルド/開発ツール | TypeScript → JavaScript 変換、バンドル、高速な開発サーバーを担う | 開発・ビルド中 |
2. 層構造で見る関係図
下が「土台」、上に行くほど「あなたが触るもの」です。
3. JavaScript と TypeScript の違い
JavaScript (.js)
// 型がないので実行時まで気づかない
function add(a, b) {
return a + b;
}
add(1, "hello");
// → "1hello" (バグ、エラーにならない)
TypeScript (.ts / .tsx)
// 型を書くとコードを書く瞬間に検出
function add(a: number, b: number): number {
return a + b;
}
add(1, "hello");
// ^^^^ エラー! string は number に渡せない
TypeScript はブラウザでは動かない
ブラウザが理解できるのは JavaScript だけです。TypeScript は開発中に使う「型付き言語」で、最終的には Vite が JavaScript に変換(トランスパイル)します。型情報は変換時に除去され、ランタイム(実行中)には残りません。
4. 核心:変換フロー図
「なぜこんなに道具が多いのか」の答えがこの図に集約されています。
ポイント:開発時と実行時で「動いているもの」が違う
| フェーズ | 動いているもの | 目的 |
|---|---|---|
開発中(npm run dev) | Node.js + Vite | 変換しながらブラウザへ即反映 |
ビルド(npm run build) | Node.js + Vite | 最適化した静的 JS を生成 |
| 本番稼働中 | ブラウザのみ(変換後 JS) | Node.js も Vite も存在しない |
5. React ——コンポーネントと状態
React の核心は2つのアイデアです。
コンポーネント(部品)
画面を再利用できる部品に分けて組み立てます。部品は関数として書きます。
// Header.tsx(部品の例)
export function Header() {
return (
<header>
<h1>健康管理アプリ</h1>
</header>
);
}
// App.tsx で組み合わせる
export function App() {
return (
<div>
<Header /> {/* 部品を貼る */}
<RecordForm />
</div>
);
}
状態(state)と自動再描画
useState で状態を持つと、値が変わると自動で画面が更新されます。
import { useState } from 'react';
function HeadacheSlider() {
// level が変わると <label> が自動で更新
const [level, setLevel] =
useState<number>(0);
return (
<label>
頭痛レベル: <strong>{level}</strong>
<input
type="range" min={0} max={5}
value={level}
onChange={e =>
setLevel(Number(e.target.value))}
/>
</label>
);
}
JSX / TSX とは何か
上のコードの <label> や <input> は HTML に見えますが、実際は JavaScript(TypeScript)の中に書いた特殊な記法です。これを JSX(JavaScript XML) と言い、TypeScript で書くと TSX(.tsx ファイル)になります。Vite がこれを通常の JavaScript に変換します。
6. Vite ——開発サーバーとビルド
Vite が旧来のツール(webpack)より高速な理由は、開発中は各ファイルをそのまま ESM として配信し、必要なファイルだけを変換するからです。全体をまとめてビルドしてからブラウザに送る方式より劇的に速くなります。
7. npm とパッケージ管理
package.json — プロジェクトの設計図
{
"name": "my-app",
"scripts": {
"dev": "vite", // npm run dev で開発サーバー起動
"build": "tsc && vite build", // npm run build で本番ビルド
"preview": "vite preview" // ビルド後のプレビュー
},
"dependencies": {
"react": "^18.3.1", // 本番にも必要なライブラリ
"react-dom": "^18.3.1"
},
"devDependencies": {
"@types/react": "^18.3.1", // 開発時だけ必要(型定義)
"typescript": "^5.5.3",
"vite": "^5.4.2"
}
}
node_modules/ フォルダに全パッケージが入ります(巨大になるため .gitignore に追加します)。package-lock.json がバージョンを固定し、npm install を実行すれば誰でも同じ環境を再現できます。
8. ライフサイクル(手順の流れ)
-
Node.js をインストール(nodejs.org から)
npmコマンドが使えるようになる -
Vite で雛形を作成
npm create vite@latest my-app -- --template react-ts
React + TypeScript のプロジェクト一式が生成される -
パッケージをインストール
cd my-app && npm install
React / Vite / TypeScript がnode_modules/に入る -
開発サーバーを起動
npm run dev
localhost:5173が開く。.tsxを保存するたびブラウザが即座に更新(HMR) -
コードを書く
React コンポーネント(.tsx)を作成・編集する。TypeScript が誤りをリアルタイムで教えてくれる -
本番ビルド
npm run build
全 .tsx が最適化 JavaScript に変換されdist/に出力される -
配信
dist/の静的ファイルを任意のサーバー(Nginx / FastAPI / Cloudflare Pages など)で配信するだけ。Node.js は不要になる
9. 実プロジェクト構成例(Python バックエンド + React フロントエンド)
健康管理アプリ health-moniter のような「Python バックエンド + TypeScript フロントエンド」の典型的な構成です。
ディレクトリ構成
health-moniter/
├── frontend/ # Node.js + Vite + React + TypeScript
│ ├── package.json
│ ├── vite.config.ts
│ ├── tsconfig.json
│ └── src/
│ ├── App.tsx
│ ├── components/
│ │ ├── RecordForm.tsx # 頭痛・背中スライダー
│ │ └── Dashboard.tsx # 相関グラフ
│ └── main.tsx
│
├── backend/ # Python + FastAPI(uv 管理)
│ ├── pyproject.toml
│ └── app/
│ ├── main.py # FastAPI エントリ + 静的ファイル配信
│ ├── weather.py # Open-Meteo クライアント
│ └── analysis.py # 相関解析(pandas/scipy)
│
└── data/
└── health.db # SQLite(.gitignore)
開発中は npm run dev(Vite, port 5173)と uv run uvicorn app.main:app(FastAPI, port 8000)を両方起動します。Vite の設定で /api/* を port 8000 にプロキシすれば、ブラウザからは同一オリジンとして動きます。
まとめ
| 疑問 | 答え |
|---|---|
| Node.js は本番サーバーとして使う? | このプロジェクトでは No。開発とビルドだけに使う |
| TypeScript はブラウザで動く? | 直接は動かない。Vite が JS に変換する |
| React がないと何が困る? | 状態管理と DOM 更新を手書きする必要がある |
| Vite の代わりに何がある? | webpack(古参、設定複雑)、esbuild(超高速だが機能少) |
| npm の代わりは? | pnpm(高速・省ディスク)、yarn(yarn v4+) |