Tailwind CSS・まず動かしてみる

自分のプロジェクトに入れる

まずビルド無しで試すPlay CDN、次に本番でも使えるCLIでのビルド。2通りの手順をコピペで動く形でまとめ、色や余白の刻みを自分好みに変える@themeまで扱います。古い版の記事の見分け方つき。

Tailwindが何なのかは前の回でつかめました。クラス名の勉強に入る前に、まず手元で動く状態を作ります。 自分で打って確かめられる環境があるかどうかで、このあとの回の身につき方がまるで変わります。手順は2通りあります。

  • Play CDN——スクリプト1行。ビルド無しで今すぐ試せる(ただし公開用ではない)
  • CLIでビルド——公開するサイト向け。npmコースでやった--watchがそのまま出てきます

まず試して感触をつかみ、続けると決めたらビルドに移る——この順がいちばんつまずきません。

npmビルドを1回通してみる(Sass→CSS)「ビルド」がまだピンとこない人は、npmコースで1回通しておくとこの回が楽になります

方法1:Play CDNで今すぐ試す

HTMLファイル1つだけで始められます。<head>にスクリプトを1行足すだけです。

<!doctype html>
<html lang="ja">
  <head>
    <meta charset="UTF-8" />
    <meta name="viewport" content="width=device-width, initial-scale=1.0" />
    <script src="https://cdn.jsdelivr.net/npm/@tailwindcss/browser@4"></script>
  </head>
  <body>
    <h1 class="text-3xl font-bold text-orange-500">しまちゃんのページ</h1>
  </body>
</html>

このファイルをブラウザで開けば、もうクラスが効いています。インストールもコマンドも要りません。

方法2:CLIでビルドする

こちらが本番の手順です。npmコースでやったことと形は同じで、変換する道具がSassからTailwindに変わるだけです。

①プロジェクトを用意する

mkdir tailwind-practice
cd tailwind-practice
npm init -y

②Tailwindを入れる

npm install --save-exact tailwindcss @tailwindcss/cli

tailwindcssが本体、@tailwindcss/cliコマンドとして呼び出すための道具です。2つセットで入れます。--save-exactはバージョンを固定するオプションでした。

npmnpmの怖い話——Shai-Hulud事件から学ぶ身の守り方なぜバージョンを固定するのか——^の便利さの裏にあるリスク

③もとになるCSSを1行だけ書く

mkdir src
@import "tailwindcss";

この1行だけです。 これが「Tailwindのユーティリティをここに展開してください」という宣言になります。

④ビルドしてみる

npx @tailwindcss/cli -i ./src/input.css -o ./src/output.css --watch

読み方はこうです。

  • -i(input)——もとになるファイル
  • -o(output)——書き出す先
  • --watch——保存を見張って、変わったら自動で作り直す

--watchを付けているので、コマンドは終わらずに待機状態になります。止めるときはCtrl + Cです。

⑤HTMLから書き出したCSSを読む

<!doctype html>
<html lang="ja">
  <head>
    <meta charset="UTF-8" />
    <meta name="viewport" content="width=device-width, initial-scale=1.0" />
    <link rel="stylesheet" href="./src/output.css" />
  </head>
  <body class="p-8 bg-orange-50">
    <h1 class="text-3xl font-bold text-orange-500">しまちゃんのページ</h1>
  </body>
</html>

読むのはoutput.cssのほうです(input.cssではありません)。ここを間違えると、1行しか書いていないCSSを読みこむことになり、何も効きません。

⑥毎回打たなくていいようにする

長いコマンドはpackage.jsonscriptsに登録します。

{
  "scripts": {
    "dev": "@tailwindcss/cli -i ./src/input.css -o ./src/output.css --watch",
    "build": "@tailwindcss/cli -i ./src/input.css -o ./src/output.css --minify"
  }
}

これでnpm run devが制作中、npm run buildが公開用(--minifyでファイルを小さくする)になります。

なぜCSSが巨大にならないのか

「何千クラスも用意されているなら、CSSも巨大になるのでは?」——ここが一番よくできている部分です。

ビルドのとき、Tailwindはプロジェクトのファイルを走査して、実際に書かれているクラス名だけを集めます。使っていないクラスは1つも出力されません。だから、

  • 用意されているクラスの数と、書き出されるCSSの大きさは関係ない
  • ページが増えても、使うクラスは重複するので、CSSはあまり増えない

これが「Tailwindはサイトが育ってもCSSが太らない」と言われる理由です。素のCSSだと、ページを足すたびにCSSも積み上がっていきます。

色や余白を自分好みに変える

サイトのブランドカラーをbg-brandのように使いたい——そんなときは、CSSの中に@themeブロックを書きます。

@import "tailwindcss";

@theme {
  --color-brand: #ff8a3d;
  --color-brand-dark: #e06a1f;
}

これでbg-brandtext-brandborder-brand-darkなどが自動で使えるようになります。変数の名前の付け方に規則があり、--color-◯◯と書けば◯◯という色名として登録される仕組みです。

Play CDNで試すときは、<style type="text/tailwindcss">の中に同じことを書けます。

<script src="https://cdn.jsdelivr.net/npm/@tailwindcss/browser@4"></script>
<style type="text/tailwindcss">
  @theme {
    --color-brand: #ff8a3d;
  }
</style>

つまずきやすいところ

症状原因と対処
クラスが何も効かないHTMLがinput.cssを読んでいる。読むのはoutput.css
一部のクラスだけ効かないクラス名を文字列で組み立てていないか。丸ごと書く
保存しても反映されない--watchが動いているか確認(別のターミナルで待機させる)
@tailwindでエラーになる古い版の書き方。@import "tailwindcss";に直す
ビルドは通るのに色が違う@themeの変数名の綴りを確認(--color-から始める)
VSCodeが@import "tailwindcss"に警告を出すTailwindの拡張機能(Tailwind CSS IntelliSense)を入れると消えます
べんりワザ入れておきたいVSCode拡張機能そのほか入れておきたいVSCode拡張機能はこちら3

このレッスンのまとめ

  1. 試すだけならPlay CDNのスクリプト1行。ただし公開用には使わない
  2. 本番はCLIでビルドnpm install tailwindcss @tailwindcss/cliから始まる
  3. もとになるCSSは@import "tailwindcss";の1行だけ
  4. HTMLが読むのはoutput.css——ここを間違えると何も効かない
  5. クラス名を文字列で組み立てると走査で見つからず、消される
  6. 色や刻みの追加は@themeブロック(設定はJSからCSSへ移った)
  7. @tailwind base;tailwind.config.jsが主役の記事は古い版のサイン

動く環境ができました。次の回からは、ここに実際に打ちこみながら進めます。まずは呪文に見えるクラス名の規則を読み解きます。

よくある質問

Tailwindを試すのにビルドは必須ですか?
試すだけなら不要です。Play CDNというスクリプトを1行読みこめば、その場でユーティリティクラスが使えます。ただし公式が開発用と明言しているので、公開するサイトではCLIでビルドしてください。
@tailwind base と書いてある記事を見つけました
それは古い版(v3)の書き方です。今は @import "tailwindcss"; の1行に置きかわっています。3行の@tailwindディレクティブや tailwind.config.js が主役になっている記事は、版が古いサインだと思ってください。
tailwind.config.jsは作らないのですか?
今の版では必須ではありません。色や余白の刻みを変えたいときは、CSSの中に @theme ブロックを書いて指定します。設定がCSS側に寄ったぶん、JavaScriptの設定ファイルを触る機会は減りました。
書き出されたCSSが巨大になりませんか?
なりません。ビルドのときにファイルを走査して、実際に使ったクラスだけを書き出す仕組みです。だから何千クラス用意されていても、出力されるCSSは小さく保たれます。