Skip to content
Latchkey

Tailwind vs styled-components: どちらのスタイリング手法を選ぶか

Tailwindはビルド時にマークアップへユーティリティクラスを適用し、styled-componentsはコンポーネントに併置したスコープ付きCSS-in-JSを書きます。

TailwindはJSX内で組み立てたユーティリティクラスから静的なCSSを生成し、スタイルをJSランタイムの外に保ち、未使用ルールをpurgeして小さなバンドルにします。styled-componentsはtagged templateとしてCSSをコンポーネントに併置し、動的でpropsに基づくスタイルを可能にしますが、ランタイムのオーバーヘッドとバンドル重量が増えます。Tailwindはランタイムパフォーマンスと軽量な出力で優れ、styled-componentsは動的でコンポーネントスコープのスタイリングの使い勝手で優れます。

Tailwindstyled-components
アプローチユーティリティクラス(静的CSS)CSS-in-JS(ランタイム)
ランタイムコストなしランタイムでのスタイル注入
動的スタイルクラスのロジック経由ネイティブ(propsに基づく)
バンドルサイズ小さい(purge済み)大きめ(ランタイム + スタイル)
最適な用途軽量で高速な静的スタイル動的で併置されたスタイリング

ユースケースとパフォーマンス

Tailwindは、ゼロランタイムのスタイリング、小さなCSS、ユーティリティによる一貫したデザインシステムを求めるチームに向いています。styled-componentsは、併置された動的でpropsに基づくスタイルとコンポーネントスコープのCSSを重視し、ランタイムコストを受け入れるチームに向いています。ゼロランタイムのCSS-in-JS代替はその差を縮めましたが、中心的なトレードオフは残ります。

ビルドとCI

Tailwindはビルド時にpurgeし、styled-componentsはランタイムを同梱します。どちらもマネージドrunner上でビルドとテストを行え、より高速なrunnerはフロントエンドのビルドとコンポーネントテストのループを短縮します。

結論

ゼロランタイムのスタイリング、小さなCSS、ユーティリティ主導のシステムが欲しいなら: Tailwind。動的でpropsに基づき、コンポーネントに併置したスタイルが欲しいなら: styled-components。Tailwindはパフォーマンスと一貫性を優先し、styled-componentsは動的な使い勝手を優先します。

関連ガイド