Astro製のブログで使っているTailwindCSSをv4にアップグレードする
はじめに
少し前にTailwindCSSのv4がリリースされ、自分のポートフォリオサイトの方は対応した。
Astroで作っているこのブログも早くv4に更新したいなと思いつつ、プラグインの@astrojs/tailwind
が対応されるのを待っていた。すると先日、プラグインの方でv4に対応したPullRequestがマージされた。この変更内容を見て気づいたが、TailwindCSSのv4ではViteプラグインを提供するようになったので@astrojs/tailwind
は不要であり、プラグインの更新を待つ必要はなかった。
というわけでこのブログでも早速TailwindCSSをv4にアップグレードしたので対応内容を残しておく。
対応内容
依存関係のセットアップ
まずは、新しく使うことになるプラグインの@tailwindcss/vite
をインストールする。
npm install @tailwindcss/vite
今まで使っていた@astrojs/tailwind
は削除する。一応v6としてメジャーバージョンがリリースされているが、これは既存プロジェクトが新しいプラグインに移行するまでの利便性のためで、今後新しい機能が提供されることはないとのことだ。
npm rm @astrojs/tailwind
astro.config.mjs
の変更
次はastro.config.mjs
で使用するプラグインを@astrojs/tailwind
から@tailwindcss/vite
に変更する。また、@tailwindcss/vite
を指定する箇所はintegrations
ではなく、vite.plugins
なので注意。
import { defineConfig } from "astro/config";
// import tailwind from "@astrojs/tailwind"; // 削除
import tailwindcss from "@tailwindcss/vite"; // 追加
export default defineConfig({
integrations: [
// tailwind(), // 削除
],
vite: {
plugins: [
tailwindcss(), // 追加
],
},
})
tailwind.config.mjs
とメインCSSの変更
TailwindCSSのv4からtailwind.config.mjs
は不要となり、CSSファイルに直接設定を書けるようになった。TailwindCSSを読み込むためのファイルをsrc/styles/app.css
に作成(ファイル名はなんでも良い)し、tailwind.config.mjs
から設定を移行する。
/* 必須: tailwindcssを読み込む */
@import "tailwindcss";
/* 任意: @tailwindcss/typographyをプラグインとして使用しているので読み込む */
@plugin "@tailwindcss/typography";
/* 任意: 移行が面倒な場合は以前のconfigファイルを読み込むことも可能 */
@config "../../tailwind.config.mjs";
/* ここにtailwind.config.mjsで書いていた設定を移動させる */
最後に、このファイルを使用する箇所で読み込む。自分の場合はBaseLayout.astro
が全てのページで共通のレイアウトなので、そこで読み込ませた。
import "../styles/app.css";
@apply
を使用している場合の対応
この状態で開発サーバーを起動すると、@apply
を使っているファイルでError: Cannot apply unknown utility class
というエラーが出る。
TailwindCSSのv4からはメインのCSSファイルとは別にバンドルされるスタイルシートから、Tailwindのテーマ変数、カスタムユーティリティ、カスタムバリアントが参照できなくなった。そのため、Astroを含めてSvelteやVueなどのSingleFileComponent(SFC)の<style>
ブロック内で@apply
を使用する場合は、@reference
を使ってメインのCSSファイルを明示的に参照する必要がある。
以下のようにして@reference
を使って、TailwindCSSを読み込んでいるCSSファイルを読み込と正常に@apply
を使用することができる。
<div class="text-class">
<p>text</p>
</div>
<style>
@reference "../../styles/app.css";
.text-class {
@apply p-2;
}
</style>
以上でAstro製のブログをTailwindCSS v4にアップグレードすることができた。
おわり
今までTailwindCSは基本的な使い方やユーティリティを調べて使うくらいしか活用していなかったが、今回の対応でアップグレードガイドや公式ドキュメントを読み進めるうちに今まで自分はちゃんとTailwindCSSを使い切れていなかったと感じた。ドキュメントをしっかり読んで、より適切なコンポーネントやスタイルの設計に取り組んでいきたい。