tailwind-v4 について
Tailwind CSS v4 のセットアップ、設定、移行方法を案内するスキルです。最初にバージョンを確認し、CSS ファーストのテーマ設定、自動ソース検出、v3 から v4 への主な変更点を説明します。
主な機能
- 01Tailwind CSS のバージョン検出
- 02v4 の CSS ファースト設定の説明
- 03@theme によるテーマトークン設定
- 04ソースの自動検出の解説
- 05v3 から v4 への移行変更点の一覧
活用シーン
- 01Tailwind CSS v4 のセットアップ
- 02プロジェクトの v3 から v4 への移行
- 03ユーティリティクラスが生成されない問題の調査
インストール
コマンドをコピーしてターミナルで実行します。
npx skills add https:/ / github.com/ boraoztunc/ skills --skill tailwind-v4インストール後、Claude Code で/tailwind-v4を入力して読み込まれたか確認します。
詳細
Tailwind CSS v4
まずバージョンを確認する
ここが最も重要なステップです。v3 と v4 では設定方法がまったく異なり、一方に対するガイダンスはもう一方では明確に誤りです。
# Check the installed major version
npm ls tailwindcss --depth=0 2>/dev/null || grep '"tailwindcss"' package.json
| 判別の手がかり | バージョン |
|---|---|
CSS 内の @import "tailwindcss"; | v4 |
@tailwind base; @tailwind components; @tailwind utilities; | v3 |
CSS 内の @theme { } ブロック | v4 |
content: [...] 配列を含む tailwind.config.js | v3(または互換レイヤーを使用する v4 プロジェクト) |
@config "./tailwind.config.js"; | レガシー設定を読み込む v4 |
@tailwindcss/postcss または @tailwindcss/vite の依存関係 | v4 |
postcss 設定で autoprefixer と postcss-import が必要 | v3 |
v4 プロジェクトでは、デフォルトで tailwind.config.js を作成しないでください。 v4 は CSS から設定を読み込みます。手動で追加した設定ファイルは、@config で明示的に読み込まない限り、暗黙のうちに無視されます。
v4 のセットアップ
/* app.css — the single entry point */
@import "tailwindcss";
この1行で3つの @tailwind ディレクティブを置き換えられます。また、postcss-import と autoprefixer の処理も内部で行うため、PostCSS の設定から両方を削除してください。
Vite:
// vite.config.js
import tailwindcss from "@tailwindcss/vite";
export default { plugins: [tailwindcss()] };
PostCSS:
// postcss.config.mjs
export default { plugins: { "@tailwindcss/postcss": {} } };
設定は CSS ファースト
デザイントークンは @theme に記述します。各エントリーは対応するユーティリティを生成し、実際の CSS カスタムプロパティとしても公開します。
@import "tailwindcss";
@theme {
--color-brand: oklch(0.62 0.19 250);
--color-brand-muted: oklch(0.72 0.08 250);
--font-display: "IBM Plex Sans", sans-serif;
--radius-card: 14px;
--spacing-gutter: 2.75rem;
--ease-out-soft: cubic-bezier(0.22, 0.61, 0.36, 1);
}
--color-brand は bg-brand、text-brand、border-brand などを生成し、どこからでも var(--color-brand) として参照できます。この二面性こそが v4 の主な利点です。トークンが JavaScript 設定の中に閉じ込められることはなくなりました。
名前空間はユーティリティのファミリーに対応しています。--color-*、--font-*、--text-*、--spacing-*、--radius-*、--shadow-*、--ease-*、--animate-*、--breakpoint-* です。
名前空間全体、またはすべてを上書きできます。
@theme {
--color-*: initial; /* drop the default palette */
--color-ink: #18181b;
}
content 配列は不要です。 v4 は .gitignore を尊重し、バイナリをスキップしながら、ソースファイルを自動的に検出します。必要な場合にのみ、追加のソースを指定してください。
@source "../packages/ui/src"; /* add a path outside the project root */
@source not "../legacy"; /* exclude */
@source inline("bg-red-500 bg-red-600"); /* the v4 replacement for safelist */
v3 から v4 への移行
まず codemod を実行し、その後差分を確認してください。
npx @tailwindcss/upgrade
気づかないうちに問題を起こす名前変更:
| v3 | v4 |
|---|---|
shadow-sm | shadow-xs |
shadow | shadow-sm |
rounded-sm | rounded-xs |
rounded | rounded-sm |
blur-sm | blur-xs |
outline-none | outline-hidden |
bg-opacity-50 | bg-black/50(スラッシュ形式の不透明度のみ) |
flex-shrink-0 | shrink-0 |
shadow → shadow-sm と rounded → rounded-sm の変更は特に危険です。以前のクラス名は引き続き使えますが、意味が1段階小さくなります。そのため、エラーになるのではなく、v3 のコードベース全体で影の深さと角丸が気づかないうちに1段階ずつ小さくなります。
ほかにも、次のような動作の変更があります。
- デフォルトのボーダー色は
gray-200ではなくcurrentColorになりました。borderだけではテキストの色を引き継ぐため、色を明示的に指定してください。 - デフォルトのリングは、以前の
3pxの青色ではなく1px currentColorになりました。v3 のサイズを維持するには、ringをring-3に変更してください。 - Space-between では異なるセレクターが使われるため、兄弟要素のマージンに関する一部のケースで見た目が変わることがあります。
- ホバーは、デバイスが実際にホバーに対応している場合にのみ適用されます。
- バリアントの重ね合わせは、左から右へ読むようになりました。
動的なクラス名
スキャナーが引き続きソーステキストを静的に読み取るため、v3 からのルールは変わりません。
// BROKEN — never generated
<div className={`text-${color}-500`} />
// CORRECT — complete class names, statically visible
const TONE = {
danger: "text-red-500",
success: "text-emerald-500",
};
<div className={TONE[tone]} />
v4 では、設定なしで多くのユーティリティに動的な値を指定できます。grid-cols-15、w-17、mt-23 などを自由に使えます。ただし、組み立てられないのはクラス名の文字列です。実行時にしかわからない値を使う場合は、文字列連結ではなくインラインスタイルか CSS 変数を使用してください。
<div className="w-(--w)" style={{ "--w": `${pct}%` }} />
実用的なパターン
ダークモード。 v4 はデフォルトで prefers-color-scheme を使用します。クラスベースで切り替えるには、次のようにします。
@custom-variant dark (&:where(.dark, .dark *));
コンポーネントを切り出す順序。 @apply より、実際のコンポーネントを優先してください。CSS を共有する必要がある場合は、v4 では @utility を使用します。
@utility card {
border-radius: var(--radius-card);
background: var(--color-surface);
}
@apply を多用すると、ユーティリティを使う利点が失われ、CSS が肥大化します。最初に使うのではなく、最後の手段として使用してください。
任意の値は、単発の用途で引き続き使用できます。top-[117px]、bg-[oklch(0.7_0.1_200)]、grid-cols-[1fr_auto] などです。
よくある問題
- クラスが生成されない → クラス名が動的に構築されているか、ソースファイルが自動検出の対象外です(
@sourceを追加してください)。 tailwind.config.jsの設定が反映されない →@configを指定していない v4 プロジェクトです。- アップグレード後にビルドエラーが発生する → PostCSS のチェーンに
postcss-import/autoprefixerが残っています。v4 には両方が含まれています。 - 移行後にボーダーやリングの見た目がおかしい → 上記の
currentColorとring-1のデフォルト変更が原因です。 - 移行後に奥行き感がわずかに損なわれる →
shadow/roundedの名称変更によるものです。
関連スキル
visual-style-presets— スタイルの方向性を選び、@themeにトークンを設定しますbeautiful-shadows— 任意のユーティリティとして、正確なレイヤー状のシャドウを指定します