Insights

技術情報

Viteで始めるReact開発 - レンタルサーバー配置まで

これまでフロントエンドのビルドにはWebpackを使ってきましたが、Web上で動作するReactアプリを制作するにあたり、初めてViteを採用しました。

実際に使って感じたWebpackとの違いと、ビルドしたファイルをレンタルサーバーへ配置する手順をまとめます。


プロジェクトの要件

今回の制作物は以下の要件でした。

  • CMSを使わず、React製のSPA(Single Page Application)を静的ファイルとして配信する
  • コンテンツはJSONデータと画像が中心
  • クライアント側ルーティングは使わない(単一ページ構成)
  • レンタルサーバーにFTPで配置する
  • SEOは考慮不要(Webアプリケーション用途)

環境構築の時間を短縮するため、設定の少ないViteを採用しました。

SEOについての注意:
SPAはJavaScriptでコンテンツを動的に生成するため、検索エンジンのクローラーに適切にインデックスされない場合があります。SEOを重視するサイト(コーポレートサイト、ブログ、ECサイトなど)を作る場合は、Next.jsやRemixなどSSR(Server Side Rendering)やSSG(Static Site Generation)に対応したフレームワークを検討してください。


体感で一番違ったのは「待ち時間」

Webpackと比較して大きく違ったのは、開発中の待ち時間と初期設定の少なさです。

  • 開発サーバーの起動が速い
  • ファイル変更後の反映が速い(WebpackにもHMRはありますが、Viteの方が軽量で高速です)
  • デフォルトでJSX変換が動作する(追加のBabel設定が不要)
  • ローダーの明示的な設定が不要

開発中の待ち時間が減ることで、作業が途切れにくくなり、制作効率が上がりました。


WebpackとViteの実用上の違い

両者は開発時のモジュール読み込み方式が異なります。

Webpack

すべてのモジュールをバンドルしてから動かす設計です。開発環境でもバンドル処理の影響を受けやすく、プロジェクトが大きくなると起動やHMRが遅くなりがちです。

Vite

開発時はブラウザのネイティブESM(ES Modules)を利用し、必要なモジュールだけを直接読み込みます。本番ビルド時はRollupでバンドルと最適化を行います(将来的にはRolldownへの移行も予定されています)。

この仕組みの違いにより、Viteは開発中の動作が軽快です。

ブラウザ対応の注意:
ViteはネイティブESMを使用するため、IE11には対応していません。モダンブラウザ(Chrome、Firefox、Safari、Edgeの最新版)が前提となります。


今回使った環境

{
  "dependencies": {
    "react": "^18.2.0",
    "react-dom": "^18.2.0"
  },
  "devDependencies": {
    "vite": "^5.0.0",
    "@vitejs/plugin-react": "^4.2.0"
  }
}

開発サーバー起動:

npm run dev

本番ビルド:

npm run build

vite.config.js の設定

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

export default defineConfig({
  plugins: [react()],
  build: {
    outDir: 'dist',
    assetsDir: 'assets',
    emptyOutDir: true  // デフォルトでtrueだが、意図を明示
  }
});

各設定の意図

@vitejs/plugin-react

公式のReactプラグインを追加するだけでJSX変換が動作します。内部でesbuildを使用しているため高速です。Babel特有の機能(decoratorsなど)を使う場合は追加設定が必要ですが、標準的な構成であれば不要です。

outDir: 'dist'

ビルド結果の出力先ディレクトリを指定します。デフォルト値も dist ですが、設定ファイル上で明示しています。

assetsDir: 'assets'

生成されたJS、CSS、画像ファイルを assets/ 配下にまとめます。出力構造が整理されるため、FTPアップロード時の管理がしやすくなります。

emptyOutDir: true

ビルド前に出力先ディレクトリを空にします(デフォルトで有効ですが明示しています)。古いビルド結果が残らないため、不要なファイルを誤ってサーバーへアップロードするミスを防げます。


画像の扱い

画像は用途に応じて2通りの方法で配置しました。

  • 動的にimportする画像:JSX内で import して使用
  • 静的に配信する画像:public/ ディレクトリに配置

public/ 内のファイルはビルド後も同じパスで参照できるため、JSONデータ内で画像パスを管理する場合に適しています。


レンタルサーバーへの配置

ビルド後に dist/ へ生成されたファイルを、そのままレンタルサーバーにアップロードします。

手順

  1. npm run build でビルドを実行する
  2. FTPクライアント(FileZillaなど)でサーバーに接続する
  3. dist/ の中身を /public_html/ にアップロードする

注意:
公開ディレクトリの名称はサーバーによって異なります。/public_html/、/htdocs/、/www/ など、利用しているサーバーの仕様を確認してください。

サブディレクトリに配置する場合

/app/ のようなサブディレクトリに配置する場合は、vite.config.js に base オプションを追加します。

export default defineConfig({
  base: '/app/',
  // ...
});

今回はドメイン直下で配信するため、base は指定していません(未指定時は自動的に / になります)。


この構成で困らなかった理由

ルーティング不要

単一ページ構成だったため、React Routerなどのクライアント側ルーティングは使用していません。ルーティングを使う場合は、すべてのリクエストを index.html へ内部的にリライトする .htaccess 設定がサーバー側で必要になります。

プラグイン1つで完結

@vitejs/plugin-react を導入するだけで、JSX変換からHMRまで一通り動作しました。

dist出力+FTPアップロード

サーバー側での特別な設定は不要で、dist/ の中身をアップロードするだけで公開できました。


Webpackの方が向いているケースもある

以下のようなケースでは、無理にViteへ移行せずWebpackを使い続ける方が合理的です。

  • 既存案件がWebpack前提で構築されている
  • 独自のローダーやプラグイン資産が多い
  • ビルド要件が複雑で、細かいカスタマイズが必要

まとめ

  • 小〜中規模のReact SPAであれば、Viteで手早く開発を始められる
  • レンタルサーバーへはビルド後の dist の中身を配置するだけで公開できる
  • 初期設定の手間が少なく、開発サーバーの起動や反映が速い
  • モダンブラウザ前提の構成である点には注意が必要
  • SEOが重要なサイトには向かない(SSR/SSG対応フレームワークを検討すべき)

同様の単一ページ構成のReactアプリでは、今後もViteを第一候補として採用する予定です。

お問い合わせ・お見積もりはお気軽に

内容に応じたお見積もりも無料で行います。