Tailwind CSS v4 移行完全ガイド:新エンジン、CSS-first 設定、パフォーマンスの飛躍
前端工程(更新: 2026年5月4日)
Tailwind CSS v4:アトミック CSS の再定義
v4 は段階的なアップグレードではなく、アーキテクチャの書き直しです——新エンジン(Oxide)が 10 倍のビルド速度をもたらし、CSS-first 設定が JS 設定を置き換えます。
| 次元 | v3 | v4 |
|---|---|---|
| エンジン | PostCSS プラグイン | Rust エンジン (Oxide) |
| 設定 | tailwind.config.js |
CSS @theme ディレクティブ |
| コンテンツ検出 | content 配列 |
自動検出 |
| ビルド速度 | 基準 | 10x+ |
| コンテナクエリ | プラグイン | ネイティブ対応 |
| 3D 変換 | プラグイン | ネイティブ対応 |
1. 新エンジン:Oxide
パフォーマンス比較
| 操作 | v3 | v4 | 改善 |
|---|---|---|---|
| フルビルド (1000+ ユーティリティ) | ~500ms | ~50ms | 10x |
| 増分 HMR | ~50ms | ~5ms | 10x |
| 大規模プロジェクト (500+ コンポーネント) | ~2s | ~200ms | 10x |
Oxide は Rust で記述され、Wasm またはネイティブモジュールを通じてビルドツールに統合されます。
2. CSS-first 設定
v3:JS 設定ファイル
// tailwind.config.js
module.exports = {
content: ['./src/**/*.{js,ts,jsx,tsx}'],
theme: {
extend: {
colors: {
brand: '#3b82f6',
},
fontFamily: {
sans: ['Inter', 'sans-serif'],
},
},
},
plugins: [require('@tailwindcss/typography')],
};
v4:CSS 設定
/* app.css */
@import "tailwindcss";
@theme {
--color-brand: #3b82f6;
--font-sans: "Inter", sans-serif;
--breakpoint-xs: 475px;
--spacing-18: 4.5rem;
}
利点:
- 設定が CSS、IDE がネイティブサポート
- JS ランタイム不要
- デザインシステムとの整合が容易
カスタムユーティリティ
@theme {
--animate-fade-in: fade-in 0.3s ease-out;
}
@keyframes fade-in {
from { opacity: 0; transform: translateY(-10px); }
to { opacity: 1; transform: translateY(0); }
}
<div class="animate-fade-in">フェードイン効果</div>
3. 自動コンテンツ検出
v4 では content 配列を手動設定する必要がなくなり、プロジェクト構造から自動推論します:
| フレームワーク | 検出方法 |
|---|---|
| Next.js | app/、src/ を自動スキャン |
| Vite | src/ を自動スキャン |
| Nuxt | components/、pages/ を自動スキャン |
| 汎用 | プロジェクトルートを自動スキャン |
パスを除外する場合:
@import "tailwindcss" source("../src");
/* または除外 */
@import "tailwindcss" source("../src") not("../src/generated");
4. ネイティブコンテナクエリ対応
v3 はプラグインが必要
plugins: [require('@tailwindcss-container-queries')]
// <div class="md:max-w-sm"> → @container
v4 ネイティブ対応
<div class="@container">
<div class="@md:flex-row flex-col">
コンテナ幅 >= md で水平レイアウト
</div>
</div>
@theme {
--container-md: 448px;
}
| コンテナクエリクラス | 意味 |
|---|---|
@container |
コンテナ定義 |
@sm:flex-row |
コンテナ >= sm で flex-row |
@md:grid-cols-2 |
コンテナ >= md で 2 列 |
@lg:hidden |
コンテナ >= lg で非表示 |
5. ネイティブ 3D 変換対応
<div class="rotate-x-45 rotate-y-30 rotate-z-15
perspective-500 translate-z-10
scale-3d scale-x-110 scale-y-90">
3D 変換要素
</div>
| クラス | CSS プロパティ |
|---|---|
rotate-x-45 |
rotateX(45deg) |
rotate-y-30 |
rotateY(30deg) |
rotate-z-15 |
rotateZ(15deg) |
perspective-500 |
perspective(500px) |
translate-z-10 |
translateZ(10px) |
scale-3d |
scale3d() |
backface-hidden |
backface-visibility: hidden |
6. 移行手順
ステップ 1:依存関係のアップグレード
npm install tailwindcss@next @tailwindcss/postcss@next
ステップ 2:PostCSS 設定の更新
// postcss.config.js
module.exports = {
plugins: {
'@tailwindcss/postcss': {}, // 'tailwindcss' を置き換え
},
};
ステップ 3:設定ファイルの移行
/* app.css - 新設定 */
@import "tailwindcss";
/* v3 の theme.extend を移行 */
@theme {
/* colors */
--color-primary: #3b82f6;
--color-secondary: #10b981;
/* fontFamily */
--font-sans: "Inter", "system-ui", sans-serif;
--font-mono: "JetBrains Mono", monospace;
/* spacing */
--spacing-18: 4.5rem;
/* breakpoints */
--breakpoint-xs: 475px;
--breakpoint-3xl: 1920px;
}
ステップ 4:破壊的変更の処理
| v3 の書き方 | v4 の書き方 | 説明 |
|---|---|---|
bg-opacity-50 |
bg-blue-500/50 |
不透明度修飾子 |
overflow-ellipsis |
text-ellipsis |
名称変更 |
shadow-outline |
カスタム | 削除 |
ステップ 5:不要になったプラグインの削除
| プラグイン | v4 の代替 |
|---|---|
@tailwindcss/container-queries |
ネイティブ対応 |
@tailwindcss/3d |
ネイティブ対応 |
@tailwindcss/line-clamp |
ネイティブ対応 (line-clamp-3) |
7. Vite 統合
// vite.config.ts
import tailwindcss from '@tailwindcss/vite';
export default defineConfig({
plugins: [
tailwindcss(),
react(),
],
});
PostCSS ミドルウェア不要——Vite プラグインが直接統合、より高速。
8. よくある移行の落とし穴
1. カスタムカラーが効かない
/* 誤り:--color- プレフィックスがない */
@theme {
--brand: #3b82f6; /* text-brand, bg-brand が生成されない */
}
/* 正解 */
@theme {
--color-brand: #3b82f6; /* text-brand, bg-brand, border-brand が生成される */
}
2. @apply の動作変更
/* v3: @apply は任意のユーティリティを使用可能 */
/* v4: @apply は静的ユーティリティのみ、動的値は不可 */
.button {
@apply bg-blue-500 text-white; /* ✅ */
@apply bg-[#123456]; /* ❌ 直接 CSS を書く */
}
3. プレフィックスモードの変更
/* v3: プレフィックスは JS 設定で */
/* v4: プレフィックスは CSS で */
@import "tailwindcss" prefix(tw);
/* tw-flex, tw-text-lg などが生成される */
9. 推奨される移行戦略
- 新規プロジェクトは v4 を直接使用:移行コストゼロ
- 既存プロジェクトは段階的に移行:v3 と v4 は異なるエントリポイントで共存可能
- まず設定を移行:JS 設定を CSS
@themeに変換 - 次に破壊的変更を処理:公式 codemod を使用
- 最後にプラグインを削除:ネイティブ機能に置き換え
# 公式 codemod
npx @tailwindcss/upgrade@next
#Tailwind CSS#CSS#前端框架#迁移