bulma vs evergreen-ui vs grommet vs react-bootstrap vs reactstrap vs semantic-ui-react
React 用 UI ライブラリとフレームワークの技術選定ガイド
bulmaevergreen-uigrommetreact-bootstrapreactstrapsemantic-ui-react類似パッケージ:

React 用 UI ライブラリとフレームワークの技術選定ガイド

これら 6 つのパッケージは、React アプリケーションのユーザーインターフェースを構築するための主要な選択肢です。bulma は CSS のみに焦点を当てたフレームワークであり、他の 5 つ(evergreen-uigrommetreact-bootstrapreactstrapsemantic-ui-react)は React コンポーネントを直接提供するライブラリです。開発者は、プロジェクトのデザイン要件、カスタマイズの必要性、そして長期的な保守性を考慮して、これらのツールから適切なものを選ぶ必要があります。

npmのダウンロードトレンド

3 年

GitHub Starsランキング

統計詳細

パッケージ
ダウンロード数
Stars
サイズ
Issues
公開日時
ライセンス
bulma050,0706.97 MB5211年前MIT
evergreen-ui012,4366.75 MB803年前MIT
grommet08,3559.19 MB4161ヶ月前Apache-2.0
react-bootstrap022,6491.48 MB2091年前MIT
reactstrap010,5342.22 MB3232年前MIT
semantic-ui-react013,2422.9 MB2392年前MIT

React 用 UI ライブラリとフレームワーク:アーキテクチャと保守性の比較

フロントエンド開発において、UI ライブラリの選定はプロジェクトの長期的な成功に直結する重要な決定です。ここでは、bulmaevergreen-uigrommetreact-bootstrapreactstrapsemantic-ui-react の 6 つを、実務的な観点から比較します。単なる機能の羅列ではなく、コードの書き方、カスタマイズの容易さ、そして将来の保守リスクに焦点を当てて解説します。

🏗️ 構成アプローチ:CSS のみ vs コンポーネントライブラリ

この 6 つのパッケージは、根本的なアプローチが異なります。bulma は CSS フレームワークであり、React コンポーネントは提供しません。一方、他の 5 つは React コンポーネントをカプセル化して提供します。

bulma はクラス名をつけるだけの CSS です。

  • React の状態管理と UI ロジックを完全に分離できます。
  • 自作コンポーネントにスタイルを当てたい場合に自由度が高いです。
// bulma: CSS クラスを適用するだけ
<button className="button is-primary">
  Click Me
</button>

evergreen-ui は高機能な React コンポーネントを提供します。

  • 内部状態が管理されており、props で制御します。
  • エンタープライズ向けの堅牢な設計が特徴です。
// evergreen-ui: コンポーネントをインポート
import { Button } from 'evergreen-ui';

<Button intent="success">Click Me</Button>

grommet も同様に React コンポーネントを提供します。

  • アクセシビリティに配慮された構造を持っています。
  • テーマプロバイダーで全体をラップする必要があります。
// grommet: ラベルを props で渡す
import { Button } from 'grommet';

<Button label="Click Me" primary />

react-bootstrap は Bootstrap を React 用に再実装しています。

  • Bootstrap のクラス名を自動的に適用してくれます。
  • React のイベントハンドリングがそのまま使えます。
// react-bootstrap: variant で色を指定
import { Button } from 'react-bootstrap';

<Button variant="primary">Click Me</Button>

reactstrap も Bootstrap ベースですが、API が少し異なります。

  • color props でスタイルを制御します。
  • 軽量でシンプルな構成を好む場合に選ばれます。
// reactstrap: color で色を指定
import { Button } from 'reactstrap';

<Button color="primary">Click Me</Button>

semantic-ui-react は Semantic UI の React 版です。

  • 非常に豊富なコンポーネントがありますが、重くなりがちです。
  • 独自のクラス名生成ロジックを持っています。
// semantic-ui-react: primary プロパティ
import { Button } from 'semantic-ui-react';

<Button primary>Click Me</Button>

📐 レイアウトシステム:グリッドとコンテナ

レイアウトをどう構築するかは、開発速度に大きく影響します。各ライブラリがどのようにグリッドやコンテナを扱っているか確認しましょう。

bulma は CSS クラスでレイアウトを定義します。

  • columnscolumn クラスを使用します。
  • 柔軟ですが、クラス名の組み合わせを覚える必要があります。
// bulma: columns クラスを使用
<div className="columns">
  <div className="column">Left</div>
  <div className="column">Right</div>
</div>

evergreen-uiBoxPane コンポーネントでレイアウトします。

  • Flexbox の props を直接コンポーネントに渡せます。
  • CSS を書かずにレイアウト調整が可能です。
// evergreen-ui: Box で Flex レイアウト
import { Box } from 'evergreen-ui';

<Box display="flex">
  <Box flex={1}>Left</Box>
  <Box flex={1}>Right</Box>
</Box>

grommetGrid コンポーネントを提供します。

  • 宣言的なグリッド定義が可能です。
  • 複雑なレイアウトもコードで管理できます。
// grommet: Grid コンポーネント
import { Grid } from 'grommet';

<Grid columns={['1/2', '1/2']}>
  <div>Left</div>
  <div>Right</div>
</Grid>

react-bootstrap は Bootstrap のグリッドシステムをコンポーネント化しています。

  • ContainerRowCol を組み合わせて使います。
  • 慣れ親しんだ Bootstrap の構造そのままです。
// react-bootstrap: Row と Col
import { Container, Row, Col } from 'react-bootstrap';

<Container>
  <Row>
    <Col>Left</Col>
    <Col>Right</Col>
  </Row>
</Container>

reactstrap も同様の構造を持っています。

  • API は react-bootstrap と非常に似ています。
  • Bootstrap のドキュメントがそのまま参考になります。
// reactstrap: Row と Col
import { Container, Row, Col } from 'reactstrap';

<Container>
  <Row>
    <Col>Left</Col>
    <Col>Right</Col>
  </Row>
</Container>

semantic-ui-reactGrid コンポーネントを提供します。

  • Grid.RowGrid.Column で階層を構成します。
  • 細かい制御が可能ですが、ネストが深くなりがちです。
// semantic-ui-react: Grid コンポーネント
import { Grid } from 'semantic-ui-react';

<Grid>
  <Grid.Row>
    <Grid.Column>Left</Grid.Column>
    <Grid.Column>Right</Grid.Column>
  </Grid.Row>
</Grid>

🎨 テーマとカスタマイズ

デザインをブランドに合わせるため、テーマ変更のしやすさは重要です。

bulma は SCSS 変数でカスタマイズします。

  • ビルド時に CSS をコンパイルする必要があります。
  • 色やフォントを一元管理しやすいです。
// bulma: SCSS 変数を上書き
$primary: #ff0000;
@import "bulma";

evergreen-uiThemeProvider でテーマを注入します。

  • ランタイムでテーマを切り替え可能です。
  • 色、タイポグラフィ、間隔などをオブジェクトで定義します。
// evergreen-ui: ThemeProvider
import { ThemeProvider } from 'evergreen-ui';

<ThemeProvider theme={customTheme}>
  <App />
</ThemeProvider>

grommetGrommet コンポーネントでテーマを定義します。

  • テーマオブジェクトの構造が詳細に定義されています。
  • ダークモードなどの切り替えが容易です。
// grommet: Grommet コンポーネント
import { Grommet } from 'grommet';

<Grommet theme={customTheme}>
  <App />
</Grommet>

react-bootstrap は CSS カスタムプロパティ(CSS Variables)を利用します。

  • Bootstrap 5 から Sass 不要のカスタマイズが可能になりました。
  • CSS ファイルで変数を上書きします。
/* react-bootstrap: CSS 変数 */
:root {
  --bs-primary: #ff0000;
}

reactstrap は Bootstrap 4/5 の CSS に依存します。

  • カスタマイズには Bootstrap の Sass 変数または CSS 上書きが必要です。
  • react-bootstrap と同様のアプローチを取ります。
/* reactstrap: CSS 上書き */
.btn-primary {
  background-color: #ff0000;
}

semantic-ui-react はテーマファイルシステムを持っています。

  • 複雑な設定ファイルを書き換える必要があります。
  • カスタマイズのハードルが比較的高いです。
// semantic-ui-react: config ファイル
// src/theme.config を編集してビルド
// (設定は複雑で手間がかかります)

⚠️ 保守性と将来性

ライブラリが将来もサポートされ続けるかは、技術選定で最も重要な要素の一つです。

bulma は CSS のみのため、依存関係が少なく長持ちします。

  • JavaScript のフレームワーク変更に影響されにくいです。
  • 保守コストが低いのが魅力です。

evergreen-uigrommet は企業-backed なデザインシステムです。

  • 継続的なアップデートが期待できます。
  • 大規模なアプリケーションでの使用に適しています。

react-bootstrapreactstrap は Bootstrap エコシステムに依存します。

  • Bootstrap が存続する限りサポートされます。
  • コミュニティが大きく、情報が見つかりやすいです。

semantic-ui-react は注意が必要です。

  • 元となる Semantic UI の開発は事実上停止しています。
  • 新規プロジェクトでの使用は推奨されません。セキュリティ修正や新機能の追加が見込めないため、既存システムからの移行を検討すべきです。

📊 比較サマリー

特徴bulmaevergreen-uigrommetreact-bootstrapreactstrapsemantic-ui-react
種類CSS フレームワークReact コンポーネントReact コンポーネントReact コンポーネントReact コンポーネントReact コンポーネント
スタイルクラス名PropsPropsPropsPropsProps
カスタマイズSCSS 変数ThemeProviderThemeProviderCSS 変数/SassCSS 変数/Sass設定ファイル
保守状況安定活発活発活発活発⚠️ 停滞
推奨度✅ 高い✅ 高い✅ 高い✅ 高い✅ 高い❌ 非推奨

💡 結論

プロジェクトの要件に応じて、以下の基準で選択してください。

  • 自由度と軽量化 を求めるなら bulma が最適です。CSS 制御を自分でやりたい場合に適しています。
  • エンタープライズ品質 を求めるなら evergreen-ui または grommet を選んでください。特に grommet はアクセシビリティに強いです。
  • Bootstrap 生態系 を活用したいなら react-bootstrap が React 親和性が高く、reactstrap はシンプルさで優れています。
  • semantic-ui-react は、メンテナンスのリスクが高いため、新規プロジェクトでは避けるべきです。

最終的には、チームの習熟度と、プロジェクトが 5 年後も保守可能かどうかを基準に判断することが重要です。

選び方: bulma vs evergreen-ui vs grommet vs react-bootstrap vs reactstrap vs semantic-ui-react

  • bulma:

    CSS クラス名のみを提供するため、React コンポーネントの構造を完全に自分で制御したい場合に最適です。JavaScript のバンドルサイズを増やしたくない、あるいは既存のコンポーネント設計に CSS だけを適用したいプロジェクトに向いています。

  • evergreen-ui:

    Segment によって設計されたエンタープライズ向けのデザインシステムを必要とする場合に適しています。ダッシュボードや管理画面など、一貫性のある堅牢な UI が求められる業務システムでの採用が推奨されます。

  • grommet:

    アクセシビリティとテーマのカスタマイズ性を最優先するプロジェクトに適しています。HP によって支援されており、複雑なテーマ設定やレスポンシブデザインを柔軟に扱いたい場合に強力な選択肢となります。

  • react-bootstrap:

    Bootstrap のエコシステムを活用しつつ、React らしい制御されたコンポーネント(Controlled Components)を使用したい場合に最適です。Bootstrap 5 に対応しており、jQuery 依存のないモダンな開発環境を構築できます。

  • reactstrap:

    Bootstrap ベースのコンポーネントを、よりシンプルで直感的な API で利用したい場合に適しています。学習コストが低く、Bootstrap の知識をそのまま活かして迅速にプロトタイプを作成する際に有効です。

  • semantic-ui-react:

    豊富なコンポーネントセットをすぐに使いたい場合にかつては人気でしたが、元となる Semantic UI のメンテナンスが停滞しているため、新規プロジェクトでの採用は避けるべきです。既存システムの維持以外では、他の活発に開発されているライブラリへの移行を検討してください。

bulma のREADME

Bulma

Bulma is a modern CSS framework based on Flexbox.

Github npm npm Awesome Join the chat at https://gitter.im/jgthms/bulma Build Status

Bulma: a Flexbox CSS framework

Quick install

Bulma is constantly in development! Try it out now:

NPM

npm install bulma

or

Yarn

yarn add bulma

Bower

bower install bulma

Import

After installation, you can import the CSS file into your project using this snippet:

@import 'bulma/css/bulma.css'

CDN

https://www.jsdelivr.com/package/npm/bulma

Feel free to raise an issue or submit a pull request.

CSS only

Bulma is a CSS framework. As such, the sole output is a single CSS file: bulma.css

You can either use that file, "out of the box", or download the Sass source files to customize the variables.

There is no JavaScript included. People generally want to use their own JS implementation (and usually already have one). Bulma can be considered "environment agnostic": it's just the style layer on top of the logic.

Browser Support

Bulma uses autoprefixer to make (most) Flexbox features compatible with earlier browser versions. According to Can I use, Bulma is compatible with recent versions of:

  • Chrome
  • Edge
  • Firefox
  • Opera
  • Safari

Internet Explorer (10+) is only partially supported.

Documentation

The documentation resides in the docs directory, and is built with the Ruby-based Jekyll tool.

Browse the online documentation here.

Related projects

ProjectDescription
Bulma with Attribute ModulesAdds support for attribute-based selectors
Bulma with RailsIntegrates Bulma with the rails asset pipeline
BulmaRazorA lightweight component library based on Bulma and Blazor.
Vue Admin (dead)Vue Admin framework powered by Bulma
BulmaswatchFree themes for Bulma
Goldfish (read-only)Vault UI with Bulma, Golang, and Vue Admin
ember-bulmaEmber addon providing a collection of UI components for Bulma
BloomerA set of React components for Bulma
React-bulmaReact.js components for Bulma
BuefyLightweight UI components for Vue.js based on Bulma
vue-bulma-componentsBulma components for Vue.js with straightforward syntax
BulmaJSJavascript integration for Bulma. Written in ES6 with a data-* API
Bulma-modal-fxA set of modal window effects with CSS transitions and animations for Bulma
Bulma StylusUp-to-date 1:1 translation to Stylus
Bulma.styl (read-only)1:1 Stylus translation of Bulma 0.6.11
elm-bulmaBulma + Elm
elm-bulma-classesBulma classes prepared for usage with Elm
Bulma CustomizerBulma Customizer – Create your own bespoke Bulma build
FulmaWrapper around Bulma for fable-react
Laravel EnsoSPA Admin Panel built with Bulma, VueJS and Laravel
Django BulmaIntegrates Bulma with Django
Bulma TemplatesFree Templates for Bulma
React Bulma ComponentsAnother React wrap on React for Bulma.io
purescript-bulmaPureScript bindings for Bulma
Vue DatatableBulma themed datatable based on Vue, Laravel & JSON templates
bulma-fluentFluent Design Theme for Bulma inspired by Microsoft’s Fluent Design System
csskrt-csskrtAutomatically add Bulma classes to HTML files
bulma-pagination-reactBulma pagination as a react component
bulma-helpersFunctional / Atomic CSS classes for Bulma
bulma-swatch-hookBulma swatches as a react hook and a component
BulmaWP (read-only)Starter WordPress theme for Bulma
RalmaStateless Ractive.js Components for Bulma
Django Simple BulmaLightweight integration of Bulma and Bulma-Extensions for your Django app
rbxComprehensive React UI Framework written in TypeScript
Awesome Bulma TemplatesFree real-world Templates built with Bulma
TrunxSuper Saiyan React components, son of awesome Bulma
@aybolit/bulmaWeb Components library inspired by Bulma and Bulma-extensions
DrulmaDrupal theme for Bulma.
BulrushA Bulma-based Python Pelican blog theme
Bulma Variable ExportAccess Bulma Variables in Javascript/Typescript in project using Webpack
BulmilAn agnostic UI components library based on Web Components, made with Bulma & Stencil.
Svelte Bulma ComponentsLibrary of UI components to be used in Svelte.js or standalone.
Bulma Nunjucks StarterkitStarterkit for Nunjucks with Bulma.
Bulma-SocialSocial Buttons and Colors for Bulma
DivjoyReact codebase generator with Bulma templates
BlazoriseBlazor component library with the support for Bulma CSS framework
Oruga-BulmaBulma theme for Oruga UI
@bulvar/bulmaBulma with CSS Variables support
@angular-bulmaAngular directives and components to use in your Bulma projects
Bulma CSS Class CompletionCSS class name completion for the HTML class attribute based on Bulma CSS classes.
Crispy-BulmaBulma template pack for django-crispy-forms
ManifestManifest is a lightweight Backend-as-a-Service with essential features: DB, Admin panel, API, JS SDK
Reactive BulmaA component library based on React, Bulma, Typescript and Rollup

Browser testing via

Copyright and license Github

Code copyright 2023 Jeremy Thomas. Code released under the MIT license.