Modern Styling in React
フロンエンド開発にReact
を用いるとき様々なスタイリングソリューションがありますよね。今回は素のCSS
とTailwind CSS
とCSS-in-JS
のどれを使用するかという観点から、それぞれおすすめのスタイリングソリューション
をご紹介させていただきます。
素のCSS
まず素のCSS
ならMantine
というコンポーネントライブラリがおすすめです。Mantine
はもともと他のコンポーネントライブラリと比較してもコンポーネントの種類がかなり充実してましたが、v7.4.0
よりチャート系のコンポーネントも追加されました。現在、チャート系までサポートするコンポーネントライブラリは私の知る限り、Mantine
と後述のTremor
くらいです。しかし、Tremor
はチャート系などの管理画面のコンポーネントは充実しててもその他のコンポーネントが不足しているため、Mantine
はユーザー画面と管理画面の開発のどちらにも対応できるという点で優れております。内部的にはどちらのチャート系のコンポーネントもRecharts
が使われてます。
さらにMantine
にはv7.6.0
よりHeadlessMantineProvider
というMantine
をReact Aria Components
等のようにヘッドレスUIライブラリ(スタイルを持たず機能のみのUIコンポーネント)として使用できる機能が提供されてます。そのため、今までMantine
を使ってみたかったけれど、スタイルが好きじゃなかったという開発者の皆さんにも自らスタイルを適用しご使用いただけます(スタイルを適用するというのは大変ではありますが。。)
Tailwind CSS
Tailwind CSS
ならshadcn/ui
というコンポーネントライブラリがおすすめです。shadcn/ui
はRadix UI
とTailwind CSS
によって作られており、npmによって管理せず、自らのコードベースで管理するという特徴があります(この特徴をRe-usable
といいます)。それにより、カスタマイズがしやすくコンポーネントを頻繁に微調整する場合に使いやすいです。しかし、ビジネスのことを考えると、独自のUIを構築するよりもいち早く機能を実装するためにコンポーネントの種類もより豊富なMantine
を使うのも適切です。ただMantine
はTailwind CSS
とは相性が悪いのです。併用できない認識なので、Tailwind CSS
を使いたい場合にはshadcn/ui
の選択は適切と思われます。
また、管理画面ならTremor
というコンポーネントライブラリがおすすめです。Tremor
はTailwind CSS
で管理画面を作るためのコンポーネントライブラリです。datepickerもvisualization(chartなど)もあります。
CSS-in-JS
CSS-in-JSならStyleX
がおすすめです。StyleX
はMeta公式のCSS-in-JS(JS内にスタイルを定義して、コンポーネントに直接適用します)で、今後このStyleX
製のコンポーネントライブラリが増えそうです。RSC(React Server Components)
の登場によってStyled Components
、 Emotion
のようなCSS-in-JSは推奨されませんが、StyleX
はゼロランタイムなCSS-in-JSとしてRSC
対応しております。
ゼロランタイムなCSS-in-JSライブラリである StyleX
が RSC
と互換性を持つ理由は、StyleX
によって生成されるスタイルがビルド時に静的ファイルとして処理され、ランタイムで追加のJavaScript実行を必要としないためです。RSC
の主な目的は、サーバーサイドだけでも完結できるものを事前に処理し、クライアントサイドのレンダリング負荷を減らすことにあります。一方で、Styled Components
や Emotion
のような従来のCSS-in-JSライブラリは、クライアントサイドでスタイルを動的に生成し適用するためにJavaScriptの実行を必要としました。これはRSC
が目指す方向性と逆行します。しかし、StyleX
はビルド時にスタイルを完全に処理し、ランタイムでのJavaScript実行を不要にすることで、RSC
との互換性を実現しています。
今回ご紹介させていただいたスタイリングソリューションはいずれも
RSC(React Server Components)
に対応しております。
なにか間違ってましたらご指摘いただけますと幸いです!🙏
Discussion