「yarn start、なんか遅くない?」

そう感じたことがあるなら、あなたのプロジェクトはすでに移行のサインを出しています。create-react-appは学習用途には優秀ですが、実は開発現場ではほとんど使われなくなっています

この記事を読み終えるころには、たった5ステップでViteへの移行が完了し、体感できるレベルで開発速度が変わります。

create-react-appが「遅い」と言われる本当の理由

多くの駆け出しエンジニアが最初に触れるのが create-react-app(CRA)です。Reactの公式チュートリアルでも紹介されているため、「これが標準なんだ」と思い込んでいる人も多いでしょう。

しかし現実は違います。

CRAの内部はWebpackというバンドラーで動いており、プロジェクトが大きくなればなるほど起動・ビルド時間が指数的に増大します。100ファイルを超えるプロジェクトになると、yarn start だけで10秒以上かかることも珍しくありません。

💡 知っておきたい事実:Reactの公式ドキュメントは2023年に更新され、現在はViteやNext.jsが推奨ツールとして掲載されています。create-react-appは公式リストから外れています。

Viteが「爆速」と呼ばれる理由

Viteはフランス語で「速い」を意味します。名前の通り、その速さが最大の武器です。

CRAとの違いを一言で言うと、「全部まとめてからサーバーを起動するか、必要なものだけ即座に返すか」 の違いです。

  • CRA(Webpack):起動時にすべてのファイルをバンドルしてからサーバーを立ち上げる
  • Vite:ブラウザがリクエストしたファイルだけを即座に変換して返す(ESモジュール方式)

この設計の違いだけで、開発サーバーの起動が数秒〜数十秒 → ほぼ一瞬 に変わります。「ファイルを保存したら即座にブラウザに反映される」体験は、一度味わうと戻れません。

移行手順:5ステップで完了

では実際の移行手順を見ていきましょう。既存のCRAプロジェクトをそのままViteに移行します。

Step 1:必要なパッケージをインストールする

yarn add -D vite @vitejs/plugin-react
yarn remove react-scripts

react-scripts(CRAの本体)を削除し、Viteと ReactプラグインをDevDependenciesに追加します。

Step 2:package.json のスクリプトを書き換える

"scripts": {
  "start": "vite",
  "build": "vite build",
  "preview": "vite preview"
}

これで yarn start を実行したときにViteが起動するようになります。

Step 3:vite.config.js をルート直下に作成する

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

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

Viteの設定ファイルです。Reactプロジェクトで必要な最小限の設定はこれだけです。シンプルさに驚くはずです。

Step 4:index.html を修正・移動する

ファイル移動/public/index.html/index.html(ルート直下)

Viteはルートにある index.html を起点として動作します。CRAは public/ フォルダを参照していたので移動が必要です。

次に index.html の中身を以下の2点修正します。

① %PUBLIC_URL% を削除する

<!-- 変更前 -->
<link rel="icon" href="%PUBLIC_URL%/favicon.ico" />

<!-- 変更後 -->
<link rel="icon" href="/favicon.ico" />

%PUBLIC_URL% はCRA固有の記法です。Viteでは使えないため、シンプルなパスに書き直します。

② index.jsx の読み込みを追加する

<!-- </body>の直前に追加 -->
<script type="module" src="/src/index.jsx"></script>

CRAは index.jsx を自動で読み込んでくれていましたが、Viteでは index.html 内で明示的に指定する必要があります。

Step 5:ファイルの拡張子を変更する

App.js  →  App.jsx
index.js  →  index.jsx

ViteはJSXを含むファイルに .jsx 拡張子が必要です。.js のままだとエラーになります。これを忘れてハマる人が多いので注意しましょう。

移行完了!動作確認

yarn start

サーバーが起動したら http://localhost:5173 にアクセスしてください(CRAは3000番ポートでしたが、Viteのデフォルトは5173です)。

これまでと同じ画面が表示されれば移行成功です。起動の速さを体感してください。

補足:新規プロジェクトをViteで始めるなら

既存プロジェクトではなく、新規でViteを使いたい場合は以下のコマンド一発で完了します。

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

公式推奨のクリーンなテンプレートが自動生成されます。新しいプロジェクトでCRAを使う理由はもうありません。

まとめ:今日やること

やること難易度
既存プロジェクトをViteに移行する★★☆
新規プロジェクトはViteで始める★☆☆
移行後の起動速度の変化に感動する★☆☆

CRAからViteへの移行は手順通りに進めれば30分もかかりません。それだけで毎日の開発体験が別物になります。

「開発ツールは"動けばいい"ではなく"ストレスがない"を基準に選ぶ時代です」

「知ってたけどずっと後回しにしてた」という人が一番多いのがこの移行です。今日やりましょう。