Tailwind CSS v4 完全ガイド【2026年最新】|Oxide エンジン・CSS-first 設定(@theme / @utility / @source / @custom-variant)・コンテナクエリ・3D Transform・@starting-style・v3 からの移行まで実戦パターンで解説

Tailwind CSS v4 完全ガイド【2026年最新】|Oxide エンジン・CSS-first 設定(@theme / @utility / @source / @custom-variant)・コンテナクエリ・3D Transform・@starting-style・v3 からの移行まで実戦パターンで解説 HTML/CSS

Tailwind CSS は 2025 年 1 月の v4.0 安定版リリースで、ほぼ別物と言えるほど生まれ変わりました。Rust で書き直された Oxide エンジンはフルビルドを 3.78 倍・インクリメンタルビルドを 8.8 倍・キャッシュヒット時を182 倍(ミリ秒 → マイクロ秒)に高速化。設定は tailwind.config.js からCSS ファイル内の @theme ディレクティブへ移行し、「JS 設定不要」のモダンな開発体験に生まれ変わりました。

さらに v3 では個別プラグインが必要だったコンテナクエリ・3D Transform・拡張グラデーション・@starting-styleが標準装備。任意値(grid-cols-15mt-17 等)も設定不要でそのまま書けるダイナミック utilitiesや、not-* バリアント、inset-shadow-*field-sizingcolor-scheme など、モダン CSS の最新機能を一気に取り込んだのが v4 です。

この記事では 2026 年 4 月時点の Tailwind CSS v4.x を前提に、Oxide エンジンの性能、Vite プラグイン / PostCSS / CLI の 3 方式セットアップ、CSS-first 設定(@theme)、自動コンテンツ検出(@source)、新ディレクティブ(@utility / @custom-variant / @layer / @apply)、ダイナミック utilities、コンテナクエリ、3D Transform、グラデーション、@starting-stylenot-*、Cascade Layers、color-mix、Logical Properties、v3 → v4 移行手順、落とし穴までを実戦コードで網羅的に解説します。

スポンサーリンク
  1. 2026 年 4 月時点のバージョンと性能
    1. Oxide エンジンの性能数値
  2. インストール ── 3 方式の使い分け
    1. Vite プラグイン(推奨)
    2. PostCSS プラグイン(Webpack / Next.js など)
    3. Standalone CLI(ビルドツール非依存)
  3. CSS-first Configuration ── @theme ディレクティブ
    1. 既存トークンの上書き・拡張
  4. @source ── 自動コンテンツ検出とスキャン制御
  5. 新ディレクティブ ── @utility / @custom-variant / @layer / @apply
    1. @utility ── カスタムユーティリティを定義
    2. @custom-variant ── カスタムバリアントを定義
    3. @apply ── 既存ユーティリティを組み合わせる
  6. ダイナミック Utilities ── 任意値が設定不要
    1. data 属性バリアント(設定不要)
  7. コンテナクエリ ── プラグイン不要で標準搭載
  8. 3D Transform ── 標準搭載
  9. グラデーション ── 角度・コニック・ラジアル・補間モード
  10. @starting-style ── JS 不要の入場アニメーション
  11. not-* バリアント ── 否定条件
  12. v4.1 で追加された新規 utilities
  13. モダン CSS 基盤を全面採用
  14. v3 → v4 移行手順
    1. 自動では変換されないポイント
  15. 落とし穴と注意点
    1. @theme で –color-* を宣言し忘れる
    2. @import "tailwindcss" の位置
    3. 既存の tailwind.config.js が残っている
    4. content を書いていた慣れでグロブを書き続ける
    5. shadcn/ui テンプレがまだ v3 前提
    6. カラー計算で rgb() を期待しているコード
  16. よくある質問
  17. まとめ

2026 年 4 月時点のバージョンと性能

リリース 時期 主なハイライト
Tailwind v3 2021 年〜 JIT エンジン・tailwind.config.js・プラグイン必要な機能(コンテナクエリ等)
Tailwind v4.0 2025 年 1 月 Rust 製 Oxide エンジン・CSS-first 設定(@theme)・ダイナミック utilities・標準コンテナクエリ・3D Transform・@starting-style・v3 からの移行ツール提供
Tailwind v4.1 2025 年中盤〜 追加の新 variant、inset-shadow-*field-sizingcolor-schemefont-stretch 等のユーティリティ安定化
推奨 2026 年 4 月 Tailwind v4.1 系。新規プロジェクトは最初からこの系列で始める

Oxide エンジンの性能数値

処理 v3(旧 JS エンジン) v4(Oxide) 倍率
フルビルド 378ms 100ms 3.78×
インクリメンタルビルド 44ms 5ms 8.8×
キャッシュヒット時 35ms 192µs 182×
体感する差: HMR(Hot Module Replacement)時の CSS 適用が「340ms → 12ms」にまで短縮され、エディタ側の反映遅延がほぼ消えます。大規模モノレポでも開発サーバーが重くならず、BunDeno 2 のような高速ランタイムと組み合わせると体感速度がさらに伸びます。

インストール ── 3 方式の使い分け

v4 は Vite プラグインPostCSS プラグインCLI の 3 方式で導入できます。フレームワークによって推奨が違います。

Vite プラグイン(推奨)

Vite 系プロジェクトは公式プラグインが最速
# インストール
npm install tailwindcss @tailwindcss/vite
vite.config.ts
import { defineConfig } from "vite";
import tailwindcss from "@tailwindcss/vite";

export default defineConfig({
  plugins: [tailwindcss()],
});
src/style.css ── これだけで動く
@import "tailwindcss";

PostCSS プラグイン(Webpack / Next.js など)

汎用的な PostCSS チェーンで使う
npm install tailwindcss @tailwindcss/postcss
postcss.config.js
export default {
  plugins: { "@tailwindcss/postcss": {} },
};

Standalone CLI(ビルドツール非依存)

単独で CSS を吐くシンプルな使い方
# watch モードで開発
npx @tailwindcss/cli -i src/input.css -o dist/output.css --watch

# 本番ビルド(--minify)
npx @tailwindcss/cli -i src/input.css -o dist/output.css --minify
フレームワーク別の推奨: Astro / Svelte 5 / React 19(Vite 経由)は Vite プラグインNext.jsPostCSS プラグインNuxt 4 は公式モジュール(@nuxtjs/tailwindcss)経由、それ以外の環境は CLI、という住み分けが 2026 年の定石です。

CSS-first Configuration ── @theme ディレクティブ

v4 最大のパラダイムシフトは「設定を CSS ファイル内で宣言する」ことです。tailwind.config.js は不要になり、代わりに @theme ブロックにデザイントークンを書きます。

app/style.css ── 最小構成
@import "tailwindcss";

@theme {
  /* カラーパレット */
  --color-primary-50:  oklch(0.97 0.014 255.1);
  --color-primary-500: oklch(0.54 0.22 258.6);
  --color-primary-900: oklch(0.22 0.12 266.0);

  /* フォント */
  --font-sans: "Inter", "Noto Sans JP", sans-serif;
  --font-mono: "JetBrains Mono", monospace;

  /* ブレイクポイント追加 */
  --breakpoint-3xl: 1920px;

  /* カスタムイージング */
  --ease-snappy: cubic-bezier(0.2, 0, 0, 1);
  --ease-bounce: cubic-bezier(0.68, -0.55, 0.27, 1.55);

  /* カスタムスペーシング基準 */
  --spacing: 0.25rem;
}
自動生成されたユーティリティを使う
<div class="bg-primary-500 text-white font-sans p-8">
  <h1 class="text-3xl">Tailwind v4</h1>
  <p class="mt-4 ease-snappy transition">CSS 変数で全部管理される</p>
</div>

<!-- 3xl ブレイクポイントも自動で追加される -->
<div class="text-base 3xl:text-xl">...</div>
デザイントークンが CSS 変数として露出: @theme に書いた --color-primary-500 はそのまま :root の CSS 変数になります。つまり「style.color = getComputedStyle(...).getPropertyValue('--color-primary-500')」のようにランタイム JS から読めるため、Chart.js などで Tailwind のカラーを引き継ぐ設計が自然に書けます。

既存トークンの上書き・拡張

デフォルト値を置き換える(全カラーをリセットしたい場合)
@import "tailwindcss";

@theme {
  /* Tailwind 既定のカラーを全部削除 → カスタム定義のみ */
  --color-*: initial;

  --color-ink: #111827;
  --color-paper: #fafafa;
  --color-accent: oklch(0.7 0.2 30);
}

@source ── 自動コンテンツ検出とスキャン制御

v4 は プロジェクトルートから自動的に HTML / JSX / Vue / Svelte / Astro / Markdown などを検出します。v3 の content 配列を書く必要がなくなりました。外部 UI ライブラリなど追加スキャンが必要な場所だけ @source で明示します。

@source でライブラリを追加スキャン
@import "tailwindcss";

/* node_modules 内の UI ライブラリもクラス抽出対象にする */
@source "../node_modules/@mycompany/ui-lib";
@source "../node_modules/shadcn-ui";

/* 逆に除外したいファイルがあれば */
@source not "./src/legacy/**/*.html";
自動除外される対象: .gitignore に載っているファイル・バイナリファイル(画像 / 動画 / zip)・node_modules 直下(明示指定がない限り)。v3 の「content: ["./src/**/*.{html,js,ts,jsx,tsx}"] を全部書く」運用が不要になり、グロブ漏れによるクラス消失バグも激減します。

新ディレクティブ ── @utility / @custom-variant / @layer / @apply

@utility ── カスタムユーティリティを定義

独自クラスをプロジェクトに追加
@utility flex-center {
  display: flex;
  align-items: center;
  justify-content: center;
}

@utility card {
  border-radius: 0.75rem;
  background: var(--color-white);
  box-shadow: 0 4px 16px -2px rgb(0 0 0 / 0.1);
  padding: 1.5rem;
}
そのまま使える
<div class="card flex-center">...</div>

@custom-variant ── カスタムバリアントを定義

擬似クラスや複雑セレクタを変数化
/* data-theme="dark" 下のスタイル */
@custom-variant theme-dark (&:where([data-theme="dark"] *));

/* is-active 属性があるときだけ */
@custom-variant active ([data-active] &);

/* フォームがバリデーションエラーの時 */
@custom-variant invalid (&:user-invalid);
variant として使う
<div data-theme="dark">
  <button class="bg-white theme-dark:bg-gray-900">Click</button>
</div>

<input class="border-gray-300 invalid:border-red-500" required type="email" />

@apply ── 既存ユーティリティを組み合わせる

レガシー CSS クラスと混ぜたい時の橋渡し
.btn-primary {
  @apply inline-flex items-center gap-2 rounded-lg px-4 py-2 bg-primary-500 text-white font-medium;
  @apply hover:bg-primary-600 focus-visible:ring-2 focus-visible:ring-primary-400;
}
@apply の使いすぎには注意: v4 の思想は「クラスを HTML に書く」ことで変更箇所を 1 箇所に集約するもの。@apply で独自クラスを量産するとv3 時代の「セマンティッククラス」の再発明になり、Tailwind の利点が薄れます。コンポーネントライブラリを作る・レガシーと共存する場合のみ使うのが健全です。

ダイナミック Utilities ── 任意値が設定不要

v4 は任意の整数値を受け付ける utilityを標準装備しました。v3 では grid-cols-[15] のように arbitrary values 記法が必要だった部分が、そのまま書けます

integer を直接受け付けるクラス群
<!-- グリッド列(v3: grid-cols-[15] → v4: そのまま) -->
<div class="grid grid-cols-15 gap-4">...</div>

<!-- スペーシング(4 の倍数以外も OK) -->
<div class="mt-17 pr-29 w-13">...</div>

<!-- z-index(任意) -->
<div class="z-47">...</div>
スペーシングは –spacing ベースの calc で生成
@theme {
  --spacing: 0.25rem;  /* 1 = 0.25rem = 4px */
}

/* 自動生成ロジック */
.mt-17 { margin-top: calc(var(--spacing) * 17); }   /* 4.25rem */
.w-13  { width: calc(var(--spacing) * 13); }        /* 3.25rem */

data 属性バリアント(設定不要)

data-* をそのまま variant として使う
<button
  data-loading
  class="opacity-60 data-loading:opacity-100 data-loading:animate-pulse"
>
  送信中...
</button>

<!-- 値までマッチ(data-state="open") -->
<div data-state="open" class="data-[state=open]:block hidden">
  Open!
</div>
Radix UI / shadcn/ui との相性: Radix UI は data-statedata-sidedata-orientation などの data 属性を多用します。v4 ならプラグインなしでそのまま variant として書けるため、shadcn/ui 系のコンポーネントが最もスッキリ記述できます。デザインシステム構築の実戦は Claude Code × Tailwind CSS v4 デザインシステム構築ガイド を参照。

コンテナクエリ ── プラグイン不要で標準搭載

@container で親要素のサイズに応答
<div class="@container">
  <div class="grid grid-cols-1 @sm:grid-cols-2 @lg:grid-cols-3">
    <!-- コンテナ幅に応じて列数が変わる(ビューポートではない) -->
  </div>
</div>

<!-- 範囲指定・最大幅指定 -->
<div class="@container">
  <p class="@max-md:hidden">md 以上で表示</p>
  <p class="@min-sm:@max-lg:text-xs">sm 〜 lg の間だけ小さく</p>
</div>
メディアクエリとの使い分け: メディアクエリはビューポート(画面全体)に応答、コンテナクエリは親コンテナに応答。カード・サイドバー・モーダル内コンポーネントなど「親の幅に応じてレイアウトを変えたい」時はコンテナクエリが本質的に正しいアプローチです。レスポンシブデザインの 90% はコンテナクエリで書けるため、慣れると便利です。

3D Transform ── 標準搭載

rotate-x / rotate-y / perspective を HTML だけで
<div class="perspective-distant">
  <article class="transform-3d rotate-x-51 rotate-z-43 transition duration-500 hover:rotate-x-0 hover:rotate-z-0">
    <img src="/card.jpg" alt="" />
  </article>
</div>

グラデーション ── 角度・コニック・ラジアル・補間モード

bg-linear / bg-conic / bg-radial
<!-- 線形(角度指定) -->
<div class="bg-linear-45 from-indigo-500 via-purple-500 to-pink-500">...</div>

<!-- 補間モード(OKLCH は色が鮮やか、sRGB は暗く濁る場合あり) -->
<div class="bg-linear-to-r/oklch from-indigo-500 to-teal-400">...</div>
<div class="bg-linear-to-r/srgb  from-indigo-500 to-teal-400">...</div>

<!-- コニック -->
<div class="size-40 bg-conic from-red-500 via-yellow-500 to-red-500">...</div>

<!-- ラジアル(位置指定) -->
<div class="size-40 bg-radial-[at_25%_25%] from-white to-zinc-900">...</div>

<!-- HSL の長い色相経由(虹色) -->
<div class="size-40 bg-conic/[in_hsl_longer_hue] from-red-600 to-red-600">...</div>
補間モードがデフォルト変更: v4 は bg-linear-to-r(従来の bg-gradient-to-r の新名称)のデフォルト補間が oklab になり、中間色がくすみにくいグラデーションになります。v3 の見た目を維持したい場合は /srgb 修飾子を明示します。

@starting-style ── JS 不要の入場アニメーション

starting:* バリアントで要素の出現アニメーション
<div popover id="menu"
     class="transition-discrete duration-300
            opacity-100 scale-100
            starting:open:opacity-0 starting:open:scale-95">
  <!-- popover が開いた瞬間 opacity-0 scale-95 から始まり、100 / 100 へ補間される -->
  <p>メニュー内容</p>
</div>

<button popovertarget="menu">開く</button>
@starting-style CSS 機能を tailwind が variant 化: ブラウザネイティブの CSS 機能を、Tailwind が starting:* という糖衣で使えるようにしたもの。Framer Motion や GSAP に頼らず、CSS だけでエンター / イグジット遷移が書けるため、モーダル / ポップオーバー / ツールチップの実装がシンプルになります。

not-* バリアント ── 否定条件

通常バリアントを否定条件に
<!-- :not(:hover) 相当 -->
<div class="opacity-75 not-hover:opacity-100">
  hover されていない時は透過 75%、hover されたら 100%
</div>

<!-- メディアクエリの否定 -->
<p class="not-supports-hanging-punctuation:px-4">
  ブラウザが hanging-punctuation 未対応の時だけ余白を付ける
</p>

v4.1 で追加された新規 utilities

ユーティリティ 用途
inset-shadow-* 要素の内側に影。複数レイヤー対応でカード・ボタンに深さを追加
inset-ring-* 要素の内側に ring(境界線)。従来の ring-* の内側版
field-sizing-content <textarea> を入力内容で自動リサイズ
color-scheme-* ブラウザのダークモードスクロールバーを明示制御
font-stretch-* 可変フォント(Variable Fonts)の幅を調整
inert 要素を非インタラクティブに(キーボード・マウス・タッチすべて無効化)

モダン CSS 基盤を全面採用

v4 が出力する CSS の構造
/* Cascade Layers: スタイルの優先順位を明示 */
@layer theme, base, components, utilities;

/* Registered Custom Properties: 型付き CSS 変数 */
@property --tw-gradient-from {
  syntax: "<color>";
  inherits: false;
  initial-value: transparent;
}

/* color-mix() によるオパシティ計算 */
.bg-blue-500\/50 {
  background-color: color-mix(in oklab, var(--color-blue-500) 50%, transparent);
}

/* Logical Properties(RTL 対応自動化) */
.mx-6 {
  margin-inline: calc(var(--spacing) * 6);   /* 旧 margin-left/right を 1 プロパティで */
}
.ps-4 {
  padding-inline-start: calc(var(--spacing) * 4);  /* LTR では左、RTL では右 */
}
ブラウザ要件: v4 はSafari 16.4+ / Chrome 111+ / Firefox 128+ を前提にします。それ以前のブラウザをサポートする必要がある場合は、v3 に留まるか、Autoprefixer / PostCSS-preset-env で互換レイヤを追加してください。2026 年の一般的な業務アプリケーションでは事実上問題ありません。

v3 → v4 移行手順

公式アップグレードツール
# まず v4 に依存を更新
npm install tailwindcss@latest @tailwindcss/vite@latest
#  or @tailwindcss/postcss@latest

# 公式 codemod
npx @tailwindcss/upgrade

# 以下を自動変換:
# - tailwind.config.js の theme → @theme ディレクティブ
# - @tailwind base/components/utilities → @import "tailwindcss"
# - 一部の非推奨クラス名の置換
# - content フィールドの削除(自動検出に任せる)

# 差分を確認してコミット
git diff

自動では変換されないポイント

  • プラグイン依存: @tailwindcss/typography@tailwindcss/forms@tailwindcss/aspect-ratio@tailwindcss/container-queries は v4 で不要になったり別パッケージになったりする。package.json を確認
  • カスタムプラグイン: plugin(function({ addUtilities })...) の JS プラグインは @utility / @custom-variant に手動移行
  • 任意値の書き方: grid-cols-[15] のような arbitrary value は grid-cols-15 のダイナミック版にリファクタできる(必須ではない)
  • @apply の多用: 引き継ぐ前にコンポーネント化を検討
  • カラーパレット: v4 は OKLCH ベースに置き換わったので、特に赤・紫・青系の中間色が微妙に変わる。ブランドカラーが red-500 に依存している場合は視覚的確認を
ブラウザサポート境界の確認: v4 は Safari 16.4 未満をサポートしません。社内システムで古い Safari(例: iOS 15)を使い続けるユーザーが多い場合、移行前にブラウザ利用状況を Analytics で確認してから判断してください。v3 のセキュリティ / バグフィックスは当面継続されますが、新機能は v4 のみ提供されます。

落とし穴と注意点

@theme で –color-* を宣言し忘れる

v4 はデフォルトカラーパレットを自動でロードします。@theme の中で --color-*: initial; を指定しない限り既定が残るため、未使用の色も CSS 変数として出力される点に注意。バンドルサイズを極限まで絞りたい場合は明示的に initial するか、--color-blue-500: のように必要な色だけ個別に上書きします。

@import "tailwindcss" の位置

CSS ファイルの最上部に書く必要があります。ほかの @import やコメントの後に書くとトランスパイラが認識しないことがあるため、1 行目を徹底してください。

既存の tailwind.config.js が残っている

v4 へ移行後も tailwind.config.js が残っていると、一部プラグインやツールがそれを読み取って混乱する場合があります。完全移行後はファイルを削除し、必要ならバックアップを git 履歴に残す運用にします。

content を書いていた慣れでグロブを書き続ける

v4 は自動検出するため @source は「追加スキャン」用途のみ。普通のソースファイルに対して @source "./src/**/*" のように書いても効果がなく、むしろ .gitignore 除外が外れるなど混乱を招きます。必要な時だけ書くのがポイントです。

shadcn/ui テンプレがまだ v3 前提

2026 年 4 月時点で shadcn/ui は v4 対応済みですが、古いブログ記事やテンプレが tailwind.config.js ベースのまま残っていることがあります。公式 CLI(npx shadcn@latest init)を最新版で使えば v4 前提の構成が生成されます。

カラー計算で rgb() を期待しているコード

v4 は色を oklch() ベースで出力するため、JS 側で RGB パースしている箇所(Canvas・Chart.js の一部設定など)で互換性問題が起きます。getComputedStyle で取得した文字列を扱う時は CSS.supports("color", value) や自前パーサで OKLCH / color-mix に対応させてください。

よくある質問

QTailwind v4 は既存の v3 プロジェクトに破壊的変更を強いますか?
A基本はコマンド 1 つ(npx @tailwindcss/upgrade)で大半が変換されますが、JS プラグインを書いていた配色を OKLCH 基準で確認する必要があるSafari 16.4 未満の利用者が多い場合はその都度検討が必要です。多くの業務アプリでは 1〜2 日で移行できますが、カスタマイズが濃いプロジェクトは 1 週間程度見積もるのが現実的です。
QCSS-first 設定(@theme)と従来の JavaScript 設定は共存できますか?
A共存させないのが推奨です。v4 は @theme ベースに統一されており、tailwind.config.js互換モードで読む機能が一応あるものの、両方書くとどちらが優先されるかが曖昧になり事故の元です。移行完了後は config.js を削除し、@theme 1 箇所に集約してください。
Qshadcn/ui や Radix UI と組み合わせられますか?
A完全対応しています。shadcn/ui は v4 対応済みで、npx shadcn@latest init で生成されるテンプレートは @theme ベースの CSS です。Radix UI は data 属性を多用しますが、v4 の data 属性 variant で自然に書けます。デザインシステム構築の実戦手順は Claude Code × Tailwind CSS v4 デザインシステム構築ガイド が詳しいです。
Qv4 でdark: モードはどう書きますか?
A基本の dark:bg-zinc-900 構文は v3 と変わりませんが、切替戦略は @custom-variant で定義できるようになりました。@custom-variant dark (&:where([data-theme="dark"] *)); を書けば、data-theme="dark" 属性ベースの手動切替が可能です。prefers-color-scheme に自動追従したい場合は @custom-variant dark (@media (prefers-color-scheme: dark)); を使います。
Qバンドルサイズは v3 から v4 で変わりましたか?
Av4 は未使用ユーティリティの除去が精密化され、結果の CSS ファイルは一般的なアプリケーションで 15〜30% 減ります。Lightning CSS による minify と併用するとさらに小さくなります。実測は小規模プロジェクトで 30KB → 22KB、大規模で 120KB → 85KB 程度が典型例です。
QVite プラグインと PostCSS プラグインはどう選ぶべきですか?
AVite 系(React + Vite・Svelte 5Astroは Vite プラグインが最速。Next.js は PostCSS が公式推奨。Nuxt 4@nuxtjs/tailwindcss が v4 対応済みなのでそれを使う。その他のビルドツール(Webpack / Rollup 単独 / esbuild)では PostCSS、ビルドツールなしなら CLI。迷ったらフレームワーク公式テンプレートの流儀に従うのが正解です。
QCI で Tailwind ビルド時間を短縮するには?
AOxide エンジン自体が既に高速なため追加最適化の余地は小さいですが、① BunDeno 2install を短縮、② GitHub Actionssetup-node cache: npm + actions/cache.turbo / .next/cache を保存、③ Turborepo の incremental build で CSS 出力もキャッシュ、の 3 段構えで数秒まで落とせます。
QOKLCH ベースになって何が変わりますか?
Av3 の HSL / RGB 定義のパレットが、v4 では知覚的に均一な OKLCH 色空間で再定義されています。結果として中間色が鮮やかで濁りにくいグラデーション、ダークモードでもコントラストが崩れにくいブランドカラーの明度調整が予測可能になります。既存のブランドガイドが「red-500 をそのまま使う」という前提だった場合、視覚的な印象が若干変わる点は移行前に確認しておいてください。

まとめ

  • Tailwind v4.1 が 2026 年の標準。Rust 製 Oxide エンジンで最大 182× 高速、HMR 体感が別物
  • CSS-first Configuration: tailwind.config.js を捨て、@theme ディレクティブに集約。デザイントークンはそのまま CSS 変数として露出
  • 3 方式のセットアップ: Vite プラグイン(推奨)・PostCSS(Next.js など)・CLI(ビルドツール非依存)
  • 自動コンテンツ検出: v3 の content は不要。追加スキャンは @source
  • 新ディレクティブ: @utility(カスタムクラス)・@custom-variant(独自 variant)・@apply(レガシー互換)
  • ダイナミック utilities: grid-cols-15 / mt-17 のような任意値が設定不要で使える
  • 標準搭載: コンテナクエリ・3D Transform・拡張グラデーション(conic / radial / oklch 補間)・@starting-stylenot-*
  • モダン CSS 基盤: Cascade Layers・color-mix()・Logical Properties・Registered Custom Properties
  • v3 → v4 移行npx @tailwindcss/upgrade で大半を自動化。JS プラグイン・OKLCH 色差・ブラウザサポートは手動確認

デザインシステム構築は Claude Code × Tailwind CSS v4 デザインシステム構築ガイド、フレームワーク連携は React 19AstroSvelte 5Nuxt 4Claude Code × Next.js、ランタイム・開発体験は BunDeno 2Biome、CI/CD は GitHub Actions 完全ガイド もあわせて、Tailwind v4 を核に据えた 2026 年型 CSS アーキテクチャを組み上げてください。