セレクトボックス・コンボボックス(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 | Chakra UI | カスタム |
|---|---|---|---|---|---|---|
| 単一選択 | ✅ Select | ✅ Select | ✅ Select | ✅ Select | ✅ Select.Root | ✅ 自作 |
| 複数選択 | ✅ isMulti | ✅ MultiSelect | ✅ mode="multiple" | ⚠️ 標準なし | ✅ multiple prop | ✅ 自作MultiSelect |
| タグ入力モード | ⚠️ Creatable別途 | ✅ TagsInput別途 | ✅ mode="tags" | ⚠️ 手動実装 | ⚠️ 非対応(TagsInput を使用) | ⚠️ 手動実装 |
| 検索フィルタ | ✅ isSearchable | ✅ searchable | ✅ showSearch | ⚠️ Comboboxで実装 | ✅ Select.Input で実装 | ⚠️ query stateで自作 |
| グループ化 | ✅ label+options | ✅ group+items | ✅ label+options | ✅ SelectGroup | ✅ Select.ItemGroup | ⚠️ 手動レンダリング |
| クリアボタン | ✅ isClearable | ✅ clearable | ✅ allowClear | ⚠️ 手動実装 | ✅ Select.ClearTrigger | ⚠️ 手動実装 |
| バリデーション統合 | ⚠️ RHF等と別途 | ✅ error prop | ⚠️ Form.Item経由 | ⚠️ RHF等と別途 | ⚠️ 手動実装 | ⚠️ 手動実装 |
| アクセシビリティ | ✅ WAI-ARIA準拠 | ✅ WAI-ARIA準拠 | ✅ WAI-ARIA準拠 | ✅ Base UI標準 | ✅ WAI-ARIA準拠 | ⚠️ 手動対応が必要 |
| バンドルサイズ | ⚠️ 約30kB | ⚠️ 中(全体で大) | ⚠️ 中(全体で大) | ✅ 使った分だけ | ⚠️ 中(emotion含む) | ✅ ゼロ追加 |
選択のポイント
- React Select — フロントエンドで最も広く使われるセレクトライブラリ。単一・複数・検索・グループ化を props だけで制御でき、styles/classNames で完全なスタイルカスタマイズが可能。 React Select 単体で使いたい場合や既存スタックに依存したくない場合に最適。
- Mantine — Select は searchable・clearable・グループ化・バリデーションを標準サポート。 MultiSelect は maxValues で上限設定、タグ形式の表示も組み込み済み。 すでに Mantine を採用しているプロジェクトなら最も統一感が出る。
- Ant Design — mode prop 1つで単一・複数・タグ入力を切り替えられる柔軟さが特徴。 タグモードでユーザーが任意の値を追加できる。管理画面向けのフォームに豊富な実績がある。
- shadcn/ui — Base UI ベースで軽量かつアクセシビリティが高い。コードが手元にあるため スタイルの完全カスタマイズが可能。Combobox は手動実装が必要だが、デザイン自由度は最高。
- Chakra UI — createListCollection でオプションを型安全に定義し、複合コンポーネントパターンで柔軟にカスタマイズできる。 multiple prop で複数選択に対応し、Portal で z-index 問題を回避できる。 検索フィルタが必要な場合は Select.Input との組み合わせで対応できる。
- カスタム実装 — 外部ライブラリを使わずデザインを完全制御したい場合に。ネイティブ <select> の 手軽なスタイリングから、フル機能のカスタムドロップダウンまで段階的に選べる。 学習コストは高いが、デザインシステムへの完全準拠・軽量化が必要な場面では有力な選択肢。
関連ページ
セレクトUI(選択肢コンポーネント)は、ドロップダウンリストやコンボボックスで選択肢から1つまたは複数を選ぶフォームコンポーネント。
国・都道府県の選択・カテゴリフィルター・フォームの選択項目など、あらかじめ定義された選択肢からユーザーが選ぶ場面で使われる。
主なバリエーション
- •シングルセレクト型
- •マルチセレクト型
- •検索可能コンボボックス型
- •グループ化オプション型
- •カスタムオプションレンダリング型