
Tailwind CSS v4で何が変わった?v3→v4の変更点をまとめて解説
Tailwind CSS v4で変わったポイントを、v3との違いを中心に整理します。CSS-first設定、@theme、設定ファイル、ユーティリティの変更点など、移行前に知っておきたい内容をまとめます。
シリーズ:Tailwind CSS v4 入門
1
v3→v4 変更点まとめ
2
TS + Next.js / Bun セットアップ
3
@theme でデザイントークン管理
4
レスポンシブ・ダークモード実践
5
動的クラスと @source inline()
6
コンポーネント設計パターン集
2025年1月、Tailwind CSS v4.0 が正式リリースされました。
このリリースは「マイナーアップデート」ではありません。 設定ファイルの廃止・エンジンの全面書き換え・CSSネイティブな新構文 など、v3とはアプローチが根本から変わっています。つまり、v3時代に書いた記事・チュートリアル・セットアップ手順はほぼ参考にならなくなってしまいました。
この記事では「v3でどう書いていたか」と「v4でどう変わったか」を横に並べながら、全変更点を初心者にも分かるように整理します。第2回以降のセットアップ・実践記事を読む前に、まずここで全体像をつかんでください。
🎯 この記事のゴール
v4 の「なぜ変わったのか」を理解した上で、主要な変更点を一通り把握できる状態にします。コードを書く前の「頭の地図」を作るのがこの回の目的です。
Tailwind CSS とは何か(おさらい)
Tailwind CSS は「ユーティリティファースト CSS フレームワーク」です。flex ・text-center ・bg-blue-500 のような小さなクラスを HTML に直接書いていくスタイルで、コンポーネントに対して名前を付けてスタイルを定義する従来のアプローチとは一線を画しています。
<!-- 従来のCSS:.card というクラスを定義してスタイルをまとめる -->
<div class="card">こんにちは</div>
<!-- Tailwind:クラスを組み合わせてスタイルを表現する -->
<div class="rounded-lg border border-gray-200 p-6 shadow-sm">こんにちは</div>メリットは「CSSファイルとHTMLを行き来しなくていい」「使われていないCSSが自動で削除される(ツリーシェイク)」など。v3まで多くのプロジェクトで採用されており、npmの週間ダウンロード数は1,000万回を超えています。
v4 リリースの背景:なぜ全面刷新されたのか
v4 は「小さな改善の積み重ね」ではありません。開発チームが掲げた目標は大きく3つありました。
Goal 01
もっとシンプルなセットアップ
v3 ではtailwind.config.js という設定ファイルが必須でした。v4 ではこれを完全になくし、 CSS ファイル1行のインポートだけ で使い始められるようにしました。
Goal 02
CSS のネイティブ機能を活かす
CSS カスタムプロパティ(変数)やカスケードレイヤーなど、モダンブラウザでサポートされた新機能を積極的に活用します。JavaScriptの設定でやっていたことをCSSだけで完結させます。
Goal 03
圧倒的に速いビルド
エンジンをゼロから Rust で書き直し、フルビルドは最大 5倍 、差分ビルドは最大 100倍 の高速化を実現しました(公式ベンチマーク値)。
主要な変更点を一覧で把握する
まず全体像をテーブルで確認してから、各変更点を順番に掘り下げます。
| 項目 | v3 | v4 |
|---|---|---|
| セットアップ | 設定ファイル必須 | CSSのimport 1行 |
| 設定ファイル | tailwind.config.js (JS) | CSSの@theme ブロック |
| PostCSS プラグイン | 必須(tailwind.config.js +autoprefixer ) | オプション(Viteなら不要) |
| コンテンツスキャン | content: [] で手動設定 | 自動検出 |
| テーマカスタマイズ | JS のtheme.extend | CSSの@theme ブロック |
| CSS 変数 | 限定的(プラグイン必要なことも) | すべてのテーマ値が CSS 変数に |
| 動的クラス | safelist / JIT モード | @source inline() |
| ビルド速度 | 基準 | 最大100倍(差分) |
| ブラウザサポート | 広め(古いブラウザも考慮) | モダンブラウザ中心 |
変更① 設定ファイル(tailwind.config.js)が消えた
v3 での最初のつまずきポイントといえば設定ファイルのセットアップでした。v4 ではtailwind.config.js は完全に廃止されています。
v3 のセットアップ
/** @type {import('tailwindcss').Config} */
module.exports = {
content: [
"./src/**/*.{html,js,ts,jsx,tsx}", // スキャン対象を手動で指定
],
theme: {
extend: {
colors: {
brand: "#0ea5e9",
},
},
},
plugins: [],
}; v4 のセットアップ
@import "tailwindcss";
/* テーマのカスタマイズもCSSで書く(後述)*/
@theme {
--color-brand: #0ea5e9;
}🔍 ポイント
JavaScript ファイルが CSS ファイルに置き換わりました。これにより、スタイルに関する設定がすべて CSS の世界で完結するようになっています。「なぜCSSファイルに設定を書くの?」と思うかもしれませんが、後述する@theme の仕組みを理解すると自然に感じるはずです。
変更② コンテンツスキャンが自動化された
v3 では「どのファイルを見てクラスを収集するか」をcontent 配列に手動で書く必要がありました。これを書き忘れると、本番ビルドで使用しているクラスが削除されてスタイルが消える、という事故が頻繁に起きていました。
// v3 : スキャン対象を手動で列挙する必要があった
content: [
"./src/pages/**/*.{js,ts,jsx,tsx}",
"./src/components/**/*.{js,ts,jsx,tsx}",
"./src/app/**/*.{js,ts,jsx,tsx}",
],// v4 : 設定不要 — プロジェクト内を自動でスキャン
/* content 配列の設定は不要 */
/* Tailwind が .gitignore を参照しながら自動でスキャンする */ v4 は.gitignore の内容を参考にnode_modules などを除外しつつ、プロジェクト全体を自動でスキャンします。
⚠️ 注意:動的に生成するクラス名
文字列を結合してクラス名を作っている場合(例:text-${color}-500 )は自動スキャンでは検出できません。この問題と解決策は 第5回「@source inline() の考え方」 で詳しく扱います。
変更③ CSS-First 設計:@theme でカスタマイズする
v4 で最も大きなアーキテクチャの変更が「CSS-First 設計」です。v3 では JavaScript で設定していたテーマのカスタマイズが、v4 では CSS の@theme ブロックに移りました。
v3 のテーマ拡張
theme: {
extend: {
colors: {
brand: {
50: "#e0f2fe",
500: "#0ea5e9",
900: "#0c4a6e",
},
},
fontFamily: {
sans: ["Noto Sans JP", "sans-serif"],
},
spacing: {
18: "4.5rem",
},
},
}, v4 のテーマ拡張
@import "tailwindcss";
@theme {
/* カラー */
--color-brand-50: #e0f2fe;
--color-brand-500: #0ea5e9;
--color-brand-900: #0c4a6e;
/* フォント */
--font-sans: "Noto Sans JP", sans-serif;
/* スペーシング */
--spacing-18: 4.5rem;
} CSS 変数の命名規則(--color-* ・--font-* ・--spacing-* )に従って書けば、自動的にbg-brand-500 ・font-sans ・p-18 などのユーティリティクラスが生成されます。
🔍 なぜ CSS 変数になったのか
テーマ値が CSS 変数として出力されるようになったため、 JavaScript を使わずに CSS だけでテーマ値を参照・上書き できます。たとえばダークモードの切り替えを CSS のcolor-scheme だけで完結させるのが格段に楽になりました。この仕組みを深掘りするのが第3回「@theme でデザイントークン管理」です。
変更④ PostCSS プラグインが(多くの場合)不要になった
v3 では PostCSS を経由してビルドするのが標準的なセットアップでした。postcss.config.js にtailwindcss とautoprefixer を並べる、あの設定です。
// v3 : postcss.config.js — 毎回書いていたボイラープレート
module.exports = {
plugins: {
tailwindcss: {},
autoprefixer: {},
},
};v4 では Vite・Next.js など主要なバンドラー向けの ファーストクラスプラグイン が提供されており、PostCSS を介さずに直接動作します。
// v4 + VITE : vite.config.ts — プラグインを追加するだけ
import { defineConfig } from "vite";
import tailwindcss from "@tailwindcss/vite";
export default defineConfig({
plugins: [
tailwindcss(),
],
});✨ PostCSS も引き続き使える
Vite・Next.js ではないプロジェクトや、既存の PostCSS パイプラインを維持したい場合は@tailwindcss/postcss パッケージを使うことで引き続き PostCSS 経由でのビルドも可能です。移行を急ぐ必要はありません。
変更⑤ Rust 製エンジンによるビルド高速化
v4 の内部エンジン「Oxide」は Rust で書き直されています。JavaScript ベースだった v3 と比べてビルドパフォーマンスが大幅に向上しました。
| ビルドタイプ | v3 | v4(公式発表値) |
|---|---|---|
| フルビルド(初回) | 基準 | 最大 5 倍高速 |
| 差分ビルド(HMR) | 基準 | 最大 100 倍高速 |
開発中のホットリロード(HMR)が劇的に速くなっているため、 「クラスを追加してブラウザに反映されるまでのラグ」がほぼゼロになります。 大規模プロジェクトほど恩恵を感じられます。
変更⑥ ブラウザサポートポリシーの変更
v4 は CSS カスタムプロパティ・カスケードレイヤー(@layer )・color-mix() など、モダンブラウザの新機能をフル活用しています。そのため、 IE11 や古い Safari はサポート外 となりました。
| ブラウザ | v3 サポート | v4 サポート |
|---|---|---|
| Chrome / Edge(最新2世代) | ✓ | ✓ |
| Firefox(最新2世代) | ✓ | ✓ |
| Safari 16.4 以降 | ✓ | ✓ |
| Safari 15 以前 | △ 一部対応 | ✗ 非サポート |
| IE11 | △(プラグインで対応可) | ✗ 非サポート |
業務システムなどで古いブラウザのサポートが必要な場合は、v3 を使い続けることが現実的な選択肢です。一方、モダンな Web アプリ・個人プロジェクトであれば v4 への移行を積極的に検討してください。
💡 v3 のサポート期間は?
v4 リリース時点での公式アナウンスによると、v3 は引き続きバグ修正・セキュリティパッチのサポートが継続されます。急いで移行する必要はなく、プロジェクトの状況に合わせて判断してください。
v3 → v4 移行の全体フロー
既存プロジェクトを v3 から v4 に移行する場合の大まかな手順は以下の通りです。第2回以降で実際にハンズオンしていきますが、ここでは全体の流れだけ把握しておきましょう。
1
パッケージの更新
tailwindcss を v4 に更新。バンドラーに合わせて@tailwindcss/vite または@tailwindcss/postcss をインストールする。
2
tailwind.config.js の内容を CSS に移植
theme.extend に書いていたカラー・フォント・スペーシングを@theme ブロックの CSS 変数に書き直す。
3
CSS ファイルを修正
v3 の@tailwind base;@tailwind components;@tailwind utilities; の3行を@import "tailwindcss"; の1行に置き換える。
4
動作確認・細部の調整
ビルドを実行してスタイルが崩れていないか確認する。動的クラスを使っている箇所は@source inline() の対応が必要(第5回で詳しく解説)。
✨ 公式アップグレードツールがある
npx @tailwindcss/upgrade を実行すると、設定ファイルの変換・CSS の書き換えを自動でやってくれる公式ツールがあります。ただし完全に対応できないケースもあるため、実行後は必ず手動での確認が必要です。
第1回のまとめ
今回学んだこと
- Tailwind CSS v4 は 2025年1月にリリース。設定ファイル廃止・エンジン全面刷新・CSS-First 設計という三本柱で v3 から大きく変わった
tailwind.config.jsが廃止され、セットアップは CSS ファイルへの@import "tailwindcss"1行だけになった- コンテンツスキャンが自動化され、
content配列の手動設定が不要になった - テーマのカスタマイズ
@themeブロック内の CSS 変数で行うようになった(JavaScript からの脱却) - Rust 製エンジン「Oxide」により差分ビルドが最大 100 倍高速化。開発体験が大幅に向上した
- IE11・古い Safari はサポート外。モダンブラウザ中心のプロジェクトで採用を検討する
📌 第1回 まとめ
4 の「なぜ変わったのか」と「何が変わったのか」の全体像を把握できました。次回はいよいよ手を動かすフェーズです。TypeScript + Next.js(または Bun)の環境に v4 を実際にセットアップして、@theme に最初のカスタムカラーを定義するところまで進めます。
📝 ▶ 次回(第2回)
次は「 」です。
