Tailwind CSS の @apply の使いどころを考える

こんにちは、 Gaji-Labo 横田です。Tailwind CSS の @apply の使いどころを考えてみます。

Tailwind CSS の @apply

Tailwind CSS の @apply は class を再利用するやり方のひとつで、 class をひとつにまとめてコンポーネント化することができます。以下は公式ドキュメントから引用したコード例です。

<!-- Before extracting a custom class -->
<button class="py-2 px-4 bg-blue-500 text-white font-semibold rounded-lg shadow-md hover:bg-blue-700 focus:outline-none focus:ring-2 focus:ring-blue-400 focus:ring-opacity-75">
  Save changes
</button>

<!-- After extracting a custom class -->
<button class="btn-primary">
  Save changes
</button>
@tailwind base;
@tailwind components;
@tailwind utilities;

@layer components {
  .btn-primary {
    @apply py-2 px-4 bg-blue-500 text-white font-semibold rounded-lg shadow-md hover:bg-blue-700 focus:outline-none focus:ring-2 focus:ring-blue-400 focus:ring-opacity-75;
  }
}

@layer components の中で class 名を設定し、 @apply で指定したい class を羅列することができます。

@apply 化のメリットとデメリット

コンポーネント化できるメリットとしては、コードをある程度 DRY にできる、ボタンやリスト、ラベルといった atom 的な小さな部品をひとつの class にまとめられることで再利用がしやすくなる、バリエーションのスタイルも追加しやすくなる、hover など状態管理もしやすくなることがあげられます。タブやページネーションなど、サイト全体で共通の機能をもつコンポーネントも @apply 化に向いていると感じています。

一方で、何でも @apply でコンポーネント化してしまうと、クラス名を毎回考える必要がでてきますし、従来通りの CSS 設計と同様にスタイル変更の影響範囲などの問題もでてくる、CSS のバンドルも大きくなるため、Tailwind CSS を採用した恩恵をあまり受けなくなってきます。

公式でも使いどころについて明記していますが、使用するフレームワークや開発環境、運用を見据えた上で @apply をどう使うとバランスがいいか、柔軟に考えたいです。


投稿者 Yokota Tomoko

運用やアクセシビリティに配慮したHTML/CSSの設計やコンポーネント作成、スタイルガイドの構築、コードレビュー、組み込み、要件の整理、社内進行管理、顧客とのコミュニケーションまで、ジョインしたチームを前に進めるためにあれこれ担当しています。子育てと仕事のバランスを楽しめるよう、日々模索しています。