## 概要
[[Tailwind CSS]]のv4がリリースされた。評判も良さそうなので試してみることにした。
<div class="link-card-v2">
<div class="link-card-v2-site">
<img class="link-card-v2-site-icon" src="https://static.zenn.studio/images/logo-transparent.png" />
<span class="link-card-v2-site-name">Zenn</span>
</div>
<div class="link-card-v2-title">
Tailwind CSS V4まとめ!
</div>
<img class="link-card-v2-image" src="https://res.cloudinary.com/zenn/image/upload/s--6riAaNqK--/c_fit%2Cg_north_west%2Cl_text:notosansjp-medium.otf_55:Tailwind%2520CSS%2520V4%25E3%2581%25BE%25E3%2581%25A8%25E3%2582%2581%25EF%25BC%2581%2Cw_1010%2Cx_90%2Cy_100/g_south_west%2Cl_text:notosansjp-medium.otf_37:Miz_dev%2Cx_203%2Cy_121/g_south_west%2Ch_90%2Cl_fetch:aHR0cHM6Ly9zdG9yYWdlLmdvb2dsZWFwaXMuY29tL3plbm4tdXNlci11cGxvYWQvYXZhdGFyLzNkMjViZGYyMGYuanBlZw==%2Cr_max%2Cw_90%2Cx_87%2Cy_95/v1627283836/default/og-base-w1200-v2.png" />
<a href="https://zenn.dev/miz_dev/articles/tailwind-css-v4"></a>
</div>
## 主な変更点
公式より。
<div class="link-card-v2">
<div class="link-card-v2-site">
<img class="link-card-v2-site-icon" src="https://tailwindcss.com/favicon.ico" />
<span class="link-card-v2-site-name">tailwindcss.com</span>
</div>
<div class="link-card-v2-title">
Tailwind CSS v4.0
</div>
<div class="link-card-v2-content">
We just released Tailwind CSS v4.0 — an all-new version of the framework optimized for performance and flexibili ...
</div>
<img class="link-card-v2-image" src="https://tailwindcss.com/_next/static/media/card.22502194.jpg" />
<a href="https://tailwindcss.com/blog/tailwindcss-v4"></a>
</div>
気になった点をいくつか列挙。
- [高速化](https://tailwindcss.com/blog/tailwindcss-v4#new-high-performance-engine)
- フルビルド3.78倍
- インクリメンタルビルド8.8倍
- CSSファイル追加なしのインクリメンタルビルド182倍
- [Viteに対応](https://tailwindcss.com/blog/tailwindcss-v4#first-party-vite-plugin)
- [[PostCSS]]が不要に
- [設定ファイルが不要](https://tailwindcss.com/blog/tailwindcss-v4#simplified-installation)
- `tailwind.config.js` はなくても動く
- 設定ファイルを追加したい場合も[[CSS]]ファイルで対応可能
- [デザイントークン設定をCSS変数として利用可能](https://tailwindcss.com/blog/tailwindcss-v4#css-theme-variables)
- [[Tailwind CSS]]で定義された[[デザイントークン]]の定義を[[カスタムプロパティ (CSS)|カスタムプロパティ]]として利用できる
- [utility valuesやvariantsを定義不要で動的に設定可能](https://tailwindcss.com/blog/tailwindcss-v4#dynamic-utility-values-and-variants)
- `size-17` のように今までは認識できなかったものも認識される
- `size-17.5` のように0.5刻みで認識する
- `size-17.4` のようにそれより細かい単位では無効化された
- `bg-red-150` とかは無理
- [3D変換のutilitiesを追加](https://tailwindcss.com/blog/tailwindcss-v4#new-3d-transform-utilities)
- スライド作成とかで使えそう
- [`not-*` variant対応](https://tailwindcss.com/blog/tailwindcss-v4#not-variant)
- `not:hover:opacity-75` のような指定が可能に
## 環境
| 対象 | バージョン |
| ---------------- | ----------- |
| [[Ubuntu]] | 24.04.1 LTS |
| [[Bun]] | 1.2.2 |
| [[Tailwind CSS]] | 4.0.3 |
| [[Vue]] | 3.5.13 |
| [[Vite]] | 6.0.11 |
## インストール
v3からの移行ではなくv4を最初からインストールしてみる。
```console
bun create vite tailwind-sandbox --template vue-ts
cd tailwind-sandbox
bun add tailwindcss @tailwindcss/vite
```
## 設定
`vite.config.ts`
```ts
import { defineConfig } from "vite";
import vue from "@vitejs/plugin-vue";
import tailwindcss from "@tailwindcss/vite";
export default defineConfig({
plugins: [vue(), tailwindcss()],
});
```
## エントリポイント作成
`src/App.vue`
```html
<template>
<div class="flex flex-col justify-center items-center w-screen h-screen">
<span class="text-red-500 text-5xl">Title</span>
</div>
</template>
```
`src/style.css`
```css
@import "tailwindcss";
```
## ビルド
```console
bun dev
```
表示されればOK。
## トラブルシューティング
### [[Neovim]]で[[Tailwind CSS]]の補完が正しく表示されない
v4で設定ファイルが消えたため、[[nvim-lspconfig]]の設定でそれらを`root_dir`の判定に利用しないようにする。
```diff
lspconfig.tailwindcss.setup({
capabilities = capabilities,
- root_dir = util.root_pattern(
- "tailwind.config.js",
- "tailwind.config.cjs",
- "tailwind.config.mjs",
- "tailwind.config.ts"
- ),
})
```
何か副作用があるかもしれないが、記録していなかったので様子見。
> [Autocompletion Not Working with Vue.js and TailwindCSS v4 · Issue #1153 · tailwindlabs/tailwindcss-intellisense](https://github.com/tailwindlabs/tailwindcss-intellisense/issues/1153)
### v4で対応された補完が表示されない
たとえば `size-15` とか。[[Tailwind CSS]]の[[LSP]]を更新してみる。
```console
npm:@tailwindcss/language-server latest 0.0.24 0.14.2 ~/.config/mise/config.toml
```
リリースノートを見ると `v0.12` あたりで[[Tailwind CSS]]のv4対応ガンガンされている形跡はある... が `size-15` は補完には出なそう。そこは定義されている値ではないから、むしろ出してはいけないのかもと思ったので、バージョンアップで一旦満足。`not-hover:` はちゃんと出てるから対応はされている。