Webアプリを作っていると、「ユーザーに色を選んでもらいたい」という場面、よくありますよね?
たとえば、こんなケースです。
- ボタンや背景の色を自由にカスタマイズさせたい
- グラフの色を選ばせて見た目を変えたい
- テーマカラーをユーザーに決めてもらいたい
こういった場面で便利なのがカラーピッカー(Color Picker)です。
この記事では、Reactで簡単にカラーピッカーを実装できる人気ライブラリreact-color
の導入方法から活用例まで、サンプルコード付きでわかりやすく解説していきます。
カラーピッカーとは?

カラーピッカーとは、色を視覚的に選択できるUIコンポーネントです。
一般的なカラーピッカーは以下のような機能を持っています。
- パレットから色をクリックして選択する
- RGBやHEXコードを直接入力する
Reactではこうした機能を簡単に組み込める便利なライブラリがいくつかあります。その中でも有名で使いやすいのがreact-color
であり、以下のような特長があります。
特長 | 内容 |
---|---|
コンポーネント形式 | 各種カラーピッカーがReactコンポーネントとして提供されている |
複数スタイルをサポート | Sketch Picker、Chrome Picker、Photoshop Pickerなど多彩なスタイルがある |
色のフォーマット対応 | HEX / RGB / HSL / HSV など幅広いフォーマットに対応 |
イベントハンドリングがシンプル | onChange イベントで色の変更を簡単に取得できる |
また、react-color
には、複数のカラーピッカーコンポーネントが用意されており、好みに応じて選ぶことができます。
カラーピッカー名 | 特徴 |
---|---|
SketchPicker | Photoshop風の高機能UI |
ChromePicker | Chrome DevTools風のUI |
BlockPicker | 四角い色ブロックのパレット形式 |
TwitterPicker | Twitter風の軽量な色パレット |
CirclePicker | 丸型の色アイコンで選べるカラーピッカー |
react-colorの導入方法
ここでは、Reactアプリにreact-color
をインストールして、カラーピッカーを表示するまでの手順を解説します。
Reactプロジェクトの準備
まずはReactのプロジェクトを作成しましょう。
npx create-react-app my-color-picker-app
cd my-color-picker-app
既にReactアプリがある場合はこの手順は不要です
パッケージのインストール
次に、react-color
パッケージをインストールします。npm
またはyarn
のどちらでもOKです。
# npmの場合
npm install react-color
# yarnの場合
yarn add react-color
これで準備は完了です。それでは実装していきましょう。
react-colorの基本的なサンプルコード
react-color
で一番よく使われるカラーピッカーがSketchPicker
です。SketchPicker
を使ってカラーピッカーを表示しているシンプルなサンプルコードを以下に示します。
// App.js
import React from 'react';
import { SketchPicker } from 'react-color';
class ColorPicker extends React.Component {
render() {
return <SketchPicker />;
}
}
export default ColorPicker;
上記のサンプルコードは最小構成で、カラーピッカーだけが表示されます。選んだ色を「取得」したり「表示」したりはまだしていません。
選択した色を取得・表示するサンプルコード
次に、選択した色をstate
に保持し、現在の選択色を表示する機能を加えます。以下のサンプルコードではuseState
で色を保持しています。
// App.js
import { useState } from 'react';
import { SketchPicker } from 'react-color';
const App = () => {
const [color, setColor] = useState('#FF5733');
const handleChangeComplete = (newColor) => {
setColor(newColor.hex); // HEX形式のカラーコード
};
return (
<div style={{ padding: '20px' }}>
<h3>選択中の色: {color}</h3>
<SketchPicker color={color} onChange={handleChangeComplete} />
<div
style={{
marginTop: '20px',
width: '100px',
height: '100px',
backgroundColor: color,
border: '1px solid #ccc',
}}
/>
</div>
);
};
export default App;
color
に現在の選択色を格納SketchPicker
のonChange
イベントでリアルタイムに色を取得- 色コードを
<h3>
に表示(リアルタイムで変化) - 同時に
div
の背景色としても反映(リアルタイムで変化)
補足
SketchPicker
には、色が変更されたときに実行できるイベントとして、onChange
とonChangeComplete
の2種類のイベントハンドラがあります。それぞれの違いは、イベントが発火するタイミングです。
イベント名 | 発火のタイミング | 主な用途 |
---|---|---|
onChange | ユーザーが色をスライダーなどで調整している途中でもリアルタイムに発火 | プレビュー表示など、変更を即時反映したいときに便利 |
onChangeComplete | ユーザーが操作を完了したとき(マウスを離したときなど)に一度だけ発火 | 最終的な値を保存したり、APIに送信したいときに使う |
カラーピッカーの背景クリックで閉じるサンプルコード
実際のアプリでは、常時カラーピッカーを表示するのではなく「必要なときだけ表示」したい場面も多いですよね。
しかし、SketchPicker
にはキャンセルボタン(閉じるボタン)が付いていないため、カラーピッカーを閉じるには別の工夫が必要です。そこで今回は、ピッカーの背後に透明な背景(オーバーレイ)を表示し、そこをクリックするとピッカーが閉じるように実装します。
以下のサンプルコードでは、以下のような動作を実現しています。
- 「カラーを選択」ボタンをクリック → カラーピッカーが表示される
- ピッカーの外側をクリック → カラーピッカーが閉じる
- このような動作を実現するため、ピッカーの背後に透明な
div
(オーバーレイ)を配置し、そこをクリックするとカラーピッカーを閉じるようにしています。
- このような動作を実現するため、ピッカーの背後に透明な
import { useState } from 'react';
import { SketchPicker } from 'react-color';
const App = () => {
const [color, setColor] = useState('#FF5733');
const [showPicker, setShowPicker] = useState(false);
const handleChange = (newColor) => {
setColor(newColor.hex);
};
return (
<div style={{ padding: '20px' }}>
<h3>選択中の色: {color}</h3>
<div style={{ position: 'relative', display: 'inline-block' }}>
<button onClick={() => setShowPicker(true)}>カラーを選択</button>
{showPicker && (
<>
{/* オーバーレイ:画面全体を覆って、クリックで閉じる */}
<div
onClick={() => setShowPicker(false)}
style={{
position: 'fixed',
top: 0,
left: 0,
right: 0,
bottom: 0,
backgroundColor: 'transparent',
zIndex: 1,
}}
/>
{/* カラーピッカー:ボタンの横に絶対配置 */}
<div
style={{
position: 'absolute',
left: '110%',
top: 0,
marginLeft: '10px',
zIndex: 2,
}}
>
<SketchPicker color={color} onChange={handleChange} />
</div>
</>
)}
</div>
{/* カラープレビュー */}
<div
style={{
marginTop: '20px',
width: '100px',
height: '100px',
backgroundColor: color,
border: '1px solid #ccc',
}}
/>
</div>
);
};
export default App;
Material UIを使っている場合は、Popover
を使うと、オーバーレイと閉じる処理が組み込まれていて便利です。以下にMaterial UIを使ったサンプルコードを示します。
import { Box, Button, Popover } from '@mui/material';
import { useState } from 'react';
import { SketchPicker } from 'react-color';
const App = () => {
const [color, setColor] = useState('#FF5733');
const [anchorEl, setAnchorEl] = useState(null);
const handleClick = (event) => {
setAnchorEl(event.currentTarget);
};
const handleClose = () => {
setAnchorEl(null);
};
const handleChange = (newColor) => {
setColor(newColor.hex);
};
const open = Boolean(anchorEl);
return (
<Box sx={{ p: 2 }}>
<h3>選択中の色: {color}</h3>
<Button variant="outlined" onClick={handleClick}>
カラーを選択
</Button>
<Popover
open={open}
anchorEl={anchorEl}
onClose={handleClose}
anchorOrigin={{
vertical: 'top', // 上端から表示
horizontal: 'right', // ボタンの右端に接する
}}
transformOrigin={{
vertical: 'top',
horizontal: 'left', // カラーピッカーの左端がボタンの右端に接する
}}
>
<SketchPicker color={color} onChange={handleChange} />
</Popover>
<Box
sx={{
mt: 2,
width: 100,
height: 100,
border: '1px solid #ccc',
bgcolor: color,
}}
/>
</Box>
);
};
export default App;
本記事のまとめ
この記事ではReactで使える人気ライブラリreact-color
を使って、カラーピッカーを実装する方法を解説しました。
- カラーピッカーとは何か?
react-color
の導入方法- 色の取得・表示方法
- 背景クリックで閉じる実装例
- ボタンの横にピッカーを表示する工夫
など、実際のWebアプリ開発でも役立つポイントを、サンプルコード付きで詳しく紹介しました。
カラーピッカーをうまく活用すれば、ユーザーにとって「色選びの楽しさ」や「デザインの自由度」を提供できます。ぜひ、自分のReactアプリにも取り入れてみてくださいね!