<?xml version="1.0" encoding="UTF-8"?><rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>フロントエンド</title>
	<atom:link href="https://techgrowup.net/tag/%e3%83%95%e3%83%ad%e3%83%b3%e3%83%88%e3%82%a8%e3%83%b3%e3%83%89/feed/" rel="self" type="application/rss+xml" />
	<link>https://techgrowup.net</link>
	<description>エンジニアを強くする</description>
	<lastBuildDate>Sun, 27 Apr 2025 17:00:00 +0000</lastBuildDate>
	<language>ja</language>
	<sy:updatePeriod>
	hourly	</sy:updatePeriod>
	<sy:updateFrequency>
	1	</sy:updateFrequency>
	<generator>https://wordpress.org/?v=7.0</generator>

<image>
	<url>https://techgrowup.net/wp-content/uploads/2021/05/hp-icon-150x150.png</url>
	<title>フロントエンド</title>
	<link>https://techgrowup.net</link>
	<width>32</width>
	<height>32</height>
</image> 
	<item>
		<title>Vite超入門──“爆速”開発を実現する次世代フロントエンドツールチェーン徹底ガイド</title>
		<link>https://techgrowup.net/react-vite/</link>
					<comments>https://techgrowup.net/react-vite/?noamp=mobile#respond</comments>
		
		<dc:creator><![CDATA[techgrowup]]></dc:creator>
		<pubDate>Sun, 27 Apr 2025 17:00:00 +0000</pubDate>
				<category><![CDATA[React]]></category>
		<category><![CDATA[プログラミング]]></category>
		<category><![CDATA[ESBuild]]></category>
		<category><![CDATA[HMR]]></category>
		<category><![CDATA[Rollup]]></category>
		<category><![CDATA[Vite]]></category>
		<category><![CDATA[Vitest]]></category>
		<category><![CDATA[Vue]]></category>
		<category><![CDATA[ビルドツール]]></category>
		<category><![CDATA[フロントエンド]]></category>
		<guid isPermaLink="false">https://techgrowup.net/?p=2814</guid>

					<description><![CDATA[Viteとは何者か Vite（ヴィート）は、Vue の作者 Evan You が開発したフロントエンド開発ツールです。「速さ（vite=仏語の“高速”）」の名のとおり、従来のバンドラに比べ初回起動やコード更新が桁違いに速 [&#8230;]]]></description>
										<content:encoded><![CDATA[
<h2 class="wp-block-heading">Viteとは何者か</h2>



<p class="wp-block-paragraph">Vite（ヴィート）は、Vue の作者 Evan You が開発したフロントエンド開発ツールです。「速さ（vite=仏語の“高速”）」の名のとおり、従来のバンドラに比べ初回起動やコード更新が桁違いに速いのが特徴です。その秘密は ES モジュールを生かした<strong>オンデマンド変換</strong>と、本番ビルド時に <strong>Rollup</strong> を用いる二段構えのアーキテクチャにあります。</p>



<h2 class="wp-block-heading">旧世代ツールと何が違う？</h2>



<figure class="wp-block-table"><div class="scrollable-table"><table class="has-fixed-layout"><thead><tr><th>項目</th><th>Webpack</th><th>Vite</th></tr></thead><tbody><tr><td>開発サーバ起動</td><td>数十秒〜数分</td><td>1〜2 秒</td></tr><tr><td>HMR更新</td><td>0.5 秒以上</td><td>30〜50 ms</td></tr><tr><td>設定ファイル</td><td>必須</td><td>ゼロコンフィグでOK</td></tr><tr><td>バックエンド</td><td>Node.js + Webpack</td><td>Node.js + esbuild + Rollup</td></tr></tbody></table></div></figure>



<p class="wp-block-paragraph">Vite は依存ライブラリを esbuild でプリバンドルし、ソースコードはリクエストされた瞬間だけトランスパイルするため、「保存→ブラウザ反映」の待ち時間がほぼ消えます。</p>



<h2 class="wp-block-heading">インストールとプロジェクト初期化</h2>



<div class="wp-block-kevinbatdorf-code-block-pro" data-code-block-pro-font-family="Code-Pro-JetBrains-Mono" style="font-size:.875rem;font-family:Code-Pro-JetBrains-Mono,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;line-height:1.25rem;--cbp-tab-width:2;tab-size:var(--cbp-tab-width, 2)"><span style="display:block;padding:16px 0 0 16px;margin-bottom:-1px;width:100%;text-align:left;background-color:#1E1E1E"><svg xmlns="http://www.w3.org/2000/svg" width="54" height="14" viewBox="0 0 54 14"><g fill="none" fill-rule="evenodd" transform="translate(1 1)"><circle cx="6" cy="6" r="6" fill="#FF5F56" stroke="#E0443E" stroke-width=".5"></circle><circle cx="26" cy="6" r="6" fill="#FFBD2E" stroke="#DEA123" stroke-width=".5"></circle><circle cx="46" cy="6" r="6" fill="#27C93F" stroke="#1AAB29" stroke-width=".5"></circle></g></svg></span><span role="button" tabindex="0" data-code="npm create vite@latest my-vite-app
cd my-vite-app
npm install
npm run dev   # http://localhost:5173" style="color:#D4D4D4;display:none" aria-label="Copy" class="code-block-pro-copy-button"><svg xmlns="http://www.w3.org/2000/svg" style="width:24px;height:24px" fill="none" viewBox="0 0 24 24" stroke="currentColor" stroke-width="2"><path class="with-check" stroke-linecap="round" stroke-linejoin="round" d="M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2m-6 9l2 2 4-4"></path><path class="without-check" stroke-linecap="round" stroke-linejoin="round" d="M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2"></path></svg></span><pre class="shiki dark-plus" style="background-color: #1E1E1E" tabindex="0"><code><span class="line"><span style="color: #DCDCAA">npm</span><span style="color: #D4D4D4"> </span><span style="color: #CE9178">create</span><span style="color: #D4D4D4"> </span><span style="color: #CE9178">vite@latest</span><span style="color: #D4D4D4"> </span><span style="color: #CE9178">my-vite-app</span></span>
<span class="line"><span style="color: #DCDCAA">cd</span><span style="color: #D4D4D4"> </span><span style="color: #CE9178">my-vite-app</span></span>
<span class="line"><span style="color: #DCDCAA">npm</span><span style="color: #D4D4D4"> </span><span style="color: #CE9178">install</span></span>
<span class="line"><span style="color: #DCDCAA">npm</span><span style="color: #D4D4D4"> </span><span style="color: #CE9178">run</span><span style="color: #D4D4D4"> </span><span style="color: #CE9178">dev</span><span style="color: #D4D4D4">   </span><span style="color: #6A9955"># http://localhost:5173</span></span></code></pre></div>



<p class="wp-block-paragraph">対話プロンプトで <strong>Vue、React、Svelte、Solid、Lit</strong> など好きなテンプレートを選べます。後からライブラリを追加しても問題ありません。</p>



<h2 class="wp-block-heading">ディレクトリ構成の基本</h2>



<div class="wp-block-kevinbatdorf-code-block-pro" data-code-block-pro-font-family="Code-Pro-JetBrains-Mono" style="font-size:.875rem;font-family:Code-Pro-JetBrains-Mono,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;line-height:1.25rem;--cbp-tab-width:2;tab-size:var(--cbp-tab-width, 2)"><span style="display:block;padding:16px 0 0 16px;margin-bottom:-1px;width:100%;text-align:left;background-color:#1E1E1E"><svg xmlns="http://www.w3.org/2000/svg" width="54" height="14" viewBox="0 0 54 14"><g fill="none" fill-rule="evenodd" transform="translate(1 1)"><circle cx="6" cy="6" r="6" fill="#FF5F56" stroke="#E0443E" stroke-width=".5"></circle><circle cx="26" cy="6" r="6" fill="#FFBD2E" stroke="#DEA123" stroke-width=".5"></circle><circle cx="46" cy="6" r="6" fill="#27C93F" stroke="#1AAB29" stroke-width=".5"></circle></g></svg></span><span role="button" tabindex="0" data-code="my-vite-app/
├─ index.html       ← エントリーポイント
├─ vite.config.js   ← 必要になったら作成
├─ src/
│  ├─ main.js
│  └─ App.vue / App.jsx
└─ public/" style="color:#D4D4D4;display:none" aria-label="Copy" class="code-block-pro-copy-button"><svg xmlns="http://www.w3.org/2000/svg" style="width:24px;height:24px" fill="none" viewBox="0 0 24 24" stroke="currentColor" stroke-width="2"><path class="with-check" stroke-linecap="round" stroke-linejoin="round" d="M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2m-6 9l2 2 4-4"></path><path class="without-check" stroke-linecap="round" stroke-linejoin="round" d="M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2"></path></svg></span><pre class="shiki dark-plus" style="background-color: #1E1E1E" tabindex="0"><code><span class="line"><span style="color: #DCDCAA">my-vite-app/</span></span>
<span class="line"><span style="color: #DCDCAA">├─</span><span style="color: #D4D4D4"> </span><span style="color: #CE9178">index.html</span><span style="color: #D4D4D4">       </span><span style="color: #CE9178">←</span><span style="color: #D4D4D4"> </span><span style="color: #CE9178">エントリーポイント</span></span>
<span class="line"><span style="color: #DCDCAA">├─</span><span style="color: #D4D4D4"> </span><span style="color: #CE9178">vite.config.js</span><span style="color: #D4D4D4">   </span><span style="color: #CE9178">←</span><span style="color: #D4D4D4"> </span><span style="color: #CE9178">必要になったら作成</span></span>
<span class="line"><span style="color: #DCDCAA">├─</span><span style="color: #D4D4D4"> </span><span style="color: #CE9178">src/</span></span>
<span class="line"><span style="color: #DCDCAA">│</span><span style="color: #D4D4D4">  </span><span style="color: #CE9178">├─</span><span style="color: #D4D4D4"> </span><span style="color: #CE9178">main.js</span></span>
<span class="line"><span style="color: #DCDCAA">│</span><span style="color: #D4D4D4">  </span><span style="color: #CE9178">└─</span><span style="color: #D4D4D4"> </span><span style="color: #CE9178">App.vue</span><span style="color: #D4D4D4"> </span><span style="color: #CE9178">/</span><span style="color: #D4D4D4"> </span><span style="color: #CE9178">App.jsx</span></span>
<span class="line"><span style="color: #DCDCAA">└─</span><span style="color: #D4D4D4"> </span><span style="color: #CE9178">public/</span></span></code></pre></div>



<p class="wp-block-paragraph"><code>index.html</code> を Vite が解析し、自動でモジュールグラフを生成します。</p>



<h2 class="wp-block-heading">開発サーバとホットリロード</h2>



<p class="wp-block-paragraph"><code>npm run dev</code> を実行すると開発サーバが起動し、以下を行います。</p>



<ol class="wp-block-list">
<li>依存ライブラリを esbuild でプリバンドル</li>



<li>ソースをオンデマンド変換してブラウザへ配信</li>



<li>変更検知で該当モジュールだけを HMR で差し替え</li>
</ol>



<p class="wp-block-paragraph">Vue SFC、React Fast Refresh、Svelte HMR などが公式プラグインでサポートされ、状態を保持したまま UI が瞬時に更新されます。</p>



<h2 class="wp-block-heading">本番ビルドと最適化</h2>



<div class="wp-block-kevinbatdorf-code-block-pro" data-code-block-pro-font-family="Code-Pro-JetBrains-Mono" style="font-size:.875rem;font-family:Code-Pro-JetBrains-Mono,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;line-height:1.25rem;--cbp-tab-width:2;tab-size:var(--cbp-tab-width, 2)"><span style="display:block;padding:16px 0 0 16px;margin-bottom:-1px;width:100%;text-align:left;background-color:#1E1E1E"><svg xmlns="http://www.w3.org/2000/svg" width="54" height="14" viewBox="0 0 54 14"><g fill="none" fill-rule="evenodd" transform="translate(1 1)"><circle cx="6" cy="6" r="6" fill="#FF5F56" stroke="#E0443E" stroke-width=".5"></circle><circle cx="26" cy="6" r="6" fill="#FFBD2E" stroke="#DEA123" stroke-width=".5"></circle><circle cx="46" cy="6" r="6" fill="#27C93F" stroke="#1AAB29" stroke-width=".5"></circle></g></svg></span><span role="button" tabindex="0" data-code="npm run build
npm run preview" style="color:#D4D4D4;display:none" aria-label="Copy" class="code-block-pro-copy-button"><svg xmlns="http://www.w3.org/2000/svg" style="width:24px;height:24px" fill="none" viewBox="0 0 24 24" stroke="currentColor" stroke-width="2"><path class="with-check" stroke-linecap="round" stroke-linejoin="round" d="M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2m-6 9l2 2 4-4"></path><path class="without-check" stroke-linecap="round" stroke-linejoin="round" d="M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2"></path></svg></span><pre class="shiki dark-plus" style="background-color: #1E1E1E" tabindex="0"><code><span class="line"><span style="color: #DCDCAA">npm</span><span style="color: #D4D4D4"> </span><span style="color: #CE9178">run</span><span style="color: #D4D4D4"> </span><span style="color: #CE9178">build</span></span>
<span class="line"><span style="color: #DCDCAA">npm</span><span style="color: #D4D4D4"> </span><span style="color: #CE9178">run</span><span style="color: #D4D4D4"> </span><span style="color: #CE9178">preview</span></span></code></pre></div>



<p class="wp-block-paragraph">Rollup がコード分割・ツリーシェイキングを行い、<code>dist/</code> にハッシュ付きファイルを出力します。画像は 4 KB 未満なら自動で Base64 インライン化されます。</p>



<h2 class="wp-block-heading">プラグインエコシステム</h2>



<ul class="wp-block-list">
<li><strong>@vitejs/plugin-react</strong> – React + Fast Refresh</li>



<li><strong>@vitejs/plugin-vue</strong> – Vue 3 SFC 対応</li>



<li><strong>vite-plugin-pwa</strong> – 数行で PWA 化</li>



<li><strong>vite-plugin-legacy</strong> – 古いブラウザ向けフォールバック</li>
</ul>



<p class="wp-block-paragraph">プラグインは <code>vite.config.js</code> の <code>plugins</code> 配列に追加するだけで機能します。</p>



<h2 class="wp-block-heading">環境変数とモード</h2>



<p class="wp-block-paragraph"><code>.env</code> ファイルに <strong>VITE_</strong> プレフィックスを付けて記述し、<code>import.meta.env.VITE_API_BASE</code> のように参照します。モードは <code>development</code> / <code>production</code> などが自動判定され、<code>import.meta.env.MODE</code> で取得できます。</p>



<h2 class="wp-block-heading">主要フレームワークとの統合</h2>



<h3 class="wp-block-heading">React</h3>



<div class="wp-block-kevinbatdorf-code-block-pro" data-code-block-pro-font-family="Code-Pro-JetBrains-Mono" style="font-size:.875rem;font-family:Code-Pro-JetBrains-Mono,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;line-height:1.25rem;--cbp-tab-width:2;tab-size:var(--cbp-tab-width, 2)"><span style="display:block;padding:16px 0 0 16px;margin-bottom:-1px;width:100%;text-align:left;background-color:#1E1E1E"><svg xmlns="http://www.w3.org/2000/svg" width="54" height="14" viewBox="0 0 54 14"><g fill="none" fill-rule="evenodd" transform="translate(1 1)"><circle cx="6" cy="6" r="6" fill="#FF5F56" stroke="#E0443E" stroke-width=".5"></circle><circle cx="26" cy="6" r="6" fill="#FFBD2E" stroke="#DEA123" stroke-width=".5"></circle><circle cx="46" cy="6" r="6" fill="#27C93F" stroke="#1AAB29" stroke-width=".5"></circle></g></svg></span><span role="button" tabindex="0" data-code="npm i -D @vitejs/plugin-react" style="color:#D4D4D4;display:none" aria-label="Copy" class="code-block-pro-copy-button"><svg xmlns="http://www.w3.org/2000/svg" style="width:24px;height:24px" fill="none" viewBox="0 0 24 24" stroke="currentColor" stroke-width="2"><path class="with-check" stroke-linecap="round" stroke-linejoin="round" d="M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2m-6 9l2 2 4-4"></path><path class="without-check" stroke-linecap="round" stroke-linejoin="round" d="M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2"></path></svg></span><pre class="shiki dark-plus" style="background-color: #1E1E1E" tabindex="0"><code><span class="line"><span style="color: #DCDCAA">npm</span><span style="color: #D4D4D4"> </span><span style="color: #CE9178">i</span><span style="color: #D4D4D4"> </span><span style="color: #569CD6">-D</span><span style="color: #D4D4D4"> </span><span style="color: #CE9178">@vitejs/plugin-react</span></span></code></pre></div>



<p class="wp-block-paragraph">JSX 変換と Fast Refresh が自動有効。TypeScript も即利用可能。</p>



<h3 class="wp-block-heading">Vue 3</h3>



<div class="wp-block-kevinbatdorf-code-block-pro" data-code-block-pro-font-family="Code-Pro-JetBrains-Mono" style="font-size:.875rem;font-family:Code-Pro-JetBrains-Mono,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;line-height:1.25rem;--cbp-tab-width:2;tab-size:var(--cbp-tab-width, 2)"><span style="display:block;padding:16px 0 0 16px;margin-bottom:-1px;width:100%;text-align:left;background-color:#1E1E1E"><svg xmlns="http://www.w3.org/2000/svg" width="54" height="14" viewBox="0 0 54 14"><g fill="none" fill-rule="evenodd" transform="translate(1 1)"><circle cx="6" cy="6" r="6" fill="#FF5F56" stroke="#E0443E" stroke-width=".5"></circle><circle cx="26" cy="6" r="6" fill="#FFBD2E" stroke="#DEA123" stroke-width=".5"></circle><circle cx="46" cy="6" r="6" fill="#27C93F" stroke="#1AAB29" stroke-width=".5"></circle></g></svg></span><span role="button" tabindex="0" data-code="npm i -D @vitejs/plugin-vue" style="color:#D4D4D4;display:none" aria-label="Copy" class="code-block-pro-copy-button"><svg xmlns="http://www.w3.org/2000/svg" style="width:24px;height:24px" fill="none" viewBox="0 0 24 24" stroke="currentColor" stroke-width="2"><path class="with-check" stroke-linecap="round" stroke-linejoin="round" d="M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2m-6 9l2 2 4-4"></path><path class="without-check" stroke-linecap="round" stroke-linejoin="round" d="M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2"></path></svg></span><pre class="shiki dark-plus" style="background-color: #1E1E1E" tabindex="0"><code><span class="line"><span style="color: #DCDCAA">npm</span><span style="color: #D4D4D4"> </span><span style="color: #CE9178">i</span><span style="color: #D4D4D4"> </span><span style="color: #569CD6">-D</span><span style="color: #D4D4D4"> </span><span style="color: #CE9178">@vitejs/plugin-vue</span></span></code></pre></div>



<p class="wp-block-paragraph"><code>.vue</code> ファイルと <code>&lt;script setup&gt;</code> をネイティブサポート。</p>



<h3 class="wp-block-heading">Svelte</h3>



<p class="wp-block-paragraph">テンプレート <code>svelte</code> を選ぶだけで HMR と SvelteKit 互換設定が完了します。</p>



<h2 class="wp-block-heading">移行ガイド：CRA/Webpack → Vite</h2>



<ol class="wp-block-list">
<li><code>react-scripts</code> をアンインストール</li>



<li><code>npm create vite</code> でテンプレートを生成</li>



<li><code>REACT_APP_</code> 環境変数を <code>VITE_</code> にリネーム</li>



<li>絶対パスエイリアスを <code>vite.config.js</code> に <code>resolve.alias</code> として移植</li>
</ol>



<p class="wp-block-paragraph">多くのプロジェクトは半日程度で移行でき、ビルド時間が 1/5 以下に短縮されます。</p>



<h2 class="wp-block-heading">なぜ“爆速”なのかをもう少し深掘り</h2>



<p class="wp-block-paragraph">Vite は開発中に esbuild を使用し、依存ライブラリを一度だけプリバンドル。ソースコードはリクエスト単位でトランスパイルされ、HMR では変更箇所のみを WebSocket 越しに差し替えます。これにより編集サイクルが極端に短縮されるのです。本番ビルドでは Rollup の最適化アルゴリズムを活用し、速度と品質を両立しています。</p>



<h2 class="wp-block-heading">Vitestで体験する“超高速ユニットテスト”</h2>



<div class="wp-block-kevinbatdorf-code-block-pro" data-code-block-pro-font-family="Code-Pro-JetBrains-Mono" style="font-size:.875rem;font-family:Code-Pro-JetBrains-Mono,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;line-height:1.25rem;--cbp-tab-width:2;tab-size:var(--cbp-tab-width, 2)"><span style="display:block;padding:16px 0 0 16px;margin-bottom:-1px;width:100%;text-align:left;background-color:#1E1E1E"><svg xmlns="http://www.w3.org/2000/svg" width="54" height="14" viewBox="0 0 54 14"><g fill="none" fill-rule="evenodd" transform="translate(1 1)"><circle cx="6" cy="6" r="6" fill="#FF5F56" stroke="#E0443E" stroke-width=".5"></circle><circle cx="26" cy="6" r="6" fill="#FFBD2E" stroke="#DEA123" stroke-width=".5"></circle><circle cx="46" cy="6" r="6" fill="#27C93F" stroke="#1AAB29" stroke-width=".5"></circle></g></svg></span><span role="button" tabindex="0" data-code="npm i -D vitest @testing-library/react" style="color:#D4D4D4;display:none" aria-label="Copy" class="code-block-pro-copy-button"><svg xmlns="http://www.w3.org/2000/svg" style="width:24px;height:24px" fill="none" viewBox="0 0 24 24" stroke="currentColor" stroke-width="2"><path class="with-check" stroke-linecap="round" stroke-linejoin="round" d="M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2m-6 9l2 2 4-4"></path><path class="without-check" stroke-linecap="round" stroke-linejoin="round" d="M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2"></path></svg></span><pre class="shiki dark-plus" style="background-color: #1E1E1E" tabindex="0"><code><span class="line"><span style="color: #DCDCAA">npm</span><span style="color: #D4D4D4"> </span><span style="color: #CE9178">i</span><span style="color: #D4D4D4"> </span><span style="color: #569CD6">-D</span><span style="color: #D4D4D4"> </span><span style="color: #CE9178">vitest</span><span style="color: #D4D4D4"> </span><span style="color: #CE9178">@testing-library/react</span></span></code></pre></div>



<p class="wp-block-paragraph">Vite とキャッシュを共有するため、1000 件以上のテストでも数秒で完了します。Jest 互換 API なので即移行可能です。</p>



<h2 class="wp-block-heading">SSR・プリレンダリング活用例</h2>



<p class="wp-block-paragraph"><code>vite build --ssr</code> でサーバーレンダリング用バンドルを生成し、Node.js ハンドラに流し込めます。また <code>--ssrManifest</code> で依存表を出力すればプリレンダリングとの相性も抜群です。Nuxt 3、Astro、SvelteKit などが Vite を基盤に採用しています。</p>



<h2 class="wp-block-heading">よくあるエラーと対処法</h2>



<figure class="wp-block-table"><div class="scrollable-table"><table class="has-fixed-layout"><thead><tr><th>エラー</th><th>原因</th><th>解決策</th></tr></thead><tbody><tr><td><code>Failed to resolve import "fs"</code></td><td>ブラウザで Node 専用モジュール参照</td><td>条件付き import または external 設定</td></tr><tr><td>画像が 404</td><td><code>public/</code> ではなく <code>src/</code> に置いた</td><td><code>import</code> で読み込むか <code>public</code> へ移動</td></tr><tr><td>HMR が動かない</td><td>IDE の Safe Write 機能</td><td>Safe Write をオフにする</td></tr></tbody></table></div></figure>



<h2 class="wp-block-heading">デプロイ先別クイックスタート</h2>



<h3 class="wp-block-heading">Netlify</h3>



<p class="wp-block-paragraph">ビルドコマンド <code>npm run build</code>、公開フォルダ <code>dist</code> を設定するだけ。</p>



<h3 class="wp-block-heading">Vercel</h3>



<p class="wp-block-paragraph"><code>vercel</code> CLI を実行すると自動で Vite プリセットが適用。</p>



<h3 class="wp-block-heading">Cloudflare Pages</h3>



<div class="wp-block-kevinbatdorf-code-block-pro" data-code-block-pro-font-family="Code-Pro-JetBrains-Mono" style="font-size:.875rem;font-family:Code-Pro-JetBrains-Mono,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;line-height:1.25rem;--cbp-tab-width:2;tab-size:var(--cbp-tab-width, 2)"><span style="display:block;padding:16px 0 0 16px;margin-bottom:-1px;width:100%;text-align:left;background-color:#1E1E1E"><svg xmlns="http://www.w3.org/2000/svg" width="54" height="14" viewBox="0 0 54 14"><g fill="none" fill-rule="evenodd" transform="translate(1 1)"><circle cx="6" cy="6" r="6" fill="#FF5F56" stroke="#E0443E" stroke-width=".5"></circle><circle cx="26" cy="6" r="6" fill="#FFBD2E" stroke="#DEA123" stroke-width=".5"></circle><circle cx="46" cy="6" r="6" fill="#27C93F" stroke="#1AAB29" stroke-width=".5"></circle></g></svg></span><span role="button" tabindex="0" data-code="npm run build
npx wrangler pages publish dist" style="color:#D4D4D4;display:none" aria-label="Copy" class="code-block-pro-copy-button"><svg xmlns="http://www.w3.org/2000/svg" style="width:24px;height:24px" fill="none" viewBox="0 0 24 24" stroke="currentColor" stroke-width="2"><path class="with-check" stroke-linecap="round" stroke-linejoin="round" d="M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2m-6 9l2 2 4-4"></path><path class="without-check" stroke-linecap="round" stroke-linejoin="round" d="M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2"></path></svg></span><pre class="shiki dark-plus" style="background-color: #1E1E1E" tabindex="0"><code><span class="line"><span style="color: #DCDCAA">npm</span><span style="color: #D4D4D4"> </span><span style="color: #CE9178">run</span><span style="color: #D4D4D4"> </span><span style="color: #CE9178">build</span></span>
<span class="line"><span style="color: #DCDCAA">npx</span><span style="color: #D4D4D4"> </span><span style="color: #CE9178">wrangler</span><span style="color: #D4D4D4"> </span><span style="color: #CE9178">pages</span><span style="color: #D4D4D4"> </span><span style="color: #CE9178">publish</span><span style="color: #D4D4D4"> </span><span style="color: #CE9178">dist</span></span></code></pre></div>



<h2 class="wp-block-heading">ロードマップとコミュニティ</h2>



<p class="wp-block-paragraph">Vite 5 では esbuild v0.23 へのアップグレード、Import Attributes 標準化、Rust ベースの変換パイプラインとのハイブリッド化が予定されています。GitHub での PR マージ速度も非常に高速で、活発なコミュニティが魅力です。</p>



<h2 class="wp-block-heading">Viteが向かないケースは？</h2>



<ul class="wp-block-list">
<li>IE11 未満を公式サポートする案件</li>



<li>Webpack 固有のローダーに深く依存する巨大モノリス</li>



<li>サーバーサイドとビルドが密結合したレガシー CMS<br>ただし <code>vite-plugin-legacy</code> や移行ツールの充実で、こうした制約は急速に減りつつあります。</li>
</ul>



<h2 class="wp-block-heading">参考コマンド早見表</h2>



<div class="wp-block-kevinbatdorf-code-block-pro" data-code-block-pro-font-family="Code-Pro-JetBrains-Mono" style="font-size:.875rem;font-family:Code-Pro-JetBrains-Mono,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;line-height:1.25rem;--cbp-tab-width:2;tab-size:var(--cbp-tab-width, 2)"><span style="display:block;padding:16px 0 0 16px;margin-bottom:-1px;width:100%;text-align:left;background-color:#1E1E1E"><svg xmlns="http://www.w3.org/2000/svg" width="54" height="14" viewBox="0 0 54 14"><g fill="none" fill-rule="evenodd" transform="translate(1 1)"><circle cx="6" cy="6" r="6" fill="#FF5F56" stroke="#E0443E" stroke-width=".5"></circle><circle cx="26" cy="6" r="6" fill="#FFBD2E" stroke="#DEA123" stroke-width=".5"></circle><circle cx="46" cy="6" r="6" fill="#27C93F" stroke="#1AAB29" stroke-width=".5"></circle></g></svg></span><span role="button" tabindex="0" data-code="npm create vite@latest        # 新規作成
npm run dev                   # 開発
npm run build                 # 本番ビルド
npm run preview               # プレビュー
npx vite build --ssr src/entry-server.js   # SSRバンドル" style="color:#D4D4D4;display:none" aria-label="Copy" class="code-block-pro-copy-button"><svg xmlns="http://www.w3.org/2000/svg" style="width:24px;height:24px" fill="none" viewBox="0 0 24 24" stroke="currentColor" stroke-width="2"><path class="with-check" stroke-linecap="round" stroke-linejoin="round" d="M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2m-6 9l2 2 4-4"></path><path class="without-check" stroke-linecap="round" stroke-linejoin="round" d="M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2"></path></svg></span><pre class="shiki dark-plus" style="background-color: #1E1E1E" tabindex="0"><code><span class="line"><span style="color: #DCDCAA">npm</span><span style="color: #D4D4D4"> </span><span style="color: #CE9178">create</span><span style="color: #D4D4D4"> </span><span style="color: #CE9178">vite@latest</span><span style="color: #D4D4D4">        </span><span style="color: #6A9955"># 新規作成</span></span>
<span class="line"><span style="color: #DCDCAA">npm</span><span style="color: #D4D4D4"> </span><span style="color: #CE9178">run</span><span style="color: #D4D4D4"> </span><span style="color: #CE9178">dev</span><span style="color: #D4D4D4">                   </span><span style="color: #6A9955"># 開発</span></span>
<span class="line"><span style="color: #DCDCAA">npm</span><span style="color: #D4D4D4"> </span><span style="color: #CE9178">run</span><span style="color: #D4D4D4"> </span><span style="color: #CE9178">build</span><span style="color: #D4D4D4">                 </span><span style="color: #6A9955"># 本番ビルド</span></span>
<span class="line"><span style="color: #DCDCAA">npm</span><span style="color: #D4D4D4"> </span><span style="color: #CE9178">run</span><span style="color: #D4D4D4"> </span><span style="color: #CE9178">preview</span><span style="color: #D4D4D4">               </span><span style="color: #6A9955"># プレビュー</span></span>
<span class="line"><span style="color: #DCDCAA">npx</span><span style="color: #D4D4D4"> </span><span style="color: #CE9178">vite</span><span style="color: #D4D4D4"> </span><span style="color: #CE9178">build</span><span style="color: #D4D4D4"> </span><span style="color: #569CD6">--ssr</span><span style="color: #D4D4D4"> </span><span style="color: #CE9178">src/entry-server.js</span><span style="color: #D4D4D4">   </span><span style="color: #6A9955"># SSRバンドル</span></span></code></pre></div>



<h2 class="wp-block-heading">まとめ</h2>



<p class="wp-block-paragraph">Vite は<strong>開発サーバ起動の速さ</strong>と<strong>シンプルな構成</strong>でモダンフロントエンド開発を変革しました。新規プロジェクトはもちろん、既存アプリの移行でも劇的な速度向上が期待できます。まずはコマンド一発でプロジェクトを作成し、その“爆速”体験を味わってください。</p>



<p class="wp-block-paragraph"></p>
]]></content:encoded>
					
					<wfw:commentRss>https://techgrowup.net/react-vite/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
		<item>
		<title>Create React App入門──導入からカスタムテンプレート・デプロイまで</title>
		<link>https://techgrowup.net/react-create-react-app/</link>
					<comments>https://techgrowup.net/react-create-react-app/?noamp=mobile#respond</comments>
		
		<dc:creator><![CDATA[techgrowup]]></dc:creator>
		<pubDate>Sun, 27 Apr 2025 16:00:00 +0000</pubDate>
				<category><![CDATA[React]]></category>
		<category><![CDATA[プログラミング]]></category>
		<category><![CDATA[Babel]]></category>
		<category><![CDATA[CRA]]></category>
		<category><![CDATA[Create React App]]></category>
		<category><![CDATA[JavaScriptビルド]]></category>
		<category><![CDATA[react-scripts]]></category>
		<category><![CDATA[React入門]]></category>
		<category><![CDATA[webpack]]></category>
		<category><![CDATA[フロントエンド]]></category>
		<guid isPermaLink="false">https://techgrowup.net/?p=2811</guid>

					<description><![CDATA[はじめに JavaScriptフレームワークの中でも人気の高いReact。「まず動くプロトタイプを作りたいけど、BabelやWebpackの設定が面倒」という悩みを解決するのが**Create React App（CRA [&#8230;]]]></description>
										<content:encoded><![CDATA[
<h1 class="wp-block-heading">はじめに</h1>



<p class="wp-block-paragraph">JavaScriptフレームワークの中でも人気の高い<strong>React</strong>。「まず動くプロトタイプを作りたいけど、BabelやWebpackの設定が面倒」という悩みを解決するのが**Create React App（CRA）**です。コマンド1本で最新の開発環境が完成し、すぐにブラウザで実行できます。本記事では公式ドキュメントを基に、基本操作から応用設定・テスト・デプロイまでをステップごとに解説します。</p>



<h2 class="wp-block-heading">Create React Appの概要</h2>



<h3 class="wp-block-heading">なぜCRAが選ばれるのか</h3>



<ul class="wp-block-list">
<li><strong>設定ファイルが不要</strong><br>Webpack・Babelなど複雑な設定を気にせず、すぐに開発を始められます。</li>



<li><strong>モダンブラウザ対応</strong><br>主要ブラウザを標準サポート。古いブラウザもポリフィルで後付けできます。</li>



<li><strong>学習コストが低い</strong><br>React初心者でも <code>npm start</code> でホットリロード環境が起動し、変更が即反映されます。</li>
</ul>



<h3 class="wp-block-heading">プロジェクトの作成コマンド</h3>



<div class="wp-block-kevinbatdorf-code-block-pro" data-code-block-pro-font-family="Code-Pro-JetBrains-Mono" style="font-size:.875rem;font-family:Code-Pro-JetBrains-Mono,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;line-height:1.25rem;--cbp-tab-width:2;tab-size:var(--cbp-tab-width, 2)"><span style="display:block;padding:16px 0 0 16px;margin-bottom:-1px;width:100%;text-align:left;background-color:#1E1E1E"><svg xmlns="http://www.w3.org/2000/svg" width="54" height="14" viewBox="0 0 54 14"><g fill="none" fill-rule="evenodd" transform="translate(1 1)"><circle cx="6" cy="6" r="6" fill="#FF5F56" stroke="#E0443E" stroke-width=".5"></circle><circle cx="26" cy="6" r="6" fill="#FFBD2E" stroke="#DEA123" stroke-width=".5"></circle><circle cx="46" cy="6" r="6" fill="#27C93F" stroke="#1AAB29" stroke-width=".5"></circle></g></svg></span><span role="button" tabindex="0" data-code="npx create-react-app my-app
cd my-app
npm start     # localhost:3000 が自動で開く" style="color:#D4D4D4;display:none" aria-label="Copy" class="code-block-pro-copy-button"><svg xmlns="http://www.w3.org/2000/svg" style="width:24px;height:24px" fill="none" viewBox="0 0 24 24" stroke="currentColor" stroke-width="2"><path class="with-check" stroke-linecap="round" stroke-linejoin="round" d="M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2m-6 9l2 2 4-4"></path><path class="without-check" stroke-linecap="round" stroke-linejoin="round" d="M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2"></path></svg></span><pre class="shiki dark-plus" style="background-color: #1E1E1E" tabindex="0"><code><span class="line"><span style="color: #DCDCAA">npx</span><span style="color: #D4D4D4"> </span><span style="color: #CE9178">create-react-app</span><span style="color: #D4D4D4"> </span><span style="color: #CE9178">my-app</span></span>
<span class="line"><span style="color: #DCDCAA">cd</span><span style="color: #D4D4D4"> </span><span style="color: #CE9178">my-app</span></span>
<span class="line"><span style="color: #DCDCAA">npm</span><span style="color: #D4D4D4"> </span><span style="color: #CE9178">start</span><span style="color: #D4D4D4">     </span><span style="color: #6A9955"># localhost:3000 が自動で開く</span></span></code></pre></div>



<p class="wp-block-paragraph">以前グローバルに <code>create-react-app</code> を入れていた場合はアンインストールしてから実行してください。</p>



<h2 class="wp-block-heading">フォルダ構成を理解する</h2>



<figure class="wp-block-table"><div class="scrollable-table"><table class="has-fixed-layout"><thead><tr><th>パス</th><th>役割</th></tr></thead><tbody><tr><td><code>public/index.html</code></td><td>ただ一つのHTMLテンプレート</td></tr><tr><td><code>src/index.js</code></td><td>エントリーポイント</td></tr><tr><td><code>src/App.js</code></td><td>ルートコンポーネント</td></tr><tr><td><code>src</code> 配下</td><td>JS/TS・CSS・画像など。ここに置くとWebpackが自動でバンドル</td></tr></tbody></table></div></figure>



<p class="wp-block-paragraph"><code>public</code> 内のファイルだけが <code>index.html</code> から直接参照できます。コンポーネントから画像を読み込むときは <code>import</code> するのが基本です。</p>



<h2 class="wp-block-heading">よく使うスクリプト</h2>



<div class="wp-block-kevinbatdorf-code-block-pro" data-code-block-pro-font-family="Code-Pro-JetBrains-Mono" style="font-size:.875rem;font-family:Code-Pro-JetBrains-Mono,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;line-height:1.25rem;--cbp-tab-width:2;tab-size:var(--cbp-tab-width, 2)"><span style="display:block;padding:16px 0 0 16px;margin-bottom:-1px;width:100%;text-align:left;background-color:#1E1E1E"><svg xmlns="http://www.w3.org/2000/svg" width="54" height="14" viewBox="0 0 54 14"><g fill="none" fill-rule="evenodd" transform="translate(1 1)"><circle cx="6" cy="6" r="6" fill="#FF5F56" stroke="#E0443E" stroke-width=".5"></circle><circle cx="26" cy="6" r="6" fill="#FFBD2E" stroke="#DEA123" stroke-width=".5"></circle><circle cx="46" cy="6" r="6" fill="#27C93F" stroke="#1AAB29" stroke-width=".5"></circle></g></svg></span><span role="button" tabindex="0" data-code="npm start         # 開発用サーバー (ホットリロード付き)
npm run build     # 本番ビルド (圧縮・ハッシュ付きファイルを生成)
npm test          # テスト実行 (Jest + Testing Library)
npm run eject     # 設定ファイルを外へ出す※後戻り不可" style="color:#D4D4D4;display:none" aria-label="Copy" class="code-block-pro-copy-button"><svg xmlns="http://www.w3.org/2000/svg" style="width:24px;height:24px" fill="none" viewBox="0 0 24 24" stroke="currentColor" stroke-width="2"><path class="with-check" stroke-linecap="round" stroke-linejoin="round" d="M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2m-6 9l2 2 4-4"></path><path class="without-check" stroke-linecap="round" stroke-linejoin="round" d="M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2"></path></svg></span><pre class="shiki dark-plus" style="background-color: #1E1E1E" tabindex="0"><code><span class="line"><span style="color: #DCDCAA">npm</span><span style="color: #D4D4D4"> </span><span style="color: #CE9178">start</span><span style="color: #D4D4D4">         </span><span style="color: #6A9955"># 開発用サーバー (ホットリロード付き)</span></span>
<span class="line"><span style="color: #DCDCAA">npm</span><span style="color: #D4D4D4"> </span><span style="color: #CE9178">run</span><span style="color: #D4D4D4"> </span><span style="color: #CE9178">build</span><span style="color: #D4D4D4">     </span><span style="color: #6A9955"># 本番ビルド (圧縮・ハッシュ付きファイルを生成)</span></span>
<span class="line"><span style="color: #DCDCAA">npm</span><span style="color: #D4D4D4"> </span><span style="color: #CE9178">test</span><span style="color: #D4D4D4">          </span><span style="color: #6A9955"># テスト実行 (Jest + Testing Library)</span></span>
<span class="line"><span style="color: #DCDCAA">npm</span><span style="color: #D4D4D4"> </span><span style="color: #CE9178">run</span><span style="color: #D4D4D4"> </span><span style="color: #CE9178">eject</span><span style="color: #D4D4D4">     </span><span style="color: #6A9955"># 設定ファイルを外へ出す※後戻り不可</span></span></code></pre></div>



<p class="wp-block-paragraph"><code>build</code> で生成されるファイルは <code>build</code> フォルダに出力され、そのまま静的ホスティングへアップロードできます。</p>



<h2 class="wp-block-heading">ブラウザサポートとポリフィル</h2>



<ul class="wp-block-list">
<li><strong>モダンブラウザ</strong>（Chrome, Edge, Safari, Firefox）はそのまま対応</li>



<li><strong>IE11 など古いブラウザ</strong><br><code>react-app-polyfill</code> を追加して <code>index.js</code> の先頭で読み込めば対応可能</li>
</ul>



<div class="wp-block-kevinbatdorf-code-block-pro" data-code-block-pro-font-family="Code-Pro-JetBrains-Mono" style="font-size:.875rem;font-family:Code-Pro-JetBrains-Mono,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;line-height:1.25rem;--cbp-tab-width:2;tab-size:var(--cbp-tab-width, 2)"><span style="display:block;padding:16px 0 0 16px;margin-bottom:-1px;width:100%;text-align:left;background-color:#1E1E1E"><svg xmlns="http://www.w3.org/2000/svg" width="54" height="14" viewBox="0 0 54 14"><g fill="none" fill-rule="evenodd" transform="translate(1 1)"><circle cx="6" cy="6" r="6" fill="#FF5F56" stroke="#E0443E" stroke-width=".5"></circle><circle cx="26" cy="6" r="6" fill="#FFBD2E" stroke="#DEA123" stroke-width=".5"></circle><circle cx="46" cy="6" r="6" fill="#27C93F" stroke="#1AAB29" stroke-width=".5"></circle></g></svg></span><span role="button" tabindex="0" data-code="npm i react-app-polyfill" style="color:#D4D4D4;display:none" aria-label="Copy" class="code-block-pro-copy-button"><svg xmlns="http://www.w3.org/2000/svg" style="width:24px;height:24px" fill="none" viewBox="0 0 24 24" stroke="currentColor" stroke-width="2"><path class="with-check" stroke-linecap="round" stroke-linejoin="round" d="M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2m-6 9l2 2 4-4"></path><path class="without-check" stroke-linecap="round" stroke-linejoin="round" d="M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2"></path></svg></span><pre class="shiki dark-plus" style="background-color: #1E1E1E" tabindex="0"><code><span class="line"><span style="color: #DCDCAA">npm</span><span style="color: #D4D4D4"> </span><span style="color: #CE9178">i</span><span style="color: #D4D4D4"> </span><span style="color: #CE9178">react-app-polyfill</span></span></code></pre></div>



<div class="wp-block-kevinbatdorf-code-block-pro" data-code-block-pro-font-family="Code-Pro-JetBrains-Mono" style="font-size:.875rem;font-family:Code-Pro-JetBrains-Mono,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;line-height:1.25rem;--cbp-tab-width:2;tab-size:var(--cbp-tab-width, 2)"><span style="display:block;padding:16px 0 0 16px;margin-bottom:-1px;width:100%;text-align:left;background-color:#1E1E1E"><svg xmlns="http://www.w3.org/2000/svg" width="54" height="14" viewBox="0 0 54 14"><g fill="none" fill-rule="evenodd" transform="translate(1 1)"><circle cx="6" cy="6" r="6" fill="#FF5F56" stroke="#E0443E" stroke-width=".5"></circle><circle cx="26" cy="6" r="6" fill="#FFBD2E" stroke="#DEA123" stroke-width=".5"></circle><circle cx="46" cy="6" r="6" fill="#27C93F" stroke="#1AAB29" stroke-width=".5"></circle></g></svg></span><span role="button" tabindex="0" data-code="import 'react-app-polyfill/ie11';" style="color:#D4D4D4;display:none" aria-label="Copy" class="code-block-pro-copy-button"><svg xmlns="http://www.w3.org/2000/svg" style="width:24px;height:24px" fill="none" viewBox="0 0 24 24" stroke="currentColor" stroke-width="2"><path class="with-check" stroke-linecap="round" stroke-linejoin="round" d="M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2m-6 9l2 2 4-4"></path><path class="without-check" stroke-linecap="round" stroke-linejoin="round" d="M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2"></path></svg></span><pre class="shiki dark-plus" style="background-color: #1E1E1E" tabindex="0"><code><span class="line"><span style="color: #C586C0">import</span><span style="color: #D4D4D4"> </span><span style="color: #CE9178">&#39;react-app-polyfill/ie11&#39;</span><span style="color: #D4D4D4">;</span></span></code></pre></div>



<h2 class="wp-block-heading">テスト環境：Jest + Testing Library</h2>



<p class="wp-block-paragraph">CRA には Jest が組み込まれており、<code>npm test</code> ですぐテストを実行できます。</p>



<div class="wp-block-kevinbatdorf-code-block-pro" data-code-block-pro-font-family="Code-Pro-JetBrains-Mono" style="font-size:.875rem;font-family:Code-Pro-JetBrains-Mono,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;line-height:1.25rem;--cbp-tab-width:2;tab-size:var(--cbp-tab-width, 2)"><span style="display:block;padding:16px 0 0 16px;margin-bottom:-1px;width:100%;text-align:left;background-color:#1E1E1E"><svg xmlns="http://www.w3.org/2000/svg" width="54" height="14" viewBox="0 0 54 14"><g fill="none" fill-rule="evenodd" transform="translate(1 1)"><circle cx="6" cy="6" r="6" fill="#FF5F56" stroke="#E0443E" stroke-width=".5"></circle><circle cx="26" cy="6" r="6" fill="#FFBD2E" stroke="#DEA123" stroke-width=".5"></circle><circle cx="46" cy="6" r="6" fill="#27C93F" stroke="#1AAB29" stroke-width=".5"></circle></g></svg></span><span role="button" tabindex="0" data-code="// src/App.test.js
import { render, screen } from '@testing-library/react';
import App from './App';

test('タイトルが表示される', () =&gt; {
  render(&lt;App /&gt;);
  const heading = screen.getByText(/Hello React/i);
  expect(heading).toBeInTheDocument();
});" style="color:#D4D4D4;display:none" aria-label="Copy" class="code-block-pro-copy-button"><svg xmlns="http://www.w3.org/2000/svg" style="width:24px;height:24px" fill="none" viewBox="0 0 24 24" stroke="currentColor" stroke-width="2"><path class="with-check" stroke-linecap="round" stroke-linejoin="round" d="M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2m-6 9l2 2 4-4"></path><path class="without-check" stroke-linecap="round" stroke-linejoin="round" d="M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2"></path></svg></span><pre class="shiki dark-plus" style="background-color: #1E1E1E" tabindex="0"><code><span class="line"><span style="color: #6A9955">// src/App.test.js</span></span>
<span class="line"><span style="color: #C586C0">import</span><span style="color: #D4D4D4"> { </span><span style="color: #9CDCFE">render</span><span style="color: #D4D4D4">, </span><span style="color: #9CDCFE">screen</span><span style="color: #D4D4D4"> } </span><span style="color: #C586C0">from</span><span style="color: #D4D4D4"> </span><span style="color: #CE9178">&#39;@testing-library/react&#39;</span><span style="color: #D4D4D4">;</span></span>
<span class="line"><span style="color: #C586C0">import</span><span style="color: #D4D4D4"> </span><span style="color: #9CDCFE">App</span><span style="color: #D4D4D4"> </span><span style="color: #C586C0">from</span><span style="color: #D4D4D4"> </span><span style="color: #CE9178">&#39;./App&#39;</span><span style="color: #D4D4D4">;</span></span>
<span class="line"></span>
<span class="line"><span style="color: #DCDCAA">test</span><span style="color: #D4D4D4">(</span><span style="color: #CE9178">&#39;タイトルが表示される&#39;</span><span style="color: #D4D4D4">, () </span><span style="color: #569CD6">=&gt;</span><span style="color: #D4D4D4"> {</span></span>
<span class="line"><span style="color: #D4D4D4">  </span><span style="color: #DCDCAA">render</span><span style="color: #D4D4D4">(</span><span style="color: #808080">&lt;</span><span style="color: #4EC9B0">App</span><span style="color: #D4D4D4"> </span><span style="color: #808080">/&gt;</span><span style="color: #D4D4D4">);</span></span>
<span class="line"><span style="color: #D4D4D4">  </span><span style="color: #569CD6">const</span><span style="color: #D4D4D4"> </span><span style="color: #4FC1FF">heading</span><span style="color: #D4D4D4"> = </span><span style="color: #9CDCFE">screen</span><span style="color: #D4D4D4">.</span><span style="color: #DCDCAA">getByText</span><span style="color: #D4D4D4">(</span><span style="color: #D16969">/Hello React/</span><span style="color: #569CD6">i</span><span style="color: #D4D4D4">);</span></span>
<span class="line"><span style="color: #D4D4D4">  </span><span style="color: #DCDCAA">expect</span><span style="color: #D4D4D4">(</span><span style="color: #9CDCFE">heading</span><span style="color: #D4D4D4">).</span><span style="color: #DCDCAA">toBeInTheDocument</span><span style="color: #D4D4D4">();</span></span>
<span class="line"><span style="color: #D4D4D4">});</span></span></code></pre></div>



<p class="wp-block-paragraph"><code>*.test.js</code> や <code>*.spec.js</code> というファイル名で自動検出され、ウォッチモードで変更分だけ再テストされます。</p>



<h2 class="wp-block-heading">環境変数とビルド時の設定</h2>



<ol class="wp-block-list">
<li>ルートに <code>.env</code> ファイルを作成</li>



<li><strong>必ず</strong> <code>REACT_APP_</code> を頭につけて記載 </li>
</ol>



<div class="wp-block-kevinbatdorf-code-block-pro" data-code-block-pro-font-family="Code-Pro-JetBrains-Mono" style="font-size:.875rem;font-family:Code-Pro-JetBrains-Mono,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;line-height:1.25rem;--cbp-tab-width:2;tab-size:var(--cbp-tab-width, 2)"><span style="display:block;padding:16px 0 0 16px;margin-bottom:-1px;width:100%;text-align:left;background-color:#1E1E1E"><svg xmlns="http://www.w3.org/2000/svg" width="54" height="14" viewBox="0 0 54 14"><g fill="none" fill-rule="evenodd" transform="translate(1 1)"><circle cx="6" cy="6" r="6" fill="#FF5F56" stroke="#E0443E" stroke-width=".5"></circle><circle cx="26" cy="6" r="6" fill="#FFBD2E" stroke="#DEA123" stroke-width=".5"></circle><circle cx="46" cy="6" r="6" fill="#27C93F" stroke="#1AAB29" stroke-width=".5"></circle></g></svg></span><span role="button" tabindex="0" data-code="REACT_APP_API_URL=https://api.example.com
REACT_APP_VERSION=1.0.0" style="color:#D4D4D4;display:none" aria-label="Copy" class="code-block-pro-copy-button"><svg xmlns="http://www.w3.org/2000/svg" style="width:24px;height:24px" fill="none" viewBox="0 0 24 24" stroke="currentColor" stroke-width="2"><path class="with-check" stroke-linecap="round" stroke-linejoin="round" d="M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2m-6 9l2 2 4-4"></path><path class="without-check" stroke-linecap="round" stroke-linejoin="round" d="M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2"></path></svg></span><pre class="shiki dark-plus" style="background-color: #1E1E1E" tabindex="0"><code><span class="line"><span style="color: #9CDCFE">REACT_APP_API_URL</span><span style="color: #D4D4D4">=</span><span style="color: #CE9178">https://api.example.com</span></span>
<span class="line"><span style="color: #9CDCFE">REACT_APP_VERSION</span><span style="color: #D4D4D4">=</span><span style="color: #B5CEA8">1.0</span><span style="color: #CE9178">.0</span></span></code></pre></div>



<ol start="3" class="wp-block-list">
<li>アプリ内で参照</li>
</ol>



<div class="wp-block-kevinbatdorf-code-block-pro" data-code-block-pro-font-family="Code-Pro-JetBrains-Mono" style="font-size:.875rem;font-family:Code-Pro-JetBrains-Mono,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;line-height:1.25rem;--cbp-tab-width:2;tab-size:var(--cbp-tab-width, 2)"><span style="display:block;padding:16px 0 0 16px;margin-bottom:-1px;width:100%;text-align:left;background-color:#1E1E1E"><svg xmlns="http://www.w3.org/2000/svg" width="54" height="14" viewBox="0 0 54 14"><g fill="none" fill-rule="evenodd" transform="translate(1 1)"><circle cx="6" cy="6" r="6" fill="#FF5F56" stroke="#E0443E" stroke-width=".5"></circle><circle cx="26" cy="6" r="6" fill="#FFBD2E" stroke="#DEA123" stroke-width=".5"></circle><circle cx="46" cy="6" r="6" fill="#27C93F" stroke="#1AAB29" stroke-width=".5"></circle></g></svg></span><span role="button" tabindex="0" data-code="const api = process.env.REACT_APP_API_URL;" style="color:#D4D4D4;display:none" aria-label="Copy" class="code-block-pro-copy-button"><svg xmlns="http://www.w3.org/2000/svg" style="width:24px;height:24px" fill="none" viewBox="0 0 24 24" stroke="currentColor" stroke-width="2"><path class="with-check" stroke-linecap="round" stroke-linejoin="round" d="M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2m-6 9l2 2 4-4"></path><path class="without-check" stroke-linecap="round" stroke-linejoin="round" d="M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2"></path></svg></span><pre class="shiki dark-plus" style="background-color: #1E1E1E" tabindex="0"><code><span class="line"><span style="color: #569CD6">const</span><span style="color: #D4D4D4"> </span><span style="color: #4FC1FF">api</span><span style="color: #D4D4D4"> = </span><span style="color: #9CDCFE">process</span><span style="color: #D4D4D4">.</span><span style="color: #9CDCFE">env</span><span style="color: #D4D4D4">.</span><span style="color: #4FC1FF">REACT_APP_API_URL</span><span style="color: #D4D4D4">;</span></span></code></pre></div>



<h2 class="wp-block-heading">カスタムテンプレートで拡張</h2>



<div class="wp-block-kevinbatdorf-code-block-pro" data-code-block-pro-font-family="Code-Pro-JetBrains-Mono" style="font-size:.875rem;font-family:Code-Pro-JetBrains-Mono,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;line-height:1.25rem;--cbp-tab-width:2;tab-size:var(--cbp-tab-width, 2)"><span style="display:block;padding:16px 0 0 16px;margin-bottom:-1px;width:100%;text-align:left;background-color:#1E1E1E"><svg xmlns="http://www.w3.org/2000/svg" width="54" height="14" viewBox="0 0 54 14"><g fill="none" fill-rule="evenodd" transform="translate(1 1)"><circle cx="6" cy="6" r="6" fill="#FF5F56" stroke="#E0443E" stroke-width=".5"></circle><circle cx="26" cy="6" r="6" fill="#FFBD2E" stroke="#DEA123" stroke-width=".5"></circle><circle cx="46" cy="6" r="6" fill="#27C93F" stroke="#1AAB29" stroke-width=".5"></circle></g></svg></span><span role="button" tabindex="0" data-code="npx create-react-app my-app --template typescript
npx create-react-app my-app --template redux" style="color:#D4D4D4;display:none" aria-label="Copy" class="code-block-pro-copy-button"><svg xmlns="http://www.w3.org/2000/svg" style="width:24px;height:24px" fill="none" viewBox="0 0 24 24" stroke="currentColor" stroke-width="2"><path class="with-check" stroke-linecap="round" stroke-linejoin="round" d="M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2m-6 9l2 2 4-4"></path><path class="without-check" stroke-linecap="round" stroke-linejoin="round" d="M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2"></path></svg></span><pre class="shiki dark-plus" style="background-color: #1E1E1E" tabindex="0"><code><span class="line"><span style="color: #DCDCAA">npx</span><span style="color: #D4D4D4"> </span><span style="color: #CE9178">create-react-app</span><span style="color: #D4D4D4"> </span><span style="color: #CE9178">my-app</span><span style="color: #D4D4D4"> </span><span style="color: #569CD6">--template</span><span style="color: #D4D4D4"> </span><span style="color: #CE9178">typescript</span></span>
<span class="line"><span style="color: #DCDCAA">npx</span><span style="color: #D4D4D4"> </span><span style="color: #CE9178">create-react-app</span><span style="color: #D4D4D4"> </span><span style="color: #CE9178">my-app</span><span style="color: #D4D4D4"> </span><span style="color: #569CD6">--template</span><span style="color: #D4D4D4"> </span><span style="color: #CE9178">redux</span></span></code></pre></div>



<p class="wp-block-paragraph"><code>cra-template-◯◯</code> 形式で公開されたテンプレートを利用することで、TypeScript、Redux、Styled-Components など好みの初期構成を選べます。</p>



<h2 class="wp-block-heading">「もっと細かく設定したい」と思ったら</h2>



<h3 class="wp-block-heading">1. <code>npm run eject</code></h3>



<p class="wp-block-paragraph">設定をすべてプロジェクトに書き出し、Webpack/Babel を自由に編集。取り消しできないため、チームで合意してから行いましょう。</p>



<h3 class="wp-block-heading">2. 公式が用意した環境変数</h3>



<p class="wp-block-paragraph"><code>INLINE_RUNTIME_CHUNK=false</code> など、ビルド挙動を変える環境変数が用意されています。軽微な調整なら eject せずに対応できます。</p>



<h2 class="wp-block-heading">デプロイ手順</h2>



<ol class="wp-block-list">
<li><strong>ビルド</strong> </li>
</ol>



<div class="wp-block-kevinbatdorf-code-block-pro" data-code-block-pro-font-family="Code-Pro-JetBrains-Mono" style="font-size:.875rem;font-family:Code-Pro-JetBrains-Mono,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;line-height:1.25rem;--cbp-tab-width:2;tab-size:var(--cbp-tab-width, 2)"><span style="display:block;padding:16px 0 0 16px;margin-bottom:-1px;width:100%;text-align:left;background-color:#1E1E1E"><svg xmlns="http://www.w3.org/2000/svg" width="54" height="14" viewBox="0 0 54 14"><g fill="none" fill-rule="evenodd" transform="translate(1 1)"><circle cx="6" cy="6" r="6" fill="#FF5F56" stroke="#E0443E" stroke-width=".5"></circle><circle cx="26" cy="6" r="6" fill="#FFBD2E" stroke="#DEA123" stroke-width=".5"></circle><circle cx="46" cy="6" r="6" fill="#27C93F" stroke="#1AAB29" stroke-width=".5"></circle></g></svg></span><span role="button" tabindex="0" data-code="npm run build" style="color:#D4D4D4;display:none" aria-label="Copy" class="code-block-pro-copy-button"><svg xmlns="http://www.w3.org/2000/svg" style="width:24px;height:24px" fill="none" viewBox="0 0 24 24" stroke="currentColor" stroke-width="2"><path class="with-check" stroke-linecap="round" stroke-linejoin="round" d="M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2m-6 9l2 2 4-4"></path><path class="without-check" stroke-linecap="round" stroke-linejoin="round" d="M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2"></path></svg></span><pre class="shiki dark-plus" style="background-color: #1E1E1E" tabindex="0"><code><span class="line"><span style="color: #DCDCAA">npm</span><span style="color: #D4D4D4"> </span><span style="color: #CE9178">run</span><span style="color: #D4D4D4"> </span><span style="color: #CE9178">build</span></span></code></pre></div>



<ol start="2" class="wp-block-list">
<li><strong>ホスティング</strong>
<ul class="wp-block-list">
<li>GitHub Pages</li>



<li>Netlify / Vercel</li>



<li>Firebase Hosting</li>
</ul>
</li>



<li><strong>SPAルーティング</strong><br>ルート以外の URL でも <code>index.html</code> を返す設定が必要。ホスティングごとのリライトルールを追加しましょう。</li>
</ol>



<h2 class="wp-block-heading">Q&amp;A：よくある疑問</h2>



<figure class="wp-block-table"><div class="scrollable-table"><table class="has-fixed-layout"><thead><tr><th>疑問</th><th>回答</th></tr></thead><tbody><tr><td>後から TypeScript に変えたい</td><td><code>npm i --save typescript @types/node @types/react @types/react-dom</code> を追加し、ファイル拡張子を <code>.tsx</code> に変更</td></tr><tr><td>モジュールエイリアスを使いたい</td><td>ルートに <code>jsconfig.json</code> を追加し <code>baseUrl</code> と <code>paths</code> を設定</td></tr><tr><td>React 18 は使える？</td><td>最新の CRA は React 18 対応。<code>npm i react@18 react-dom@18</code> でアップグレード可能</td></tr></tbody></table></div></figure>



<h2 class="wp-block-heading">まとめ</h2>



<p class="wp-block-paragraph">Create React App は「React をすぐ始めたい」「設定で迷いたくない」という開発者の強い味方です。</p>



<ul class="wp-block-list">
<li><strong>インストールは1行</strong>：<code>npx create-react-app my-app</code></li>



<li><strong>開発は<code>npm start</code>、本番は<code>npm run build</code></strong></li>



<li><strong>カスタムテンプレートや環境変数</strong>で柔軟に拡張</li>



<li>大規模開発や特殊ビルドが必要になったら <code>npm run eject</code> や Vite への移行を検討</li>
</ul>



<p class="wp-block-paragraph">まずはサンプルアプリを作り、コンポーネントを編集しながら動作を確かめてみましょう。React の学習がスムーズに進むはずです。</p>
]]></content:encoded>
					
					<wfw:commentRss>https://techgrowup.net/react-create-react-app/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
	</channel>
</rss>

<!--
Performance optimized by W3 Total Cache. Learn more: https://www.boldgrid.com/w3-total-cache/?utm_source=w3tc&utm_medium=footer_comment&utm_campaign=free_plugin

Disk: Enhanced  を使用したページ キャッシュ

Served from: techgrowup.net @ 2026-07-09 14:33:32 by W3 Total Cache
-->