これら 6 つのパッケージは、React アプリケーションのユーザーインターフェースを構築するための主要な選択肢です。bulma は CSS のみに焦点を当てたフレームワークであり、他の 5 つ(evergreen-ui、grommet、react-bootstrap、reactstrap、semantic-ui-react)は React コンポーネントを直接提供するライブラリです。開発者は、プロジェクトのデザイン要件、カスタマイズの必要性、そして長期的な保守性を考慮して、これらのツールから適切なものを選ぶ必要があります。
フロントエンド開発において、UI ライブラリの選定はプロジェクトの長期的な成功に直結する重要な決定です。ここでは、bulma、evergreen-ui、grommet、react-bootstrap、reactstrap、semantic-ui-react の 6 つを、実務的な観点から比較します。単なる機能の羅列ではなく、コードの書き方、カスタマイズの容易さ、そして将来の保守リスクに焦点を当てて解説します。
この 6 つのパッケージは、根本的なアプローチが異なります。bulma は CSS フレームワークであり、React コンポーネントは提供しません。一方、他の 5 つは React コンポーネントをカプセル化して提供します。
bulma はクラス名をつけるだけの CSS です。
// bulma: CSS クラスを適用するだけ
<button className="button is-primary">
Click Me
</button>
evergreen-ui は高機能な React コンポーネントを提供します。
// 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 用に再実装しています。
// 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 クラスでレイアウトを定義します。
columns と column クラスを使用します。// bulma: columns クラスを使用
<div className="columns">
<div className="column">Left</div>
<div className="column">Right</div>
</div>
evergreen-ui は Box や Pane コンポーネントでレイアウトします。
// evergreen-ui: Box で Flex レイアウト
import { Box } from 'evergreen-ui';
<Box display="flex">
<Box flex={1}>Left</Box>
<Box flex={1}>Right</Box>
</Box>
grommet は Grid コンポーネントを提供します。
// grommet: Grid コンポーネント
import { Grid } from 'grommet';
<Grid columns={['1/2', '1/2']}>
<div>Left</div>
<div>Right</div>
</Grid>
react-bootstrap は Bootstrap のグリッドシステムをコンポーネント化しています。
Container、Row、Col を組み合わせて使います。// react-bootstrap: Row と Col
import { Container, Row, Col } from 'react-bootstrap';
<Container>
<Row>
<Col>Left</Col>
<Col>Right</Col>
</Row>
</Container>
reactstrap も同様の構造を持っています。
react-bootstrap と非常に似ています。// reactstrap: Row と Col
import { Container, Row, Col } from 'reactstrap';
<Container>
<Row>
<Col>Left</Col>
<Col>Right</Col>
</Row>
</Container>
semantic-ui-react は Grid コンポーネントを提供します。
Grid.Row や Grid.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 変数でカスタマイズします。
// bulma: SCSS 変数を上書き
$primary: #ff0000;
@import "bulma";
evergreen-ui は ThemeProvider でテーマを注入します。
// evergreen-ui: ThemeProvider
import { ThemeProvider } from 'evergreen-ui';
<ThemeProvider theme={customTheme}>
<App />
</ThemeProvider>
grommet も Grommet コンポーネントでテーマを定義します。
// grommet: Grommet コンポーネント
import { Grommet } from 'grommet';
<Grommet theme={customTheme}>
<App />
</Grommet>
react-bootstrap は CSS カスタムプロパティ(CSS Variables)を利用します。
/* react-bootstrap: CSS 変数 */
:root {
--bs-primary: #ff0000;
}
reactstrap は Bootstrap 4/5 の CSS に依存します。
react-bootstrap と同様のアプローチを取ります。/* reactstrap: CSS 上書き */
.btn-primary {
background-color: #ff0000;
}
semantic-ui-react はテーマファイルシステムを持っています。
// semantic-ui-react: config ファイル
// src/theme.config を編集してビルド
// (設定は複雑で手間がかかります)
ライブラリが将来もサポートされ続けるかは、技術選定で最も重要な要素の一つです。
bulma は CSS のみのため、依存関係が少なく長持ちします。
evergreen-ui と grommet は企業-backed なデザインシステムです。
react-bootstrap と reactstrap は Bootstrap エコシステムに依存します。
semantic-ui-react は注意が必要です。
| 特徴 | bulma | evergreen-ui | grommet | react-bootstrap | reactstrap | semantic-ui-react |
|---|---|---|---|---|---|---|
| 種類 | CSS フレームワーク | React コンポーネント | React コンポーネント | React コンポーネント | React コンポーネント | React コンポーネント |
| スタイル | クラス名 | Props | Props | Props | Props | Props |
| カスタマイズ | SCSS 変数 | ThemeProvider | ThemeProvider | CSS 変数/Sass | CSS 変数/Sass | 設定ファイル |
| 保守状況 | 安定 | 活発 | 活発 | 活発 | 活発 | ⚠️ 停滞 |
| 推奨度 | ✅ 高い | ✅ 高い | ✅ 高い | ✅ 高い | ✅ 高い | ❌ 非推奨 |
プロジェクトの要件に応じて、以下の基準で選択してください。
bulma が最適です。CSS 制御を自分でやりたい場合に適しています。evergreen-ui または grommet を選んでください。特に grommet はアクセシビリティに強いです。react-bootstrap が React 親和性が高く、reactstrap はシンプルさで優れています。semantic-ui-react は、メンテナンスのリスクが高いため、新規プロジェクトでは避けるべきです。最終的には、チームの習熟度と、プロジェクトが 5 年後も保守可能かどうかを基準に判断することが重要です。
CSS クラス名のみを提供するため、React コンポーネントの構造を完全に自分で制御したい場合に最適です。JavaScript のバンドルサイズを増やしたくない、あるいは既存のコンポーネント設計に CSS だけを適用したいプロジェクトに向いています。
Segment によって設計されたエンタープライズ向けのデザインシステムを必要とする場合に適しています。ダッシュボードや管理画面など、一貫性のある堅牢な UI が求められる業務システムでの採用が推奨されます。
アクセシビリティとテーマのカスタマイズ性を最優先するプロジェクトに適しています。HP によって支援されており、複雑なテーマ設定やレスポンシブデザインを柔軟に扱いたい場合に強力な選択肢となります。
Bootstrap のエコシステムを活用しつつ、React らしい制御されたコンポーネント(Controlled Components)を使用したい場合に最適です。Bootstrap 5 に対応しており、jQuery 依存のないモダンな開発環境を構築できます。
Bootstrap ベースのコンポーネントを、よりシンプルで直感的な API で利用したい場合に適しています。学習コストが低く、Bootstrap の知識をそのまま活かして迅速にプロトタイプを作成する際に有効です。
豊富なコンポーネントセットをすぐに使いたい場合にかつては人気でしたが、元となる Semantic UI のメンテナンスが停滞しているため、新規プロジェクトでの採用は避けるべきです。既存システムの維持以外では、他の活発に開発されているライブラリへの移行を検討してください。
Bulma is a modern CSS framework based on Flexbox.
Bulma is constantly in development! Try it out now:
npm install bulma
or
yarn add bulma
bower install bulma
After installation, you can import the CSS file into your project using this snippet:
@import 'bulma/css/bulma.css'
https://www.jsdelivr.com/package/npm/bulma
Feel free to raise an issue or submit a pull request.
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.
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:
Internet Explorer (10+) is only partially supported.
The documentation resides in the docs directory, and is built with the Ruby-based Jekyll tool.
Browse the online documentation here.
| Project | Description |
|---|---|
| Bulma with Attribute Modules | Adds support for attribute-based selectors |
| Bulma with Rails | Integrates Bulma with the rails asset pipeline |
| BulmaRazor | A lightweight component library based on Bulma and Blazor. |
| Vue Admin (dead) | Vue Admin framework powered by Bulma |
| Bulmaswatch | Free themes for Bulma |
| Goldfish (read-only) | Vault UI with Bulma, Golang, and Vue Admin |
| ember-bulma | Ember addon providing a collection of UI components for Bulma |
| Bloomer | A set of React components for Bulma |
| React-bulma | React.js components for Bulma |
| Buefy | Lightweight UI components for Vue.js based on Bulma |
| vue-bulma-components | Bulma components for Vue.js with straightforward syntax |
| BulmaJS | Javascript integration for Bulma. Written in ES6 with a data-* API |
| Bulma-modal-fx | A set of modal window effects with CSS transitions and animations for Bulma |
| Bulma Stylus | Up-to-date 1:1 translation to Stylus |
| Bulma.styl (read-only) | 1:1 Stylus translation of Bulma 0.6.11 |
| elm-bulma | Bulma + Elm |
| elm-bulma-classes | Bulma classes prepared for usage with Elm |
| Bulma Customizer | Bulma Customizer – Create your own bespoke Bulma build |
| Fulma | Wrapper around Bulma for fable-react |
| Laravel Enso | SPA Admin Panel built with Bulma, VueJS and Laravel |
| Django Bulma | Integrates Bulma with Django |
| Bulma Templates | Free Templates for Bulma |
| React Bulma Components | Another React wrap on React for Bulma.io |
| purescript-bulma | PureScript bindings for Bulma |
| Vue Datatable | Bulma themed datatable based on Vue, Laravel & JSON templates |
| bulma-fluent | Fluent Design Theme for Bulma inspired by Microsoft’s Fluent Design System |
| csskrt-csskrt | Automatically add Bulma classes to HTML files |
| bulma-pagination-react | Bulma pagination as a react component |
| bulma-helpers | Functional / Atomic CSS classes for Bulma |
| bulma-swatch-hook | Bulma swatches as a react hook and a component |
| BulmaWP (read-only) | Starter WordPress theme for Bulma |
| Ralma | Stateless Ractive.js Components for Bulma |
| Django Simple Bulma | Lightweight integration of Bulma and Bulma-Extensions for your Django app |
| rbx | Comprehensive React UI Framework written in TypeScript |
| Awesome Bulma Templates | Free real-world Templates built with Bulma |
| Trunx | Super Saiyan React components, son of awesome Bulma |
| @aybolit/bulma | Web Components library inspired by Bulma and Bulma-extensions |
| Drulma | Drupal theme for Bulma. |
| Bulrush | A Bulma-based Python Pelican blog theme |
| Bulma Variable Export | Access Bulma Variables in Javascript/Typescript in project using Webpack |
| Bulmil | An agnostic UI components library based on Web Components, made with Bulma & Stencil. |
| Svelte Bulma Components | Library of UI components to be used in Svelte.js or standalone. |
| Bulma Nunjucks Starterkit | Starterkit for Nunjucks with Bulma. |
| Bulma-Social | Social Buttons and Colors for Bulma |
| Divjoy | React codebase generator with Bulma templates |
| Blazorise | Blazor component library with the support for Bulma CSS framework |
| Oruga-Bulma | Bulma theme for Oruga UI |
| @bulvar/bulma | Bulma with CSS Variables support |
| @angular-bulma | Angular directives and components to use in your Bulma projects |
| Bulma CSS Class Completion | CSS class name completion for the HTML class attribute based on Bulma CSS classes. |
| Crispy-Bulma | Bulma template pack for django-crispy-forms |
| Manifest | Manifest is a lightweight Backend-as-a-Service with essential features: DB, Admin panel, API, JS SDK |
| Reactive Bulma | A component library based on React, Bulma, Typescript and Rollup |
Code copyright 2023 Jeremy Thomas. Code released under the MIT license.