はじめに
フロントエンド開発が進化する中で、より速く、効率的に開発を進められるツールへの需要が高まっています。その中でも、近年注目を集めているのが Vite(ヴィート)です。本記事では、Viteの基本的な特徴や利点を解説しつつ、Reactを用いた実際のプロジェクトセットアップ方法や、便利な機能の活用法について紹介します。Viteを活用することで、開発スピードや体験がどれほど向上するのか、その魅力をぜひ体感してください。
今回の記事のゴール
Viteのセットアップを行いReactを起動できるようにします。
その後は本番環境と開発環境など環境の切り替えを行う方法やエイリアスを設定しモジュールのインポートを簡単にする設定などをご紹介します。
viteとは
Vite(ヴィート)は、フロントエンド開発のための次世代ビルドツールです。「速い」という意味のフランス語「vite」に由来しています。その特徴と利点をまとめると次の通りです。
特徴
-
高速な開発サーバー
ViteはネイティブのESモジュール(ESM)を利用することで、従来のバンドルツールと異なり、すべてのモジュールを事前にバンドルする必要がありません。これにより、プロジェクトが大規模でも、ほぼ即座に開発サーバーを立ち上げられます。 -
オンデマンドのモジュールロード
必要なモジュールだけを動的にロードするため、ページをリロードする際のパフォーマンスが向上します。 -
高速なビルド
ViteはRollupを内部で使用しており、ツリーシェイキングやコードスプリッティングなど、効率的なビルドを提供します。さらに、依存関係は一度だけ事前バンドルされるため、繰り返しのビルドも高速です。 -
プラグインシステム
ViteはRollupのプラグインを活用でき、カスタマイズ性が高いのも魅力です。Vite専用のプラグインも多く提供されています。 -
豊富なフレームワーク対応
Vue.js、React、Svelte、Preactなどのフレームワークを簡単にセットアップできます。公式テンプレートやプラグインが用意されているため、すぐに利用可能です。 -
HMR(ホットモジュールリプレースメント)
コードを編集すると、変更内容がリアルタイムでブラウザに反映されます。これにより、開発体験が大幅に向上します。
ViteでReactを起動
早速、プロジェクトを作成しReactを起動してみます。
下記のコマンドでプロジェクトが作成できます。
あとは対話型で幾つか選択肢が出てきますので今回の要件に合わせていきます。
npm create vite@latest
- Project name:
vite-project
- Select a framework:
React
- Select a variant:
TypeScript + SWC
以上でプロジェクトが作成できました。
画面にも表示されていますのでパッケージをインストールしてReactを起動してみます。
cd vite-project
npm install
npm run dev
Reactの起動ができました。
真ん中にあるボタンをクリックするとカウントアップしていきます。
あまりにもあっさり動いてしまい仕組みが全くわからないと思いますので少しずつ見ていきたいと思います。
コマンドラインの解説
package.json
を開くとコマンドが用意されています。
"scripts": {
"dev": "vite",
"build": "tsc -b && vite build",
"lint": "eslint .",
"preview": "vite preview"
},
開発サーバーを立ち上げるには先ほどのnpm run dev
で問題ありません。
コードを編集すると変更を検知して再ビルド、表示まで自動で行われます。
ビルドするにはnpm run build
を行います。
デフォルトではdist
フォルダにhtml
, css
, js
その他画像などが出力されます。
npm run build
ビルドしたファイルを確認したい場合はnpm run preview
を実行します。
vite
が内蔵しているサーバーでビルド済みのファイルを確認できます。
npm run preview
環境変数とモード
VITEでは現在開発モードなのか本番環境で起動しているのかをimport.meta.env
で簡単に取得できます。
サンプルで用意されたコードを少し修正します。
function App() {
const isDev = import.meta.env.DEV
return (
<>
{isDev ? '開発モード' : '本番モード'}
</>
)
}
export default App
import.meta.env.DEV
はアプリが開発で動作しているかをboolean
で返します。
import { StrictMode } from 'react'
import { createRoot } from 'react-dom/client'
- import './index.css'
import App from './App.tsx'
createRoot(document.getElementById('root')!).render(
<StrictMode>
<App />
</StrictMode>,
)
そのため下記コマンドで起動すると開発モード
と表示され
npm run dev
下記コマンドで起動すると本番モード
と表示されます。
npm run build
npm run preview
今回は文字で切り替えを行いましたがcssで背景を切り替えるなどすることで現在自分がアクセスしているのが開発環境なのか本番環境なのかを分かりやすく区別することも可能です。
Viteの設定
vite.config.ts
ファイルでViteの設定を行うことが可能です。
基本的な構造
こちらの設定では開発環境での起動に関する設定です。ポート番号の指定と自動でブラウザを開く設定となります。
import { defineConfig } from 'vite';
import react from '@vitejs/plugin-react';
// https://vite.dev/config/
export default defineConfig({
plugins: [react()],
+ server: {
+ port: 3000, // 開発サーバーのポートを指定
+ open: true, // 開発サーバー起動時にブラウザを自動で開く
+ },
});
エイリアスの設定
長い相対パスを短くするためにエイリアスを設定する方法です。
簡単な動作確認をしながら設定したいと思います。
新しくcomponents
ディレクトリを作成しコンポーネントを作成します。
const SampleComponent = () => {
return (
<div>
sample
</div>
)
}
export default SampleComponent
型エラーが発生しましたらtsconfig.app.json
ファイルを修正します。
{
"compilerOptions": {
"tsBuildInfoFile": "./node_modules/.tmp/tsconfig.app.tsbuildinfo",
"target": "ES2020",
"useDefineForClassFields": true,
"lib": ["ES2020", "DOM", "DOM.Iterable"],
"module": "ESNext",
"skipLibCheck": true,
/* Bundler mode */
"moduleResolution": "bundler",
"allowImportingTsExtensions": true,
"isolatedModules": true,
"moduleDetection": "force",
"noEmit": true,
"jsx": "react-jsx",
/* Linting */
"strict": true,
"noUnusedLocals": true,
"noUnusedParameters": true,
"noFallthroughCasesInSwitch": true,
"noUncheckedSideEffectImports": true
},
- "include": ["src"]
+ "include": ["src", "components"]
}
それを読み込むコンポーネント
import SampleComponent from "../../components/Sample"
function Test() {
return (
<div>
<SampleComponent />
</div>
)
}
export default Test
まださほど深い階層ではないので問題にはならないかもしれませんが開発が進んでいくと階層がどんどん深くなるかと思います。
こちらについてエイリアスを使って短縮して表示させるよう対応していきます。
まずはvite.config.ts
で設定を変更します。
npm install --save-dev @types/node
import { defineConfig } from 'vite'
import react from '@vitejs/plugin-react-swc'
import path from 'path';
// https://vite.dev/config/
export default defineConfig(() => {
return {
plugins: [react()],
resolve: {
alias: {
'@': path.resolve(__dirname, './src'),
'@components': path.resolve(__dirname, './components'),
},
},
};
});
次にtsconfig.app.json
の設定も変更します。
{
"compilerOptions": {
"tsBuildInfoFile": "./node_modules/.tmp/tsconfig.app.tsbuildinfo",
"target": "ES2020",
"useDefineForClassFields": true,
"lib": ["ES2020", "DOM", "DOM.Iterable"],
"module": "ESNext",
"skipLibCheck": true,
/* Bundler mode */
"moduleResolution": "bundler",
"allowImportingTsExtensions": true,
"isolatedModules": true,
"moduleDetection": "force",
"noEmit": true,
"jsx": "react-jsx",
/* Linting */
"strict": true,
"noUnusedLocals": true,
"noUnusedParameters": true,
"noFallthroughCasesInSwitch": true,
"noUncheckedSideEffectImports": true,
+ "baseUrl": ".",
+ "paths": {
+ "@/*": ["src/*"],
+ "@components/*": ["components/*"]
+ }
},
- "include": ["src"]
+ "include": ["src", "components"]
}
設定を変更するとエディタ上でもエイリアスを使った表示に切り替わっています。
このようにエイリアスを使用することで、深いディレクトリ構造があっても、インポートが見やすくなり、コードの可読性が向上します。
- import SampleComponent from "../../components/Sample"
+ import SampleComponent from "@components/Sample"
function Test() {
return (
<div>
<SampleComponent />
</div>
)
}
export default Test
エイリアスを設定する利点
- 可読性の向上: 長い相対パスを使わなくても済むため、コードが簡潔になります。
- リファクタリングが容易: プロジェクト構造を変更しても、エイリアスを更新するだけで対応可能です。
- バグ防止: 間違った相対パスを指定するリスクを減らします。
エイリアスの設定は、特にプロジェクトが大規模化するほど、開発効率を向上させる強力な手段です。
さいごに
Viteは、軽量で高速、そして柔軟性に富んだフロントエンドビルドツールとして、多くの開発者から支持を集めています。本記事では、その特徴やReactプロジェクトでの活用例、環境変数の使用方法やカスタマイズのポイントをお伝えしました。Viteを導入することで、開発体験が大きく向上し、コードを書く楽しさを再発見できるでしょう。ぜひ、Viteを使ったプロジェクトに挑戦し、そのスピード感と利便性を実感してみてください。
関連する技術ブログ
React Router v7(フレームワーク利用) 実践ガイド:ブログサイトを作りながら学ぶサーバーサイド、クライアントサイドのレンダリング
React Router v7のフレームワーク機能を使ったブログサイト構築のステップバイステップガイド。JSON Placeholderを活用して投稿データを取得し、トップページにレンダリングする仕組みを詳細に紹介。スピナーの導入や実践的な設定も含めた、実用的なガイドです。
shinagawa-web.com
React Router v7(フレームワーク利用) 実践ガイド:ブログサイトを作りながら学ぶ最新ルーティング
React Router v7のフレームワーク機能を使ったブログサイト構築のステップバイステップガイド。トップページや動的ルーティング、セグメントの実装例を交えて、新しいルーティング機能を活用する方法を解説します。
shinagawa-web.com
React Router v7(ライブラリ利用)を使ったブログサイトの構築ガイド
React Router v7を使用して、ブログサイトを構築するための基本的なルーティング設定を紹介します。動的セグメント、個別記事の表示、ネストされたルートなどを活用して、効率的なページ遷移を実現する方法を学べます。
shinagawa-web.com
スキーマ駆動開発の実践:React × Express × GraphQLで効率的なAPI設計を実現
GraphQLを活用したスキーマ駆動開発(Schema-Driven Development, SDD)の実践方法を解説します。React(フロントエンド)とExpress(バックエンド)を組み合わせ、GraphQLスキーマを基にAPI設計を進めることで、型安全性と開発効率を向上させる手法を紹介します。GraphQL Code Generatorを用いた型定義の自動生成、スキーマ設計のベストプラクティス、Turborepoによるモノレポ構成についても詳しく解説します。
shinagawa-web.com
フロントエンドのテスト自動化戦略:Jest・Playwright・MSW を活用したユニット・E2E・API テスト最適化
フロントエンド開発において、品質を担保しながら効率的に開発を進めるためには、適切なテストの自動化が不可欠です。本記事では、Jest や Vitest を活用したユニットテストの導入・強化、React Testing Library や Storybook との統合によるコンポーネントテストの最適化、Playwright / Cypress を用いた E2E テストの拡充について詳しく解説します。さらに、Supertest や MSW を活用した API テストの自動化、Faker / GraphQL Mock によるモックデータの整理、CI/CD パイプラインにおける並列実行やキャッシュ活用による最適化など、テストを効果的に運用するための手法を紹介。また、Codecov / SonarQube によるテストカバレッジの可視化や、フィーチャーフラグを考慮したテスト戦略の策定についても解説し、実践的なアプローチを提案します。テストの信頼性と効率を向上させ、開発プロセスを強化したいフロントエンドエンジニア必見の内容です。
shinagawa-web.com
Webアクセシビリティの完全ガイド:Lighthouse / axe による自動テスト、WCAG基準策定、キーボード操作・スクリーンリーダー対応まで
Webアクセシビリティの課題を解決するための包括的なガイド。Lighthouse / axe を活用した自動テストの設定、WCAGガイドラインに基づく評価基準の整備、キーボード操作やスクリーンリーダー対応の改善、カラーコントラストの最適化、ARIAランドマークの導入、フォームやモーダルの操作性向上まで詳しく解説。定期的なアクセシビリティレポートを活用し、継続的な改善を実現する方法も紹介します。
shinagawa-web.com
チャットアプリ(画像・PDF送信、ビデオ通話機能付き)
お客様固有の要件を除き一般的なチャットアプリに求められる最低限の機能を実装しデモアプリとしてご紹介いたします。
shinagawa-web.com
React × Tailwind CSS × Emotionで実践するコンポーネント設計ガイド:デザインシステム・状態管理・再利用性の最適解
React、Tailwind CSS、Emotion、Storybook、Figma、Next.jsを活用したコンポーネント設計のベストプラクティスを紹介。デザインシステムに基づく命名規則、適切な状態管理、再利用性を高める抽象化、アクセシビリティ対応、スタイルガイドラインの整備、テーマ設定、バージョン管理、ドキュメント作成まで、モダンフロントエンド開発に欠かせない知識を徹底解説します。
shinagawa-web.com
弊社の技術支援サービス
無駄なコストを削減し、投資対効果を最大化する
クラウド費用の高騰、不要なSaaSの乱立、開発工数の増加――これらの課題に悩んでいませんか?本サービスでは、クラウドコストの最適化、開発効率向上、技術選定の最適化 を通じて、単なるコスト削減ではなく、ROIを最大化する最適解 をご提案します。
shinagawa-web.com
最新技術の導入・検証を支援するPoCサービス
Remix、React Server Components、TypeScript移行、クラウドサービス比較、マイクロサービス、サーバーレス、デザインシステムなど、最新技術のPoC(概念実証)を通じて、最適な技術選定と導入を支援します。貴社の開発課題に合わせた検証・実装で、ビジネスの成長を加速させます。
shinagawa-web.com
開発生産性を最大化するための支援サービス
開発チームの生産性向上、コードの品質管理、インフラの最適化まで、様々な側面からサポートします。コードベースのリファクタリングから、テスト自動化、オンボーディング強化まで、プロジェクトの成功に必要なすべての支援を提供。御社の開発現場が効率的に機能するように、技術的な障害を取り除き、スムーズな開発を実現します。
shinagawa-web.com
開発品質向上支援 – 効率的で安定したプロダクトを実現
フロントエンドからバックエンド、データベースまで、開発プロセス全体を最適化し、安定したプロダクト作りをサポートします。コードレビューの仕組み、型定義の強化、E2Eテスト環境の構築など、開発の各ステップにおけるベストプラクティスを導入することで、より効率的でバグの少ない、そしてユーザー満足度の高いサービス提供を支援します。
shinagawa-web.com
Webアプリのセキュリティ強化支援
Webアプリの脆弱性対策からインフラのセキュリティ強化まで、包括的なセキュリティ支援を提供。OWASP Top 10対策、JWT認証の最適化、APIのアクセス制御、依存パッケージの監査、セキュアコーディングの標準化など、実践的なアプローチで開発現場の安全性を向上させます。
shinagawa-web.com
目次
お問い合わせ