bootstrap、material-ui(現在は @mui/material)、semantic-ui-react はいずれもフロントエンド開発においてUIコンポーネントを提供するnpmパッケージですが、設計思想や統合方法、カスタマイズ性に大きな違いがあります。bootstrap はCSSフレームワークとして始まり、React向けにコンポーネントが提供されていますが、本質的にはクラスベースのスタイルシステムに依存します。material-ui(MUI)はReact専用に設計されたMaterial Design準拠のコンポーネントライブラリで、テーマやスタイルの制御がJavaScriptから完全に行えます。一方、semantic-ui-react はSemantic UIのReact実装であり、人間らしいHTML構造と宣言的なプロパティAPIを特徴としますが、2023年時点で公式に非推奨(deprecated)とされており、新規プロジェクトでの使用は推奨されません。
UIコンポーネントライブラリを選ぶ際、見た目だけでなく、開発体験、カスタマイズ性、将来性まで考慮する必要があります。ここでは、bootstrap(React向け利用)、material-ui(現:@mui/material)、semantic-ui-react の3つを、実際の開発現場で直面する課題を中心に比較します。
⚠️ 重要なお知らせ:
semantic-ui-reactは GitHubリポジトリ および npmページ で「deprecated」と明記されており、新規プロジェクトでの使用は推奨されません。以下では比較のために言及しますが、選定ガイドラインでは明確に避けるよう勧告しています。
bootstrap:CSSクラスとユーティリティファーストbootstrap はCSSフレームワークであり、Reactで使うには react-bootstrap や reactstrap のようなラッパーパッケージが必要です。スタイルは事前定義されたCSSクラスに依存し、カスタマイズはSCSS変数の上書きや追加CSSで行います。
// react-bootstrap を使用
import { Button } from 'react-bootstrap';
import 'bootstrap/dist/css/bootstrap.min.css';
function App() {
return <Button variant="primary">Click me</Button>;
}
このアプローチは軽量で学習コストが低いですが、動的なテーマ切り替えやコンポーネント単位のスタイル調整には不向きです。例えば、特定のボタンだけ色を変えたい場合、追加のCSSクラスを定義する必要があります。
material-ui(@mui/material):JavaScript中心のテーマ制御MUIはReact専用に設計されており、スタイルはemotion(CSS-in-JS)を内部で使用します。テーマオブジェクトを通じて、色、フォント、スペーシングなどを一元管理できます。
// @mui/material を使用
import { Button, ThemeProvider, createTheme } from '@mui/material';
const theme = createTheme({
palette: { primary: { main: '#1976d2' } }
});
function App() {
return (
<ThemeProvider theme={theme}>
<Button variant="contained">Click me</Button>
</ThemeProvider>
);
}
テーマを動的に変更することも可能で、ダークモード切り替えなども簡単に実装できます。また、sx プロパティを使えば、インラインでレスポンシブ対応のスタイルも記述可能です。
semantic-ui-react:宣言的だが非推奨semantic-ui-react はHTML構造を自然な形で保ちつつ、プロパティで見た目を制御します。しかし、スタイルは依然として外部CSS(semantic-ui-css)に依存しており、カスタマイズにはLESSファイルの再ビルドが必要でした。
// semantic-ui-react(非推奨)
import { Button } from 'semantic-ui-react';
import 'semantic-ui-css/semantic.min.css';
function App() {
return <Button primary>Click me</Button>;
}
このアプローチは初期のReact時代には評価されましたが、現代のCSS-in-JSやTailwindのようなユーティリティファーストの流れとは相容れず、メンテナンスが停止された背景にもなっています。
bootstrap:シンプルだが柔軟性に欠けるreact-bootstrap のコンポーネントは、ほぼBootstrapのクラス名をプロパティにマッピングしただけです。例えば、variant="success" は .btn-success クラスに対応します。これは直感的ですが、独自のインタラクションやアニメーションを追加したい場合、自前で実装する必要があります。
// react-bootstrap:制限されたAPI
<Button size="lg" variant="outline-secondary">
Custom Action
</Button>
material-ui:豊富なプロパティと拡張性MUIのコンポーネントは、disabled、fullWidth、color といった共通プロパティに加え、componentsProps や slots で内部要素をカスタマイズできます。さらに、styled() や useTheme() といったユーティリティで、再利用可能なコンポーネントを簡単に作れます。
// @mui/material:高度なカスタマイズ
import { styled } from '@mui/material/styles';
import { Button } from '@mui/material';
const CustomButton = styled(Button)(({ theme }) => ({
borderRadius: 20,
padding: '8px 24px',
backgroundColor: theme.palette.secondary.main
}));
function App() {
return <CustomButton>Styled Button</CustomButton>;
}
semantic-ui-react:自然なHTMLだが非推奨semantic-ui-react は <Button primary /> のように、人間が読んでも意味が通るAPIを提供していました。しかし、内部で多くのdivラッパーを生成するため、アクセシビリティやパフォーマンスに影響を与えることもありました。また、TypeScriptサポートも弱く、最新のReact機能(例:Concurrent Mode)への対応もありません。
bootstrapreact-bootstrap はWAI-ARIA属性を一部サポートしていますが、完全ではありません。開発者が手動で aria-label や role を追加する必要がある場面が多いです。
material-uiMUIはアクセシビリティを第一に設計されており、すべてのコンポーネントがWAI-ARIAガイドラインに準拠しています。また、@mui/material は @mui/utils 経由で国際化(i18n)のフックも提供しており、多言語対応も容易です。
// MUIのDatePickerでロケールを指定
import { LocalizationProvider } from '@mui/x-date-pickers';
import { AdapterDateFns } from '@mui/x-date-pickers/AdapterDateFns';
import ja from 'date-fns/locale/ja';
function App() {
return (
<LocalizationProvider dateAdapter={AdapterDateFns} adapterLocale={ja}>
{/* DatePicker コンポーネント */}
</LocalizationProvider>
);
}
semantic-ui-reactアクセシビリティ対応は不十分で、多くのコンポーネントがキーボードナビゲーションやスクリーンリーダー対応を欠いていました。非推奨であるため、今後改善されることはありません。
bootstrapreact-bootstrap 自体は軽量ですが、bootstrap CSSを含むため、全体のサイズは小さくありません。ただし、ツリーシェイキングにより未使用コンポーネントは除外できます。
material-ui@mui/material はemotionに依存しており、初期バンドルはやや大きめですが、コード分割とツリーシェイキングにより、実際の使用分だけがバンドルされます。また、@mui/system や @mui/styled-engine といったモジュール分割により、必要な部分だけをインポート可能です。
semantic-ui-reactsemantic-ui-css は1つの巨大なCSSファイルであり、ツリーシェイキングが効きません。未使用のスタイルもすべてバンドルされるため、現代の最適化要件に合いません。
| 観点 | bootstrap(+ react-bootstrap) | material-ui(@mui/material) | semantic-ui-react |
|---|---|---|---|
| 新規プロジェクトでの使用 | 可(シンプルなUI向け) | 推奨(高機能・拡張性重視) | 非推奨(使用禁止) |
| テーマカスタマイズ | SCSS変数上書き(静的) | JavaScriptテーマ(動的・柔軟) | LESS再ビルド(非実用的) |
| Reactとの親和性 | 中(クラス依存) | 高(React専用設計) | 低(非推奨・非対応) |
| アクセシビリティ | 手動対応が必要 | 標準で準拠 | 不十分 |
| 将来性 | 安定(CSSフレームワークとして) | 活発(MUI社が商用サポート) | 終了(メンテナンス停止) |
bootstrap + react-bootstrap で十分です。@mui/material を選ぶことで、長期的な保守性と開発速度を両立できます。semantic-ui-react → 既存プロジェクト以外では絶対に使わないでください。代替案として、Chakra UI や MUI を検討しましょう。UIライブラリは一度選ぶと置き換えが難しいため、技術的負債にならないよう、将来性と開発体験を慎重に見極めてください。
bootstrap を選ぶべきなのは、既存のBootstrapベースのデザインシステムやテンプレートとの互換性が必要な場合、または軽量でシンプルなCSSユーティリティをReactと組み合わせたいケースです。ただし、コンポーネントの動作にはreact-bootstrapやreactstrapなどのラッパーが必要で、純粋なReact的な状態管理とはやや距離があります。高度なテーマカスタマイズや動的スタイル変更には不向きです。
semantic-ui-react は公式に非推奨(deprecated)とされており、新規プロジェクトでは使用すべきではありません。2023年以降、メンテナンスが停止されており、セキュリティアップデートやバグ修正が期待できません。既存プロジェクトの保守以外では、代替ライブラリ(例:@fluentui/react、chakra-ui、またはMUI)への移行を強く推奨します。
material-ui(現在は @mui/material)を選ぶべきなのは、Reactネイティブな開発体験を重視し、TypeScriptサポート、アクセシビリティ、テーマの動的切り替え、レスポンシブ対応などを一貫して扱いたい場合です。特に企業向けダッシュボードや管理画面など、一貫性と拡張性が求められるプロジェクトに最適です。CSS-in-JS(emotion)によるスタイル制御により、コンポーネント単位でのカスタマイズが容易です。
Sleek, intuitive, and powerful front-end framework for faster and easier web development.
Explore Bootstrap docs »
Report bug
·
Request feature
·
Blog
Our default branch is for development of our Bootstrap 5 release. Head to the v4-dev branch to view the readme, documentation, and source code for Bootstrap 4.
Several quick start options are available:
git clone https://github.com/twbs/bootstrap.gitnpm install bootstrap@v5.3.8yarn add bootstrap@v5.3.8bun add bootstrap@v5.3.8composer require twbs/bootstrap:5.3.8Install-Package bootstrap Sass: Install-Package bootstrap.sassRead the Getting started page for information on the framework contents, templates, examples, and more.
Within the download you’ll find the following directories and files, logically grouping common assets and providing both compiled and minified variations.
bootstrap/
├── css/
│ ├── bootstrap-grid.css
│ ├── bootstrap-grid.css.map
│ ├── bootstrap-grid.min.css
│ ├── bootstrap-grid.min.css.map
│ ├── bootstrap-grid.rtl.css
│ ├── bootstrap-grid.rtl.css.map
│ ├── bootstrap-grid.rtl.min.css
│ ├── bootstrap-grid.rtl.min.css.map
│ ├── bootstrap-reboot.css
│ ├── bootstrap-reboot.css.map
│ ├── bootstrap-reboot.min.css
│ ├── bootstrap-reboot.min.css.map
│ ├── bootstrap-reboot.rtl.css
│ ├── bootstrap-reboot.rtl.css.map
│ ├── bootstrap-reboot.rtl.min.css
│ ├── bootstrap-reboot.rtl.min.css.map
│ ├── bootstrap-utilities.css
│ ├── bootstrap-utilities.css.map
│ ├── bootstrap-utilities.min.css
│ ├── bootstrap-utilities.min.css.map
│ ├── bootstrap-utilities.rtl.css
│ ├── bootstrap-utilities.rtl.css.map
│ ├── bootstrap-utilities.rtl.min.css
│ ├── bootstrap-utilities.rtl.min.css.map
│ ├── bootstrap.css
│ ├── bootstrap.css.map
│ ├── bootstrap.min.css
│ ├── bootstrap.min.css.map
│ ├── bootstrap.rtl.css
│ ├── bootstrap.rtl.css.map
│ ├── bootstrap.rtl.min.css
│ └── bootstrap.rtl.min.css.map
└── js/
├── bootstrap.bundle.js
├── bootstrap.bundle.js.map
├── bootstrap.bundle.min.js
├── bootstrap.bundle.min.js.map
├── bootstrap.esm.js
├── bootstrap.esm.js.map
├── bootstrap.esm.min.js
├── bootstrap.esm.min.js.map
├── bootstrap.js
├── bootstrap.js.map
├── bootstrap.min.js
└── bootstrap.min.js.map
We provide compiled CSS and JS (bootstrap.*), as well as compiled and minified CSS and JS (bootstrap.min.*). Source maps (bootstrap.*.map) are available for use with certain browsers’ developer tools. Bundled JS files (bootstrap.bundle.js and minified bootstrap.bundle.min.js) include Popper.
Have a bug or a feature request? Please first read the issue guidelines and search for existing and closed issues. If your problem or idea is not addressed yet, please open a new issue.
Bootstrap’s documentation, included in this repo in the root directory, is built with Astro and publicly hosted on GitHub Pages at https://getbootstrap.com/. The docs may also be run locally.
Documentation search is powered by Algolia's DocSearch.
npm install to install the Node.js dependencies, including Astro (the site builder).npm run test (or a specific npm script) to rebuild distributed CSS and JavaScript files, as well as our docs assets./bootstrap directory, run npm run docs-serve in the command line.Learn more about using Astro by reading its documentation.
You can find all our previous releases docs on https://getbootstrap.com/docs/versions/.
Previous releases and their documentation are also available for download.
Please read through our contributing guidelines. Included are directions for opening issues, coding standards, and notes on development.
Moreover, if your pull request contains JavaScript patches or features, you must include relevant unit tests. All HTML and CSS should conform to the Code Guide, maintained by Mark Otto.
Editor preferences are available in the editor config for easy use in common text editors. Read more and download plugins at https://editorconfig.org/.
Get updates on Bootstrap’s development and chat with the project maintainers and community members.
irc.libera.chat server, in the #bootstrap channel.bootstrap-5).bootstrap on packages which modify or add to the functionality of Bootstrap when distributing through npm or similar delivery mechanisms for maximum discoverability.For transparency into our release cycle and in striving to maintain backward compatibility, Bootstrap is maintained under the Semantic Versioning guidelines. Sometimes we screw up, but we adhere to those rules whenever possible.
See the Releases section of our GitHub project for changelogs for each release version of Bootstrap. Release announcement posts on the official Bootstrap blog contain summaries of the most noteworthy changes made in each release.
Mark Otto
Jacob Thornton
Thanks to BrowserStack for providing the infrastructure that allows us to test in real browsers!
Thanks to Netlify for providing us with Deploy Previews!
Support this project by becoming a sponsor. Your logo will show up here with a link to your website. [Become a sponsor]
Thank you to all our backers! 🙏 [Become a backer]
Code and documentation copyright 2011-2025 the Bootstrap Authors. Code released under the MIT License. Docs released under Creative Commons.