Tailwind CSS v4 移行ガイド:変更点とアップグレード方法完全解説(2026年版)
Tailwind v4、マイナーアップデートじゃないです。完全に作り直しました。Rustで新しいエンジン作って、設定方式も変えて、PostCSSプラグインもなくなりました。アップグレード延期していた方向けに、何が変わったか、どう移行するか解説していきます。
本番アプリ3つアップグレードしてみた感想:苦労する価値あります。ビルド時間3-10倍速くなって、CSSサイズも減って、新しい設定方式も慣れたら使いやすいです。
何が変わったのか、各部分をどう移行するのか見ていきましょう。
何が変わった?
移行手順の前に、大きな変更点を押さえておきましょう:
1. Rustで書かれた新エンジン(Oxide)
Tailwind v3はJavaScriptベースのエンジンでした。v4はOxideという、Rustで書かれた新しい高性能エンジンを使用します。単なる書き直しではなく、根本的に高速です:
| 指標 | v3 | v4 | 改善 |
|---|---|---|---|
| 初回ビルド | ~800ms | ~100ms | 8倍高速 |
| インクリメンタルリビルド | ~200ms | ~5ms | 40倍高速 |
| CSS出力サイズ | 24KB | 18KB | 25%削減 |
Rustエンジンにより、より良い並列化と低メモリ使用量も実現しています。開発中のHMR(Hot Module Replacement)が今は本当に瞬時に感じられます。
2. 設定がCSSに移動
これが一番大きな変化です。v3ではtailwind.config.jsで全部設定してましたよね:
// v3: tailwind.config.js module.exports = { theme: { extend: { colors: { primary: '#3b82f6', secondary: '#10b981', }, fontFamily: { sans: ['Inter', 'sans-serif'], }, }, }, }
v4では@themeを使ってCSSファイルの中で設定します:
/* v4: app.css */ @import "tailwindcss"; @theme { --color-primary: #3b82f6; --color-secondary: #10b981; --font-sans: "Inter", sans-serif; }
何がいいか:
- 設定とスタイルが一緒にある
- IDEの補完が効きやすい
- DevToolsで直接確認できる
- 別のJS設定ファイル不要
3. PostCSSプラグインなし
v3では、TailwindはPostCSSプラグインでした:
// v3: postcss.config.js module.exports = { plugins: { tailwindcss: {}, autoprefixer: {}, }, }
v4では、TailwindはスタンドアロンCLIまたはViteプラグインです。互換性のためにPostCSSもサポートされていますが、デフォルトではありません:
// v4: vite.config.ts(推奨) import tailwindcss from '@tailwindcss/vite' export default { plugins: [tailwindcss()], }
# v4: CLI代替 npx @tailwindcss/cli -i input.css -o output.css --watch
4. 自動コンテンツ検出
v3でcontentパスを設定したのを覚えていますか?
// v3: tailwind.config.js module.exports = { content: [ './src/**/*.{js,ts,jsx,tsx,mdx}', './components/**/*.{js,ts,jsx,tsx}', ], }
v4では、Tailwindはプロジェクトを分析してTailwindクラスを使用しているファイルを自動検出します。ほとんどのプロジェクトで設定不要です。カスタマイズが必要な場合:
/* v4: 自動検出のオーバーライド */ @import "tailwindcss"; @source "../node_modules/some-ui-library";
5. ネイティブCSSカスケードレイヤー
v4は(Tailwindのカスタム実装ではなく)ネイティブのCSS @layerを使用します:
/* v4が生成する本物のCSSレイヤー */ @layer theme, base, components, utilities; @layer utilities { .text-primary { color: var(--color-primary); } }
これにより適切なカスケード制御と他のCSSとのより良い統合が得られます。
実際に移行してみる
では実際にやってみましょう。React/Next.jsプロジェクトを例に手順を紹介します。
ステップ1:依存関係の更新
古いTailwindパッケージを削除してv4をインストール:
# v3パッケージを削除 npm uninstall tailwindcss postcss autoprefixer # v4をインストール npm install tailwindcss@latest # Viteを使っている場合、プラグインを追加 npm install @tailwindcss/vite # Next.jsを使っている場合、PostCSS互換パッケージを追加 npm install @tailwindcss/postcss
ステップ2:ビルド設定の更新
Viteプロジェクトの場合:
// vite.config.ts import { defineConfig } from 'vite' import react from '@vitejs/plugin-react' import tailwindcss from '@tailwindcss/vite' export default defineConfig({ plugins: [ react(), tailwindcss(), ], })
Next.jsプロジェクトの場合:
Next.js 15+はTailwind v4をネイティブサポートしています。古いバージョンの場合:
// postcss.config.js(Next.js互換) module.exports = { plugins: { '@tailwindcss/postcss': {}, }, }
スタンドアロンCLIの場合:
# package.jsonのscriptsに追加 "scripts": { "css:build": "npx @tailwindcss/cli -i src/input.css -o dist/output.css", "css:watch": "npx @tailwindcss/cli -i src/input.css -o dist/output.css --watch" }
ステップ3:CSSエントリーポイントの変換
ここで大部分の作業が発生します。メインCSSファイルを書き直す必要があります。
Before(v3):
/* globals.css */ @tailwind base; @tailwind components; @tailwind utilities; /* カスタムスタイルは以下 */ .btn-primary { @apply bg-blue-500 text-white px-4 py-2 rounded; }
After(v4):
/* globals.css */ @import "tailwindcss"; /* カスタムスタイル - @layerを適切に使用 */ @layer components { .btn-primary { @apply bg-blue-500 text-white px-4 py-2 rounded; } }
主な変更点:
@tailwind base/components/utilities→@import "tailwindcss"- カスタムコンポーネントクラスは
@layer componentsでラップ - ユーティリティオーバーライドは
@layer utilitiesへ
ステップ4:tailwind.config.jsを@themeに移行
ここが一番手間がかかるところです。JavaScript設定をCSSカスタムプロパティに書き換えます。
Before(v3設定):
// tailwind.config.js module.exports = { theme: { extend: { colors: { primary: { 50: '#eff6ff', 100: '#dbeafe', 500: '#3b82f6', 600: '#2563eb', 700: '#1d4ed8', }, accent: '#f59e0b', }, spacing: { '18': '4.5rem', '88': '22rem', }, fontSize: { 'xxs': '0.625rem', }, borderRadius: { '4xl': '2rem', }, fontFamily: { sans: ['Inter', 'system-ui', 'sans-serif'], mono: ['JetBrains Mono', 'monospace'], }, screens: { 'xs': '475px', '3xl': '1920px', }, }, }, }
After(v4 @theme):
/* globals.css */ @import "tailwindcss"; @theme { /* 色は--color-*プレフィックス */ --color-primary-50: #eff6ff; --color-primary-100: #dbeafe; --color-primary-500: #3b82f6; --color-primary-600: #2563eb; --color-primary-700: #1d4ed8; --color-accent: #f59e0b; /* スペーシングは--spacing-*プレフィックス */ --spacing-18: 4.5rem; --spacing-88: 22rem; /* フォントサイズは--text-*プレフィックス */ --text-xxs: 0.625rem; /* ボーダー半径は--radius-*プレフィックス */ --radius-4xl: 2rem; /* フォントファミリーは--font-*プレフィックス */ --font-sans: "Inter", system-ui, sans-serif; --font-mono: "JetBrains Mono", monospace; /* ブレークポイントは--breakpoint-*プレフィックス */ --breakpoint-xs: 475px; --breakpoint-3xl: 1920px; }
変数命名チートシート
| v3設定キー | v4 CSS変数プレフィックス | 例 |
|---|---|---|
colors | --color-* | --color-primary-500 |
spacing | --spacing-* | --spacing-18 |
fontSize | --text-* | --text-xxs |
fontFamily | --font-* | --font-sans |
fontWeight | --font-weight-* | --font-weight-medium |
lineHeight | --leading-* | --leading-relaxed |
letterSpacing | --tracking-* | --tracking-wide |
borderRadius | --radius-* | --radius-4xl |
borderWidth | --border-* | --border-3 |
boxShadow | --shadow-* | --shadow-soft |
screens | --breakpoint-* | --breakpoint-xs |
zIndex | --z-* | --z-dropdown |
opacity | --opacity-* | --opacity-15 |
ステップ5:プラグインの処理
ほとんどのv3プラグインは更新が必要か、コアに吸収されました。
Typographyプラグイン:
npm install @tailwindcss/typography@latest
/* v4: CSSでプラグインをインポート */ @import "tailwindcss"; @plugin "@tailwindcss/typography";
Formsプラグイン:
npm install @tailwindcss/forms@latest
@import "tailwindcss"; @plugin "@tailwindcss/forms";
Container Queriesプラグイン:
コアに組み込まれました!プラグイン不要:
<!-- v4でネイティブに動作 --> <div class="@container"> <div class="@md:grid-cols-2">...</div> </div>
ステップ6:非推奨ユーティリティの更新
一部のユーティリティは名前変更または変更されました:
| v3クラス | v4クラス | 備考 |
|---|---|---|
bg-opacity-50 | bg-blue-500/50 | 不透明度修飾子構文 |
text-opacity-75 | text-gray-900/75 | 同じパターン |
decoration-slice | box-decoration-slice | 名前変更 |
decoration-clone | box-decoration-clone | 名前変更 |
overflow-ellipsis | text-ellipsis | 名前変更 |
flex-grow-0 | grow-0 | 簡略化 |
flex-shrink | shrink | 簡略化 |
不透明度修飾子が標準になりました:
<!-- v3 --> <div class="bg-blue-500 bg-opacity-50">...</div> <!-- v4 --> <div class="bg-blue-500/50">...</div>
ステップ7:ダークモードの更新
ダークモードは同じように動作しますが、設定が移動しました:
/* v4: クラスベースのダークモードを有効化 */ @import "tailwindcss"; @variant dark (&:where(.dark, .dark *));
またはデフォルト(prefers-color-scheme)を使用:
/* これがデフォルト - 設定不要 */ @import "tailwindcss";
よくある移行問題と解決策
複数のプロジェクトを移行した後、おそらく遭遇する問題です:
問題1:「Unknown at-rule @tailwind」
エディタ/リンターがまだv3構文を期待しています。
解決策: CSSファイルを@import "tailwindcss"を使うように更新してください。
問題2:カスタムカラーが機能しない
症状: 移行後にbg-primary-500が機能しない。
解決策: カラー変数が正確な命名規則を使用しているか確認:
/* 間違い */ --primary-500: #3b82f6; /* 正解 */ --color-primary-500: #3b82f6;
問題3:Next.jsでPostCSSエラー
症状: PostCSS関連のエラーでビルドが失敗。
解決策: 互換パッケージを使用しているか確認:
npm install @tailwindcss/postcss
// postcss.config.js module.exports = { plugins: { '@tailwindcss/postcss': {}, }, }
問題4:プラグインが読み込まれない
症状: typographyやformsプラグインのクラスが機能しない。
解決策: プラグインはconfigではなくCSS経由で読み込みます:
@import "tailwindcss"; @plugin "@tailwindcss/typography"; @plugin "@tailwindcss/forms";
問題5:コンテンツ検出でファイルが漏れる
症状: 特定のファイルのクラスがCSSを生成しない。
解決策: @sourceでパスを明示的に含める:
@import "tailwindcss"; @source "../node_modules/@your-company/ui-kit/src"; @source "./content/**/*.mdx";
問題6:IDEが新しい構文を認識しない
解決策: VS CodeのTailwind CSS IntelliSense拡張機能を最新バージョンに更新してください。@themeと@pluginを含むv4構文を完全にサポートしています。
パフォーマンス比較:実際の数字
本番のNext.jsアプリ(500以上のコンポーネント)で測定した結果:
| 指標 | v3.4 | v4.0 | 変化 |
|---|---|---|---|
| コールドビルド | 12.3秒 | 1.8秒 | 85%高速化 |
| 開発サーバー起動 | 4.2秒 | 0.8秒 | 81%高速化 |
| HMR更新 | 340ms | 12ms | 96%高速化 |
| 本番CSS | 48KB | 31KB | 35%削減 |
| メモリ使用量 | 180MB | 45MB | 75%減少 |
Oxideエンジン、本当にこれだけ速いです。大きめのプロジェクトなら、パフォーマンスだけで移行する価値あります。
移行チェックリスト
移行にはこのチェックリストを使ってください:
- 依存関係を更新(
tailwindcss@latest、古いパッケージを削除) - 統合方法を選択:Viteプラグイン、PostCSS、またはCLI
-
@tailwindディレクティブを@import "tailwindcss"に変換 -
tailwind.config.jsのテーマをCSSの@themeに移動 - プラグインを
@plugin構文に更新 - 不透明度クラスを修飾子構文に変換(
/50) - 名前変更されたユーティリティを更新
- クラス戦略を使う場合はダークモードを設定
- 非標準コンテンツパスに
@sourceを追加 - 全ページ/コンポーネントで視覚的リグレッションをテスト
- VS Code拡張機能を更新
- 全て動作確認後、古い設定ファイルを削除
アップグレードすべきか?
今すぐアップグレード:
- ビルド時間が辛い場合(v4は5-10倍速い)
- より小さなCSSバンドルが欲しい場合
- 新しいプロジェクトを始める場合
- CSS優先設定アプローチが好みの場合
待つべき場合:
- まだ更新されていないプラグインに大きく依存している場合
- 重要なリリースの途中の場合
- tailwind.config.jsに複雑なプログラマティックロジックがある場合
ほとんどのプロジェクトで、アップグレードは設定の複雑さに応じて1-4時間かかります。パフォーマンス向上は本物です—Tailwind v4はここ数年で最もスムーズなCSSフレームワークアップグレードでした。
まとめ
Tailwind v4、結構大きなアップグレードです。新エンジン、新しい設定方式、新しいデフォルト。@themeを使うCSS優先アプローチ、最初は違和感ありますが使っていくと理にかなってきます。DevToolsで設定確認できるし、IDE補完も効くし、CSSファイルがsingle source of truthになります。
Oxideエンジンの速さ、マーケティングじゃないです。ホットリロード本当に瞬時。コールドビルド本当に5-10倍速い。大きめのプロジェクトなら、これだけで移行する価値あります。
最初はシンプルなプロジェクトで新しい構文に慣れて、それからメインのコードベースに取り組むのがおすすめです。複雑じゃないです、ただ違うだけ。
楽しいスタイリングを。
関連ツールを見る
Pockitの無料開発者ツールを試してみましょう