2025年にリリースされたTailwind CSS v4.0は、従来のバージョンから大幅にアップデートされ、設定の簡素化とパフォーマンスの向上を実現しました。この記事では、最新のTailwind CSS v4.0を使ってVite + React + TypeScript環境を効率的に構築する方法を解説します。
パフォーマンスの大幅向上
設定の簡素化
モダンWeb技術への対応
# React + TypeScriptテンプレートでプロジェクト作成
npm create vite@latest my-tailwind-app -- --template react-ts
# プロジェクトディレクトリに移動
cd my-tailwind-app
# 依存関係のインストール
npm install
# Tailwind CSS v4.0とViteプラグインをインストール
npm install tailwindcss @tailwindcss/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()],
})
src/index.cssの内容を以下の1行に置き換え:
@import "tailwindcss";
注意: 従来の@tailwindディレクティブは不要になりました。
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
npm run dev
ブラウザでhttp://localhost:5173を開き、Tailwind CSSが適用されていることを確認してください。
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";
v3.x(従来版):
@tailwind base;
@tailwind components;
@tailwind utilities;
v4.0(新版):
@import "tailwindcss";
@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;
}
}
原因: CSSファイルが正しくインポートされていない
解決策:
src/main.tsxでindex.cssがインポートされているか確認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>,
)
症状: Viteプラグインが認識されない
解決策: @tailwindcss/viteの型定義を確認
// vite.config.ts
import tailwindcss from "@tailwindcss/vite"
// 型エラーが出る場合は明示的に型を指定
import type { Plugin } from 'vite'
const tailwindPlugin = tailwindcss() as Plugin
症状: 本番ビルドでCSSが生成されない
解決策: Viteの設定でプラグインの順序を調整
export default defineConfig({
plugins: [
tailwindcss(), // Reactプラグインより前に配置
react(),
],
})
v4.0では以下の最適化が自動で適用されます:
# 本番ビルドの実行
npm run build
# ビルド結果の確認
npm run preview
// 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>
)
}
開発中に問題が発生した場合は、以下を確認してください:
@tailwindcss/viteプラグインがインストールされているかvite.config.tsでプラグインが正しく設定されているかsrc/index.cssに@import "tailwindcss"が記載されているかsrc/main.tsxでindex.cssがインポートされているか# ノードモジュールとロックファイルを削除
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を基準としています。