Back to list
FooQoo

migrating-tailwindcss-v4

by FooQoo

Next.js starter repository

0🍴 0📅 Jan 12, 2026

SKILL.md


name: migrating-tailwindcss-v4 description: Tailwind CSS v4 移行ルール。v3からv4への構文変更を自動修正。aria/data属性の短縮形、変数構文、shorthandクラス、important位置、競合クラスの解決パターンを提供。「Tailwind v4 移行」「Tailwind 最新構文」「cssConflict 修正」時に使用。

Tailwind CSS v4 移行ガイド

ESLint プラグイン設定

eslint-plugin-better-tailwindcss を使用してCLIで検出・自動修正する。

pnpm add -D eslint-plugin-better-tailwindcss
// eslint.config.mjs
import betterTailwindcss from 'eslint-plugin-better-tailwindcss';

export default [
  {
    plugins: {
      'better-tailwindcss': betterTailwindcss,
    },
    settings: {
      'better-tailwindcss': {
        entryPoint: 'src/app/globals.css', // Tailwind v4 CSS設定ファイル
      },
    },
    rules: {
      'better-tailwindcss/enforce-consistent-class-order': 'warn',
      'better-tailwindcss/enforce-consistent-important-position': 'warn',
      'better-tailwindcss/enforce-consistent-line-wrapping': 'warn',
      'better-tailwindcss/enforce-consistent-variable-syntax': 'warn',
      'better-tailwindcss/enforce-shorthand-classes': 'warn',
      'better-tailwindcss/no-duplicate-classes': 'warn',
      'better-tailwindcss/no-unnecessary-whitespace': 'warn',
      'better-tailwindcss/no-conflicting-classes': 'error',
      'better-tailwindcss/no-unregistered-classes': 'off', // カスタムテーマ使用時はoff
    },
  },
];

自動修正: npx eslint . --fix

手動修正パターン

ESLint プラグインが未対応のパターンは sed で一括置換する。

ARIA 属性の短縮形

# aria-[invalid=true] → aria-invalid
find src -name "*.tsx" -exec sed -i '' 's/aria-\[invalid=true\]/aria-invalid/g' {} \;

# aria-[selected=true] → aria-selected
find src -name "*.tsx" -exec sed -i '' 's/aria-\[selected=true\]/aria-selected/g' {} \;

# aria-[current=true] → aria-current
find src -name "*.tsx" -exec sed -i '' 's/aria-\[current=true\]/aria-current/g' {} \;

# aria-[disabled=true] → aria-disabled
find src -name "*.tsx" -exec sed -i '' 's/aria-\[disabled=true\]/aria-disabled/g' {} \;

Data 属性の短縮形

# data-[x] → data-x (存在チェックのみの場合)
find src -name "*.tsx" -exec sed -i '' 's/data-\[\([a-z-]*\)\]/data-\1/g' {} \;

CSS プロパティからユーティリティへ

# [grid-template-rows:auto] → grid-rows-[auto]
find src -name "*.tsx" -exec sed -i '' 's/\[grid-template-rows:auto\]/grid-rows-[auto]/g' {} \;

ピクセル値の短縮形

inset-[1px]inset-px
inset-[2px]inset-0.5
gap-[1px]gap-px
p-[1px]p-px

分数値の短縮形

size-[calc(5/6*100%)]size-5/6
w-[calc(1/2*100%)]w-1/2

競合クラスの解決

outlineoutline-N を同時に使用すると競合が発生する。

問題

// NG: outline は style + width を設定、outline-4 は width のみ
className="focus:outline focus:outline-4"

解決策

// OK: outline-solid は style のみ設定
className="focus:outline-solid focus:outline-4"

一括修正

find src -name "*.tsx" -exec sed -i '' 's/focus:outline focus:outline-/focus:outline-solid focus:outline-/g' {} \;
find src -name "*.tsx" -exec sed -i '' 's/focus-visible:outline focus-visible:outline-/focus-visible:outline-solid focus-visible:outline-/g' {} \;
find src -name "*.tsx" -exec sed -i '' 's/hover:outline hover:outline-/hover:outline-solid hover:outline-/g' {} \;
find src -name "*.tsx" -exec sed -i '' 's/outline outline-\([0-9]\)/outline-solid outline-\1/g' {} \;

v4 新構文まとめ

カテゴリ旧 (v3)新 (v4)
変数size-[var(--x)]size-(--x)
Shorthandflex-shrink-0shrink-0
Shorthandflex-growgrow
Important!outline-blackoutline-black!
ARIAaria-[invalid=true]aria-invalid
Datadata-[loading]data-loading
Outlineoutline outline-4outline-solid outline-4
Pixelinset-[1px]inset-px
heighth-[1000px]h-125
widthw-[1000px]w-125

Score

Total Score

60/100

Based on repository quality metrics

SKILL.md

SKILL.mdファイルが含まれている

+20
LICENSE

ライセンスが設定されている

+10
説明文

100文字以上の説明がある

0/10
人気

GitHub Stars 100以上

0/15
最近の活動

3ヶ月以内に更新がある

0/10
フォーク

10回以上フォークされている

0/5
Issue管理

オープンIssueが50未満

+5
言語

プログラミング言語が設定されている

+5
タグ

1つ以上のタグが設定されている

0/5

Reviews

💬

Reviews coming soon