コンポーネントライブラリー
While MUI maintains in top rank in terms of usage, shadcn/ui is making huge gains, doubling from 20% to 42% in a year; as well as topping the positivity chart with 80%!
(訳) MUIは使用率の点では依然としてトップランクを維持していますが、shadcn/uiは、この1年で20%から42%へと倍増し、大きな躍進を遂げています。さらに、好感度チャートでも80%でトップに立っています!
https://2024.stateofreact.com/en-US/libraries/component-libraries/ より引用
スタイル付き UI とヘッドレス UI
コンポーネントとは?で説明したように、React コンポーネントでは見た目と振る舞いを定義することができます。コンポーネントライブラリーには、見た目も振る舞いも提供するタイプ (ここでは便宜的に「スタイル付き UI」と呼ぶことにします) と、振る舞いだけを提供するタイプ (ヘッドレス UI) があります。
- スタイル付き UI
- MUI、React Bootstrap、Ant Designなど
- メリット: 見た目が定義済みなので少ない記述で UI が実装できる
- デメリット: 見た目のカスタマイズで複雑化しやすい
- ヘッドレスUI
- Headless UI、React Ariaなど
- メリット: 振る舞いのみ提供されるので見た目を管理しやすい
- デメリット: 見た目の実装コストがかかる
必ずしも上記の分類に当てはまらないライブラリーもあります。
- Chakra UI: カスタマイズ性を考慮した設計
- Radix UI: スタイル付き UI もヘッドレス UI (Radix Primitives) も提供している
- Base UI: MUI から独立したヘッドレス UI
MUI のサンプル
MUI は、Google の Material Design を実装したスタイル付き UI ライブラリーです。
オープンコード型
shadcn/ui は、次の特徴を備えたコンポーネント集です。
- オープンコード: コンポーネントのコードが変更可能
- コンポジション: 全てのコンポーネントに共通で組み合わせ可能 (コンポーザブル) なインターフェースが提供されている
- 配布: スキーマとコマンドラインツールを使って簡単にコンポーネントの配布できる
- 美しいデフォルト: すぐに使える見た目
- AIフレンドリー: LLM (大規模言語モデル) がコンポーネントのコードを参照してコードを生成できる
HTML/CSS 仕様の進化
かつては JavaScript での振る舞いの実装が必要だった UI も、徐々に HTML/CSS だけで実装可能に
- Popover API が Baseline に移行 | Blog | web.dev
- <details>: 詳細折りたたみ要素 - HTML | MDN
- <dialog>: ダイアログ要素 - HTML | MDN
details 要素のサンプル
<details> 要素を使うと、JavaScript なしで折りたたみ可能な UI を実装できます。
dialog 要素のサンプル
<dialog> 要素を使うと、モーダルダイアログやポップアップを簡単に実装できます。
まとめ
- 見た目の実装を最低限に: スタイル付き UI がおすすめ
- 見た目の実装にも注力したい: ヘッドレス UI or HTML/CSS 仕様を活用してコンポーネントライブラリーを導入しないのもアリ
- shadcn/ui ならどのケースでも使いやすいかも
