第29章 Tailwind v4
29.1 v4 が目指したもの
第2章で見たとおり、v4 は「コードネーム Oxide」と呼ばれた新エンジンの開発から始まり、当初は v3.x の一部として計画されていたものが、あまりに大きな変化のため v4.0 として 2025 年 1 月にリリースされました。v4 が目指したのは、大きく 3 つです。
- 速度: ビルドを劇的に速くする。
- モダン CSS の全面採用: ここ数年で進化した CSS の新機能を土台にする。
- 設定の簡素化: 設定を CSS に寄せ、周辺ツールを減らす。
本書はこの v4 を一貫して前提にしてきました。この章では、これまで各所で触れてきた v4 の変更点を、ひとつの見取り図としてまとめます。
29.2 新エンジン(Oxide / Lightning CSS)の内部
v4 のエンジンは、性能が重要な部分を Rust で書き直したものです(第4章)。あわせて、CSS のパース・ベンダープレフィックス付与・@import の解決・圧縮を、Rust 製の高速ツール Lightning CSS が一手に担います。
この刷新により、公式(v4.0 時点)の計測ではフルビルドが約 3.8 倍、増分ビルドが約 8 倍以上速くなりました。同時に、以前は別途必要だった postcss-import や autoprefixer が Tailwind 単体に取り込まれ、周辺ツールの設定が減ったのも大きな実利です(第7章)。
29.3 CSS ファースト設定への全面移行
v4 最大の思想的変化が、設定を JavaScript から CSS へ移したことです(第5章)。
/* v4: 設定は CSS の中に書く */
@import "tailwindcss";
@theme {
--color-brand: oklch(0.45 0.24 264);
--breakpoint-3xl: 120rem;
}
v3 までの tailwind.config.js(JavaScript)は必須ではなくなりました。「CSS のための設定を、CSS で書く」という自然な形への回帰です。しかも第5章で見たとおり、@theme の変数はそのまま CSS 変数として公開されるため、設定とランタイムの値が一致します。
29.4 モダン CSS の全面採用
v4 は「自分で何でも実装する」のではなく、進化したブラウザのネイティブ機能に乗る方針を取りました。具体的には、
- カスケードレイヤー(
@layer): 詳細度の戦いを構造的に解決(第4章)。 - 登録済みカスタムプロパティ(
@property): アニメーション可能な CSS 変数などを実現。 color-mix():bg-black/50の不透明度合成に使用(第12章)。- 論理プロパティ:
padding-inlineなどで多言語(RTL)対応(第10章)。
これは「Tailwind が薄くなった」ことを意味します。ブラウザができることはブラウザに任せ、Tailwind はそれを使いやすくする層に徹する——この方向性は第30章のテーマにもつながります。
29.5 Container Queries・3D transform・@starting-style の標準化
v3 ではプラグインが必要だった、あるいは存在しなかった機能が、v4 でコアに入りました。
- Container Queries(
@container/@md:): 親要素の幅に応じたレイアウト(第14章・第17章)。 - 3D transform(
rotate-x-*など): 立体的な変形(第19章)。 @starting-style(starting:バリアント): JavaScript なしの入場アニメーション(第19章)。
いずれも「モダン CSS をユーティリティのまま使えるようにする」という v4 の性格をよく表しています。
29.6 v3 → v4 移行の実務
既存の v3 プロジェクトを v4 に上げるときの要点です。第7章でも触れた移行ツールが主役です。
npx @tailwindcss/upgrade
このツールは大部分を自動で変換してくれます(Node.js 20 以上が必要)。主な破壊的変更は次のとおりです。
| 項目 | v3 | v4 |
|---|---|---|
| 読み込み | @tailwind base; ... | @import "tailwindcss"; |
| 設定 | tailwind.config.js | CSS の @theme(@config で互換読込も可) |
| 影 | shadow-sm / shadow | shadow-xs / shadow-sm |
| 角丸 | rounded-sm | rounded-xs |
| リング | ring(3px) | ring-3(既定は 1px) |
| アウトライン | outline-none | outline-hidden |
| important の位置 | !bg-red-500 | bg-red-500! |
| 既定のボーダー色 | gray-200 | currentColor |
加えて、v4 はモダンブラウザ(Safari 16.4+ / Chrome 111+ / Firefox 128+)が前提です。古いブラウザを手厚くサポートする必要があるプロジェクトは、無理に上げず v3.4 に留まる判断もありえます。移行は「ツールで自動変換 → 差分を確認 → 手で微修正」の順で、小さく進めるのが安全です。