早く・それなりの UI を実現する React コンポーネントセット 16 選

これまで、開発者が「早く・それなりの UI 」を実現するために、Bootstrap などの CSS フレームワークが重宝されてきました。

しかし今では、React などのライブラリを使って UI をコンポーネント化するようになってきています。
React であっても、事前に CSS フレームワークを読み込んでおき、クラス名を付与することでこれまでと同じように使うことができます。
ただ、既存の CSS フレームワークは内部で jQuery を使用していることが多いので、React と jQuery を共存させるか、jQuery 部分を自前で実装しないといけません。

そこで React で「早く・それなりの UI 」を作れそうな React コンポーネントセットを手当たり次第に調べてみました。

**Note:** Web 向け UI の コンポーネントのみとなっています。React Native や Onsen UI などのハイブリッドアプリ/モバイル Web アプリ向け UI は含めていません。

# React コンポーネントセット 16 選

React コンポーネントセットは、Button や Form などの UI パーツを React コンポーネントとして扱えるようにして、セットとして提供したものです。
多くの場合、React コンポーネントで import すると、render 内で使えるようになります。

英語では "a Set of React Components" や "React UI Library" と呼ばれているようなのですが、ここでは React コンポーネントセットと呼んでいます。

また「React が前提となっている React コンポーネントセット」と「既存の CSS を移植した React コンポーネントセット」の 2 つに分類しています。
**太字になっているもの**が、ある程度メンテナンスされていて、個人的におすすめできそうなものです。

- React を前提とした React コンポーネントセット
    - **[material-ui](http://qiita.com/kyrieleison/items/39ce30dd2d204791a9ea#material-ui)**
    - **[react-toolbox](http://qiita.com/kyrieleison/items/39ce30dd2d204791a9ea#react-toolbox)**
    - **[rebass](http://qiita.com/kyrieleison/items/39ce30dd2d204791a9ea#rebass)**
    - [belle](http://qiita.com/kyrieleison/items/39ce30dd2d204791a9ea#belle)
    - [mui](http://qiita.com/kyrieleison/items/39ce30dd2d204791a9ea#mui)
    - **[grommet](http://qiita.com/kyrieleison/items/39ce30dd2d204791a9ea#grommet)**
    - [elemental-ui](http://qiita.com/kyrieleison/items/39ce30dd2d204791a9ea#elemental-ui)
- 既存の CSS を移植した React コンポーネントセット
    - **[react-bootstrap](http://qiita.com/kyrieleison/items/39ce30dd2d204791a9ea#react-bootstrap)**
    - [reactstrap](http://qiita.com/kyrieleison/items/39ce30dd2d204791a9ea#reactstrap)
    - **[react-mdl](http://qiita.com/kyrieleison/items/39ce30dd2d204791a9ea#react-mdl)**
    - [material-design-react](http://qiita.com/kyrieleison/items/39ce30dd2d204791a9ea#material-design-react)
    - [react-materialize](http://qiita.com/kyrieleison/items/39ce30dd2d204791a9ea#react-materialize)
    - **[react-uikit-components](http://qiita.com/kyrieleison/items/39ce30dd2d204791a9ea#react-uikit-components)**
    - [uikit-react](http://qiita.com/kyrieleison/items/39ce30dd2d204791a9ea#uikit-react)
    - [react-semantify](http://qiita.com/kyrieleison/items/39ce30dd2d204791a9ea#react-semantify)
    - [react-semantic-ui](http://qiita.com/kyrieleison/items/39ce30dd2d204791a9ea#react-semantic-ui)

# React を前提とした React コンポーネントセット

React 向けに作られたもの、あるいは公式で React をサポートしているものです。
React での使用が前提なので、props を渡すことでコンポーネントをカスタマイズできたり、CSS Modules を使ってスタイルを上書きできたり、Server Side Rendering が考慮されていたりします。

既存の CSS フレームワークを使うことにこだわりがないのであれば、こちらから選ぶのが良さそうです。

## material-ui

![screenshot-www.material-ui.com 2016-07-10 19-56-03.png](https://qiita-image-store.s3.amazonaws.com/0/44003/b24375d3-8aaf-32e2-976f-943803f7c78d.png)

- official sites: http://www.material-ui.com/
- github: https://github.com/callemall/material-ui
- npm: https://www.npmjs.com/package/material-ui
- status: in development (v0.15.2)

Google Material Design のガイドラインに沿った React コンポーネントセットです。
日本でも使っている人が多く、情報量も多いので使いやすいと思います。
コンポーネントの種類が充実していてクオリティも高い上、Server Side Rendering が考慮されていたり、テーマやカラーパレットなども用意されていたりして、安心感があります。

## react-toolbox

![screenshot-react-toolbox.com 2016-07-10 19-59-36.png](https://qiita-image-store.s3.amazonaws.com/0/44003/9eb514f5-b56e-19b2-3553-dd9dd96e44d9.png)

- official sites: http://react-toolbox.io/
- github: https://github.com/react-toolbox/react-toolbox
- npm: https://www.npmjs.com/package/react-toolbox
- status: Stable (v1.0.1)

material-ui と同じく、Google Material Design のガイドラインに沿った React コンポーネントセットです。
コンポーネントの充実度は material-ui に遜色なく、テーマやカラーパレットもあります。

material-ui との最も大きな違いは、CSS の管理方法です。
material-ui はインラインスタイルで書かれていますが、react-toolbox は [CSS Modules](https://github.com/css-modules/css-modules) を使用して sass で書かれたスタイルをインポートしています。

**Note:** CSS Modules を使うと、もし既存のオリジナルな CSS がある場合に、React コンポーネントにインポートすることができます。興味のある方は、ぜひ下記の記事を読んでみてください。
Reactを使ったモジュラーCSS : CSS-in-JSとCSS Module http://postd.cc/modular-css-with-react/

## rebass

![screenshot-jxnblk.com 2016-07-10 20-01-25.png](https://qiita-image-store.s3.amazonaws.com/0/44003/2a796e23-aed2-8181-0614-9bd7bfa5ccd8.png)

- official sites: http://jxnblk.com/rebass/
- github: https://github.com/jxnblk/rebass
- npm: https://www.npmjs.com/package/rebass
- status: in development (v0.3.0)

[React Context](https://facebook.github.io/react/docs/context.html) を使用したテーマ変更が特徴の React コンポーネントセットです。
オプションを付ける感覚で、フォントや色だけでなく、余白なども変えることができ、かなり自由度があります。[Demo](http://jxnblk.com/rebass/demo/) を触ってみるとイメージがわくかと思います。

フレームワークを使うとどうしても見た目にオリジナリティが出すのが難しくなってしまうので、手軽に見栄えを変えられるのは良さそうですね。

## belle

![screenshot-nikgraf.github.io 2016-07-10 20-02-22.png](https://qiita-image-store.s3.amazonaws.com/0/44003/8e8a6b35-e4a1-4f4e-7a3c-7068b31ffaa6.png)

- official sites: http://nikgraf.github.io/belle/
- github: https://github.com/nikgraf/belle
- npm: https://www.npmjs.com/package/belle
- status: Stable (v2.0.7)

種類はそこまで多くありませんが、シンプルでフラットな React コンポーネントを提供しています。
比較的コンポーネントに渡せるプロパティが多い印象ですが、material-ui と使い勝手はさほど変わらなそうです。

## mui

![screenshot-www.muicss.com 2016-07-10 20-03-04.png](https://qiita-image-store.s3.amazonaws.com/0/44003/3d802477-3047-2fa9-0cef-17de6cd4c9c8.png)

- official sites: https://www.muicss.com/
- github: https://github.com/muicss/mui
- npm: https://www.npmjs.com/package/muicss
- status: in development (v0.6.5)

Google Material Design のガイドラインに沿った軽量な CSS フレームワークです。
React と Angular を公式でサポートしており、CSS (LESS) もあります。

あくまで基本的なコンポーネントとヘルパを提供することが目的であり、今のところ、コンポーネントの種類自体はさほど多くありません。
ただ、Web だけでなくモバイル、メール、iOS / Android で統一した UI が利用できることを目指しており、メール用のコンポーネントや Sketch 用のデザインファイルも提供されています。

[Roadmap](https://www.muicss.com/docs/v1/getting-started/roadmap) によると、v1 までにコンポーネントの種類が揃ってくるようなので楽しみです。

## grommet

![screenshot-www.grommet.io 2016-07-10 20-03-52.png](https://qiita-image-store.s3.amazonaws.com/0/44003/a3e08ee1-b11e-bbb3-822e-51bc3ef7e016.png)

- official sites: http://www.grommet.io/docs/
- github: https://github.com/grommet/grommet
- npm: https://www.npmjs.com/package/grommet
- status: in development (v0.6.9)

エンタプライズ向けのハイクオリティな UX フレームワークです。
React をベースに開発されていますが、開発者向けというよりかはデザイナー向けに作られていて、Sketch / Illustrator / Axure / Balsamiq 用のデザインファイルがあります。
用意されているコンポーネント群も多様で、珍しいものでは Map, Meter, Number Input, SocialShare, Value, Video, WorldMap などが用意されていました。

## elemental-ui

![screenshot-elemental-ui.com 2016-07-10 20-04-25.png](https://qiita-image-store.s3.amazonaws.com/0/44003/1c52ce82-f5a6-d710-d242-7623380e185a.png)

- official sites: http://elemental-ui.com/
- github: https://github.com/elementalui/elemental
- npm: https://www.npmjs.com/package/elemental
- status: in development (v0.5.14)

[Keystone.js](http://keystonejs.com/) という CMS プラットフォームで使用されている React コンポーネントセットです。
軽量なライブラリで、Bootstrap に似た Button や Form などの基本的なコンポーネントが提供されていました。
Keystone.js から切りだされたもののようで、まだ実験段階という印象です。

# 既存の CSS を移植した React コンポーネントセット

既存の CSS を React コンポーネントとして提供するものです。
使用するには、本家の CSS / JavaScript か、React コンポーネント向けに少し変えた CSS / JavaScript を事前に読み込ませる必要があります。

CSS 単体としても使用できるため、React を使ってレンダリングするページとしないページがある場合、共通の UI にできるのがメリットかもしれません。

ただ、ものによっては本家の CSS フレームワークの一部をサポートしていなかったり、jQuery 依存であったりします。

**Note:** jQuery 依存なフレームワークをどうしても使いたい場合は、以下のサイトが参考になりそうです。
React と jQuery を共存させる http://recruit.gmo.jp/engineer/jisedai/blog/react-with-jquery/

## react-bootstrap

![screenshot-react-bootstrap.github.io 2016-07-10 20-04-52.png](https://qiita-image-store.s3.amazonaws.com/0/44003/fad11151-bb4f-e44d-9b97-80d831fb5dc1.png)

- official sites: http://react-bootstrap.github.io/
- github: https://github.com/react-bootstrap/react-bootstrap
- npm: https://www.npmjs.com/package/react-bootstrap
- status: in development (v0.29.5)

Bootstrap の React コンポーネントセット。Bootstrap の豊富なコンポーネント群が、jQuery の依存なしにほぼ使えます。
現在は v1 に向けて開発中のため注意が必要。大きく変わる可能性があるとのこと。
ただコミュニティの規模が大きく、かなり成熟しているので、安定していると思います。

## reactstrap

![screenshot-reactstrap.github.io 2016-07-10 20-05-30.png](https://qiita-image-store.s3.amazonaws.com/0/44003/9a1050a4-b439-d944-2a0c-8f4cbafbae63.png)

- official sites: https://reactstrap.github.io/
- github: https://github.com/reactstrap/reactstrap/
- npm: https://www.npmjs.com/package/reactstrap
- status: Stable (v1.5.0)

Bootstrap 4 が使いたい人向けの React コンポーネントセット。一通りよく使うものは揃っていますが、react-bootstrap と比べると相当少ないです。
Bootstrap 4 自体がまだ alpha 版のため、あまりおすすめはできません...。

## react-mdl

![screenshot-tleunen.github.io 2016-07-10 20-06-22.png](https://qiita-image-store.s3.amazonaws.com/0/44003/400a3424-6f5c-0aa7-1fa2-44628473d33d.png)

- official sites: https://tleunen.github.io/react-mdl/
- github: https://react-mdl.github.io/react-mdl/
- npm: https://www.npmjs.com/package/react-mdl
- status: Stable (v1.6.1)

Google 製 [Material Design Lite](https://getmdl.io/) の React コンポーネントセット。
マテリアルデザインが使いたい人はこちら。

## material-design-react
- github: https://github.com/nikvm/material-design-react
- npm: https://www.npmjs.com/package/material-design-react
- status: in development (v0.2.1)

Google 製 [Material Design Lite](https://getmdl.io/) の React コンポーネントセット。
こちらは `On break. Have a look at https://github.com/tleunen/react-mdl for a more complete implementation following similar goals.` とあり、現在お休み中のようです。
react-mdl を参照してほしいとのこと。

## react-materialize

![screenshot-react-materialize.github.io 2016-07-10 20-07-37.png](https://qiita-image-store.s3.amazonaws.com/0/44003/5fac7e2d-144b-27ea-8439-4c86bd5cb020.png)

- official sites: https://react-materialize.github.io/
- github: https://github.com/react-materialize/react-materialize
- npm: https://www.npmjs.com/package/react-materialize
- status: in development (v0.14.4)

[materialize](http://materializecss.com/) の React コンポーネントセット。
Material Design Lite と同じく、マテリアルデザインの代表的な CSS フレームワークだと思います。
しかしこちらは jQuery 依存のようです...。見た目としてこちらが好みならありかもしれません。

## react-uikit-components

![screenshot-otissv.github.io 2016-07-10 20-08-20.png](https://qiita-image-store.s3.amazonaws.com/0/44003/d290d40b-219a-3532-1848-597547cf1193.png)

- official sites: http://otissv.github.io/react-uikit-components/
- github: https://github.com/otissv/react-uikit-components
- npm: https://www.npmjs.com/package/react-uikit-components
- status: Stable (v1.2.0)

[UIkit](http://getuikit.com/) の React コンポーネントセット。
コンポーネントやヘルパが充実しているので、一通り使うには困らないという印象です。

また、それぞれのコンポーネントは react-uikit-* に切り出されています。(例えば Button コンポーネントは [react-uikit-button](https://github.com/otissv/react-uikit-button/blob/master/src/button.jsx) にあります)
一部のコンポーネントだけ使うこともできますし、ソースが辿りやすいのもメリットだなと思いました。

## uikit-react

![screenshot-uikit-react.firebaseapp.com 2016-07-10 20-08-59.png](https://qiita-image-store.s3.amazonaws.com/0/44003/ea1ac4ff-0f60-4774-08b0-ec623bb22788.png)

- official sites: https://uikit-react.firebaseapp.com/
- github: https://github.com/stipsan/uikit-react
- npm: https://www.npmjs.com/package/uikit-react
- status: in development (v0.0.10)

[UIkit](http://getuikit.com/) の React コンポーネントセット。
まだ alpha 版のため、github 上では警告がでています。
ドキュメントもまだ少ないので、しばらくは前述の react-uikit-components を使うと良さそうです。

## react-semantify

![screenshot-jessy1092.github.io 2016-07-10 20-09-35.png](https://qiita-image-store.s3.amazonaws.com/0/44003/ece1c6d3-d9ab-3e27-391d-7e8ec19a6b0f.png)

- official sites: http://jessy1092.github.io/react-semantify/
- github: https://github.com/jessy1092/react-semantify
- npm: https://www.npmjs.com/package/react-semantify
- status: in development (v0.5.1)

[Semantic UI](http://semantic-ui.com/) の React コンポーネントセット。
jQuery 依存のようなので注意が必要です。コンポーネントにはまだ `Pre-release` のものも多いので、今後に期待ですね。

## react-semantic-ui
- github: https://github.com/jhudson8/react-semantic-ui
- npm: https://www.npmjs.com/package/react-semantic-ui
- status: in development (v0.2.0)

[Semantic UI](http://semantic-ui.com/) の React コンポーネントセット。
`The purpose of this project is not to recreate every semantic-ui component but only where it makes sense and React components can add value.` とあり、すべての Semantic UI のコンポーネントを置き換えるものではないとのこと。

# おわりに

紹介したものの多くは、まだ in development なので、使用には注意した方がいいかもしれません。
しかし、これらのコンポーネントセットには十分安定したものも出てきていますので、ぜひ検討してみてください。

また、React コンポーネントセットの使用がオーバースペックな場合は、単機能なコンポーネントを [React Components](http://react-components.com/) で探すことも選択肢の一つかと思います。

ぜひお役立てください! Enjoy!

# 参考
- React＋CSSフレームワークを検討してみたよ http://qiita.com/usagi-f/items/9c675737ef44d0bfcb4e
- 5 ReactJS Application Frameworks to Get Your App Running Quickly http://www.gajotres.net/5-reactjs-application-frameworks-to-get-your-app-running-quickly/
- React UI Libraries http://blog.webkid.io/react-ui-libraries/
- Existing UI libraries to use with React.js? http://stackoverflow.com/questions/23380903/existing-ui-libraries-to-use-with-react-js
- 公開されているReact Componentを利用してみる http://qiita.com/koba04/items/2b11361d9e199cf279e2