セレクトボックス・コンボボックス(Select / Combobox)
クリックで開くメニューや選択UIの実装を5つのアプローチで比較。 単一選択・複数選択・検索フィルタ・グループ化など、実践的なユースケースをインタラクティブに確認できます。
💡 アクションメニュー(クリックでコマンドを実行するドロップダウン)をお探しの場合はドロップダウン(アクションメニュー)ページ →
React Select
フロントエンドで最も広く使われるセレクトライブラリ。単一選択・複数選択・検索フィルタ・グループ化をすべて props で制御できる。カスタムスタイル(styles prop)にも対応。
isClearableisMultiisSearchableグループ化カスタムスタイル
読み込み中...
tsx
'use client';
import { useState } from 'react';
import ReactSelect, { MultiValue, SingleValue } from 'react-select';
type Option = { value: string; label: string };
const languageOptions: Option[] = [
{ value: 'javascript', label: 'JavaScript' },
{ value: 'typescript', label: 'TypeScript' },
{ value: 'python', label: 'Python' },
{ value: 'go', label: 'Go' },
{ value: 'rust', label: 'Rust' },
];
const groupedOptions = [
{
label: 'フロントエンド',
options: [
{ value: 'javascript', label: 'JavaScript' },
{ value: 'typescript', label: 'TypeScript' },
],
},
{
label: 'バックエンド',
options: [
{ value: 'python', label: 'Python' },
{ value: 'go', label: 'Go' },
{ value: 'rust', label: 'Rust' },
],
},
];
export function ReactSelectDemo() {
const [single, setSingle] = useState<SingleValue<Option>>(null);
const [multi, setMulti] = useState<MultiValue<Option>>([]);
return (
<div className="flex flex-col gap-4 max-w-xs">
{/* 単一選択(検索・クリアボタン付き) */}
<ReactSelect
placeholder="言語を選択..."
options={languageOptions}
value={single}
onChange={setSingle}
isClearable
isSearchable
/>
{/* 複数選択 */}
<ReactSelect
placeholder="複数選択可..."
options={languageOptions}
value={multi}
onChange={setMulti}
isMulti
isClearable
closeMenuOnSelect={false}
/>
{/* グループ化オプション */}
<ReactSelect
placeholder="カテゴリから選択..."
options={groupedOptions}
isClearable
/>
{/* 無効状態 */}
<ReactSelect
placeholder="選択不可"
options={languageOptions}
isDisabled
/>
</div>
);
}🤖 AIプロンプトテンプレート
React + Tailwind CSSで、React Selectを使ったセレクトボックスを実装してください。
- 使用ライブラリ: react-select
- Select コンポーネントで単一選択を実装(isClearable で×ボタン付き、isSearchable で検索対応)
- isMulti prop で複数選択に切り替え(タグ形式で選択済みアイテムを表示)
- closeMenuOnSelect={false} で複数選択時にメニューを閉じないよう設定
- options に { label, options } の配列を渡してグループ化オプションを実装
- isDisabled・isLoading・placeholder・defaultValue など基本propsを活用
- styles prop でカスタムスタイルを適用(Tailwindのカラー変数に合わせてカスタマイズ)⚠️ このプロンプトはあくまでたたき台です。AIの回答はモデルやバージョン、会話の文脈によって毎回異なります。意図通りに動かない場合は、条件を追記・修正してお使いください。
ライブラリ比較
| 項目 | React Select | Mantine | Ant Design | shadcn/ui | カスタム |
|---|---|---|---|---|---|
| 単一選択 | ✅ Select | ✅ Select | ✅ Select | ✅ Select | ✅ 自作 |
| 複数選択 | ✅ isMulti | ✅ MultiSelect | ✅ mode="multiple" | ⚠️ 標準なし | ✅ 自作MultiSelect |
| タグ入力モード | ⚠️ Creatable別途 | ✅ TagsInput別途 | ✅ mode="tags" | ⚠️ 手動実装 | ⚠️ 手動実装 |
| 検索フィルタ | ✅ isSearchable | ✅ searchable | ✅ showSearch | ⚠️ Comboboxで実装 | ⚠️ query stateで自作 |
| グループ化 | ✅ label+options | ✅ group+items | ✅ label+options | ✅ SelectGroup | ⚠️ 手動レンダリング |
| クリアボタン | ✅ isClearable | ✅ clearable | ✅ allowClear | ⚠️ 手動実装 | ⚠️ 手動実装 |
| バリデーション統合 | ⚠️ RHF等と別途 | ✅ error prop | ⚠️ Form.Item経由 | ⚠️ RHF等と別途 | ⚠️ 手動実装 |
| アクセシビリティ | ✅ WAI-ARIA準拠 | ✅ WAI-ARIA準拠 | ✅ WAI-ARIA準拠 | ✅ Base UI標準 | ⚠️ 手動対応が必要 |
| バンドルサイズ | ⚠️ 約30kB | ⚠️ 中(全体で大) | ⚠️ 中(全体で大) | ✅ 使った分だけ | ✅ ゼロ追加 |
選択のポイント
- React Select — フロントエンドで最も広く使われるセレクトライブラリ。単一・複数・検索・グループ化を props だけで制御でき、styles/classNames で完全なスタイルカスタマイズが可能。 React Select 単体で使いたい場合や既存スタックに依存したくない場合に最適。
- Mantine — Select は searchable・clearable・グループ化・バリデーションを標準サポート。 MultiSelect は maxValues で上限設定、タグ形式の表示も組み込み済み。 すでに Mantine を採用しているプロジェクトなら最も統一感が出る。
- Ant Design — mode prop 1つで単一・複数・タグ入力を切り替えられる柔軟さが特徴。 タグモードでユーザーが任意の値を追加できる。管理画面向けのフォームに豊富な実績がある。
- shadcn/ui — Base UI ベースで軽量かつアクセシビリティが高い。コードが手元にあるため スタイルの完全カスタマイズが可能。Combobox は手動実装が必要だが、デザイン自由度は最高。
- カスタム実装 — 外部ライブラリを使わずデザインを完全制御したい場合に。ネイティブ <select> の 手軽なスタイリングから、フル機能のカスタムドロップダウンまで段階的に選べる。 学習コストは高いが、デザインシステムへの完全準拠・軽量化が必要な場面では有力な選択肢。
🤖 AIプロンプトテンプレート
以下の要件でReactのセレクトボックスを実装してください。 【使用ライブラリ】React Select / Mantine Select / Ant Design Select / shadcn/ui / カスタム実装 【選択モード】単一選択 / 複数選択 【機能】検索フィルタ: あり / なし、グループ化: あり / なし、クリアボタン: あり / なし 【スタイル】デフォルト / カスタム(Tailwind CSS) 【その他要件】(自由記述)
⚠️ このプロンプトはあくまでたたき台です。AIの回答はモデルやバージョン、会話の文脈によって毎回異なります。意図通りに動かない場合は、条件を追記・修正してお使いください。