ウェブエンジニア問題集

Tailwind CSSとは何か — ユーティリティファーストの考え方

Tailwind CSSは「ユーティリティファースト」という考え方に基づいたCSSフレームワークです。従来のCSSやBootstrapとは全く異なるアプローチで、近年のフロントエンド開発で急速に普及しています。

学習者学習者

CSSはある程度書けるんだけど、HTMLにクラスをずらずら並べるTailwind、正直ごちゃごちゃして見えて不安…。本当に実務で使われてるの?

最初はその違和感が普通です。でも世界中の現場で採用が進んでいるのには理由があります。この章で「なぜTailwindなのか」を腹落ちさせましょう。

Tailwindでステップアップするイメージ

従来のCSSアプローチとの違い

従来のアプローチ(セマンティッククラス)

<button class="btn btn-primary">送信</button>
.btn {
  padding: 8px 16px;
  border-radius: 6px;
  font-weight: 600;
}
.btn-primary {
  background-color: #2563eb;
  color: white;
}

クラスに意味のある名前を付けて、CSSファイルにスタイルを書く方法です。

Tailwindのアプローチ(ユーティリティクラス)

<button class="px-4 py-2 rounded-md font-semibold bg-blue-600 text-white hover:bg-blue-700 transition-colors">
  送信
</button>

CSSを書かず、あらかじめ用意された小さなクラスをHTMLに直接並べます。


ユーティリティファーストのメリット

クラス名を考えなくていい

「このカードのラッパーを何クラスにしよう? .card-wrapper.card-container?」という命名に悩む時間がゼロになります。

CSS肥大化を防げる

クラスを新しく作るたびにCSSが増える代わりに、決まったユーティリティを組み合わせるだけなのでファイルサイズが安定します。PurgeCSS(未使用クラスの削除)で本番ビルドはさらに小さくなります。

デザインの一貫性が保てる

text-blue-600p-4 は決まった値を参照します。#2463EB16px を手打ちするより、プロジェクト全体で値が統一されます。

コンテキストスイッチが減る

HTMLとCSSを行き来せず、HTML上でスタイルも決められます。特にコンポーネント単位で開発するReactと非常に相性が良いです。


ユーティリティファーストの懸念と回答

HTMLが長くなる

確かにクラス名は多くなります。ただし、Reactのようなコンポーネント指向では1つのコンポーネントのHTML量が少ないため、実務ではそれほど問題になりません。

可読性が下がる

慣れると flex items-center gap-4 で「Flexboxで縦中央・gap 16px」とすぐ読めます。慣れるまでに少し時間はかかります。

複雑な状態管理は難しい

ダイナミックなスタイル変更(JavaScriptで変数を使って色を変えるなど)はTailwindだけでは難しい場面があります。その場合はCSS変数やinlineスタイルと組み合わせます。


Tailwind vs Bootstrap

Tailwind CSSBootstrap
アプローチユーティリティファーストコンポーネントベース
カスタマイズ高い(全値を設定ファイルで管理)やや低い(変数の上書き)
ファイルサイズ小さい(未使用クラスは削除)大きい
学習コスト高め(クラス名を覚える)低め(コンポーネントをコピペ)
デザインの自由度高い「Bootstrapっぽさ」が残りやすい

ちゃんと使うためのポイント

  • ユーティリティファーストは「CSSを書かない」アプローチ
  • HTMLにクラスが増えるが、コンポーネント単位の開発なら問題になりにくい
  • デザインシステムの一貫性を保つのに強い
  • Reactとの組み合わせが特に強力

次の章では、Tailwind CSSのセットアップ方法を学びます。