styled-components vs Emotion: どちらのCSS-in-JSを選ぶか
styled-componentsとEmotionは2つの主要なCSS-in-JSライブラリで、APIは似ていますが、柔軟性とパフォーマンスの特性が異なります。
styled-componentsは、focusされた意見の強いAPIと強力なReact統合により、styled.divのtagged templateパターンを広めました。EmotionはstyledのAPIとcss propの両方を提供し、やや小さく高速な傾向があり、より柔軟です(フレームワークに依存しないコア)。どちらもthemingとSSRをサポートします。styled-componentsは洗練されたfocusされたDXで優れ、Emotionは柔軟性、css prop、そしてわずかに優れたパフォーマンスとサイズで優れます。
| styled-components | Emotion | |
|---|---|---|
| API | styled tagged templates | styled + css prop |
| バンドルサイズ | やや大きい | やや小さい |
| パフォーマンス | 良い | 多くの場合より高速 |
| 柔軟性 | Reactにfocus | フレームワーク非依存のコア |
| 最適な用途 | 洗練されたfocusされたDX | 柔軟性、css prop、パフォーマンス |
ユースケースとAPI
styled-componentsは、強力なReactの慣習を備えた、focusされたよく知られたstyled APIを求めるチームに向いています。Emotionは、追加のcss prop、より小さく高速なランタイム、より柔軟でフレームワークに依存しないコアを求めるチームに向いています。どちらもthemingとSSRを適切に扱います。
ビルドとCI
どちらもランタイムを同梱し、SSRとminificationのためのBabel/SWCプラグインの恩恵を受けます。いずれもマネージドrunner上でビルドとテストを行え、より高速なrunnerはフロントエンドのビルドとコンポーネントテストのループを短縮します。
結論
React向けにfocusされた洗練されたstyled APIが欲しいなら: styled-components。css prop、より小さく高速なランタイム、より高い柔軟性が欲しいなら: Emotion。両者は近く、Emotionは柔軟性とパフォーマンスで、styled-componentsは引き締まった意見の強いDXで一歩リードします。