Maemaemae

Tailwind CSS v4.0とViteでReact + TypeScript環境を構築する完全ガイド

Tailwind CSS v4.0とViteでReact + TypeScript環境を構築する完全ガイド

2025年にリリースされたTailwind CSS v4.0は、従来のバージョンから大幅にアップデートされ、設定の簡素化とパフォーマンスの向上を実現しました。この記事では、最新のTailwind CSS v4.0を使ってVite + React + TypeScript環境を効率的に構築する方法を解説します。

Tailwind CSS v4.0の主要な変更点

革新的な改善

パフォーマンスの大幅向上

設定の簡素化

モダンWeb技術への対応

環境構築手順

ステップ1: Viteプロジェクトの作成

# React + TypeScriptテンプレートでプロジェクト作成
npm create vite@latest my-tailwind-app -- --template react-ts

# プロジェクトディレクトリに移動
cd my-tailwind-app

# 依存関係のインストール
npm install

ステップ2: Tailwind CSS v4.0のインストール

# Tailwind CSS v4.0とViteプラグインをインストール
npm install tailwindcss @tailwindcss/vite

ステップ3: Vite設定の更新

vite.config.tsを以下のように編集:

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

// https://vite.dev/config/
export default defineConfig({
  plugins: [react(), tailwindcss()],
})

ステップ4: CSSファイルの設定

src/index.cssの内容を以下の1行に置き換え:

@import "tailwindcss";

注意: 従来の@tailwindディレクティブは不要になりました。

ステップ5: 動作確認用コンポーネント

src/App.tsxを以下のように更新してテスト:

function App() {
  return (
    <div className="min-h-screen bg-gradient-to-br from-blue-400 to-purple-600 flex items-center justify-center">
      <div className="bg-white p-8 rounded-xl shadow-2xl max-w-md text-center">
        <h1 className="text-3xl font-bold text-gray-800 mb-4">
          Tailwind CSS v4.0
        </h1>
        <p className="text-gray-600 mb-6">
          ViteとReactで構築された高速開発環境
        </p>
        <button className="bg-blue-500 hover:bg-blue-600 text-white px-6 py-3 rounded-lg font-semibold transition-colors">
          始めましょう
        </button>
      </div>
    </div>
  )
}

export default App

ステップ6: 開発サーバーの起動

npm run dev

ブラウザでhttp://localhost:5173を開き、Tailwind CSSが適用されていることを確認してください。

v4.0と従来版の比較

設定ファイルの違い

v3.x(従来版):

// tailwind.config.js が必要
/** @type {import('tailwindcss').Config} */
export default {
  content: [
    "./index.html",
    "./src/**/*.{js,ts,jsx,tsx}",
  ],
  theme: {
    extend: {},
  },
  plugins: [],
}

v4.0(新版):

/* 設定ファイル不要、CSS内で直接設定 */
@import "tailwindcss";

CSSファイルの違い

v3.x(従来版):

@tailwind base;
@tailwind components;
@tailwind utilities;

v4.0(新版):

@import "tailwindcss";

カスタマイゼーション方法

CSS Variables での色定義

@import "tailwindcss";

/* カスタム色の定義 */
:root {
  --color-primary: #3b82f6;
  --color-secondary: #10b981;
}

/* Tailwindクラスで使用可能 */
.bg-primary {
  background-color: var(--color-primary);
}

テーマのカスタマイズ

@import "tailwindcss";

/* カスタムユーティリティの追加 */
@layer utilities {
  .text-gradient {
    background: linear-gradient(45deg, #3b82f6, #8b5cf6);
    -webkit-background-clip: text;
    -webkit-text-fill-color: transparent;
    background-clip: text;
  }
}

よくある問題と解決策

問題1: スタイルが適用されない

原因: CSSファイルが正しくインポートされていない

解決策:

  1. src/main.tsxindex.cssがインポートされているか確認
  2. index.css@import "tailwindcss"が記載されているか確認
// src/main.tsx
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>,
)

問題2: TypeScriptエラー

症状: Viteプラグインが認識されない

解決策: @tailwindcss/viteの型定義を確認

// vite.config.ts
import tailwindcss from "@tailwindcss/vite"

// 型エラーが出る場合は明示的に型を指定
import type { Plugin } from 'vite'
const tailwindPlugin = tailwindcss() as Plugin

問題3: ビルド時のエラー

症状: 本番ビルドでCSSが生成されない

解決策: Viteの設定でプラグインの順序を調整

export default defineConfig({
  plugins: [
    tailwindcss(), // Reactプラグインより前に配置
    react(),
  ],
})

パフォーマンス最適化

開発環境での高速化

v4.0では以下の最適化が自動で適用されます:

本番ビルドの最適化

# 本番ビルドの実行
npm run build

# ビルド結果の確認
npm run preview

TypeScript型定義の活用

カスタムクラス用の型定義

// types/tailwind.d.ts
declare module 'tailwindcss' {
  interface CustomUtilities {
    'text-gradient': string;
    'bg-primary': string;
  }
}

コンポーネントでの型安全性

interface ButtonProps {
  variant: 'primary' | 'secondary' | 'outline';
  size: 'sm' | 'md' | 'lg';
  children: React.ReactNode;
}

const Button: React.FC<ButtonProps> = ({ variant, size, children }) => {
  const baseClasses = "font-semibold rounded-lg transition-colors"

  const variantClasses = {
    primary: "bg-blue-500 hover:bg-blue-600 text-white",
    secondary: "bg-gray-500 hover:bg-gray-600 text-white",
    outline: "border-2 border-blue-500 text-blue-500 hover:bg-blue-50"
  }

  const sizeClasses = {
    sm: "px-3 py-1.5 text-sm",
    md: "px-4 py-2",
    lg: "px-6 py-3 text-lg"
  }

  return (
    <button className={`${baseClasses} ${variantClasses[variant]} ${sizeClasses[size]}`}>
      {children}
    </button>
  )
}

実際の開発フローでの活用

コンポーネント開発例

// components/Card.tsx
interface CardProps {
  title: string;
  description: string;
  imageUrl?: string;
  actions?: React.ReactNode;
}

export const Card: React.FC<CardProps> = ({
  title,
  description,
  imageUrl,
  actions
}) => {
  return (
    <div className="bg-white rounded-xl shadow-lg overflow-hidden hover:shadow-xl transition-shadow">
      {imageUrl && (
        <img
          src={imageUrl}
          alt={title}
          className="w-full h-48 object-cover"
        />
      )}
      <div className="p-6">
        <h3 className="text-xl font-bold text-gray-800 mb-2">{title}</h3>
        <p className="text-gray-600 mb-4">{description}</p>
        {actions && (
          <div className="flex gap-2 justify-end">
            {actions}
          </div>
        )}
      </div>
    </div>
  )
}

トラブルシューティングチェックリスト

開発中に問題が発生した場合は、以下を確認してください:

基本設定の確認

キャッシュ関連

# ノードモジュールとロックファイルを削除
rm -rf node_modules package-lock.json

# 再インストール
npm install

# Viteキャッシュのクリア
npm run dev -- --force

ブラウザ確認

まとめ

Tailwind CSS v4.0は従来版から大幅に改善され、より簡単で高速な開発体験を提供します。主な利点は:

設定の簡素化

パフォーマンス向上

開発体験の向上

新しいプロジェクトでは積極的にv4.0を採用し、効率的なフロントエンド開発を実現しましょう。

参考資料


この記事はTailwind CSS v4.0、Vite 5.x、React 18.x、TypeScript 5.xを基準としています。

Tailwind CSSViteReactTypeScriptv4.0フロントエンド