チェックボックス・ラジオボタン(Checkbox / Radio)
複数選択・単一選択・トグルスイッチUIを、Mantine・Ant Design・shadcn/ui・Chakra UI・MUI・CSS/カスタム の6種で比較。 グループ化・indeterminate状態・Switchコンポーネントなど、実践的なユースケースをインタラクティブに確認できます。
Mantine Checkbox / Radio / Switch
Mantineが提供するフォーム系コンポーネント群。Checkbox・Radio・Switch すべてが統一されたAPIを持ち、 filled/outline バリアント、indeterminate状態、Checkbox.Group / Radio.Group によるグループ化、 onLabel/offLabel を使ったSwitch のカスタマイズが可能。
Checkbox.GroupRadio.GroupSwitch内蔵indeterminate対応5サイズ
読み込み中...
tsx
'use client';
import { useState } from 'react';
import { MantineProvider, Checkbox, Radio, Stack } from '@mantine/core';
import '@mantine/core/styles.css';
const options = ['React', 'Vue', 'Svelte', 'Angular'];
export function MantineCheckboxRadioDemo() {
const [checked, setChecked] = useState<string[]>(['React']);
const [radio, setRadio] = useState('React');
return (
<MantineProvider>
<Stack gap="lg">
<div>
<p className="text-sm font-medium mb-2">Checkbox(複数選択)</p>
<Checkbox.Group value={checked} onChange={setChecked}>
<Stack gap="xs">
{options.map((opt) => (
<Checkbox key={opt} value={opt} label={opt} />
))}
</Stack>
</Checkbox.Group>
</div>
<div>
<p className="text-sm font-medium mb-2">Radio(単一選択)</p>
<Radio.Group value={radio} onChange={setRadio}>
<Stack gap="xs">
{options.map((opt) => (
<Radio key={opt} value={opt} label={opt} />
))}
</Stack>
</Radio.Group>
</div>
</Stack>
</MantineProvider>
);
}🤖 AIプロンプトテンプレート
React + Tailwind CSSで、Mantineを使ったチェックボックス・ラジオボタンを実装してください。 - 使用ライブラリ: @mantine/core の Checkbox・Radio・Switch コンポーネント - Checkbox.Group で複数選択グループを宣言的に定義 - Radio.Group でラジオボタングループを宣言的に定義 - indeterminate prop でチェックボックスの中間状態を表現 - filled・outline バリアントでスタイルを切り替え - Switch コンポーネントに onLabel・offLabel でカスタムラベルを追加 - disabled prop でグレーアウト+クリック不可を実現 - xs〜xl の5サイズ(size prop)に対応
⚠️ このプロンプトはあくまでたたき台です。AIの回答はモデルやバージョン、会話の文脈によって毎回異なります。意図通りに動かない場合は、条件を追記・修正してお使いください。
ライブラリ比較
| 項目 | Mantine | Ant Design | shadcn/ui | Chakra UI | MUI | CSS カスタム |
|---|---|---|---|---|---|---|
| グループ化 | ✅ Checkbox.Group / Radio.Group | ✅ Checkbox.Group / Radio.Group | ✅ RadioGroup / 手動でCheckbox管理 | ✅ CheckboxGroup / RadioGroup.Root | ✅ FormGroup / RadioGroup | ⚠️ 手動でstateを管理 |
| indeterminate | ✅ indeterminate prop | ✅ indeterminate prop | ✅ checked="indeterminate" | ✅ checked="indeterminate" | ✅ indeterminate prop | ⚠️ 自作(SVGで表現) |
| ボタン型Radio | ❌ 標準では非対応 | ✅ Radio.Button | ⚠️ 手動で自作 | ⚠️ 手動で自作 | ❌ 標準では非対応 | ⚠️ 自作(完全自由) |
| Switchコンポーネント | ✅ Switch(onLabel/offLabel) | ✅ Switch(checkedChildren) | ✅ Switch | ✅ Switch.Root | ✅ Switch内蔵 | ⚠️ 自作(CSS transition) |
| サイズバリエーション | ✅ xs〜xl(5段階) | ✅ small / middle / large | ⚠️ 自作(Tailwindで調整) | ✅ sm / md / lg | ✅ small・medium(2段階) | ✅ 自由に設定可能 |
| カラー | ✅ color prop | ✅ color prop | ⚠️ Tailwindで調整 | ✅ colorPalette prop | ✅ color prop(primary・secondary・error等) | ✅ 完全自由 |
| アクセシビリティ | ✅ WAI-ARIA準拠 | ✅ WAI-ARIA準拠 | ✅ WAI-ARIA準拠(Radix UI) | ✅ WAI-ARIA準拠 | ✅ WAI-ARIA準拠 | ⚠️ ネイティブinputを活用 |
| フォームライブラリ連携 | ✅ React Hook Form / Zod | ✅ Ant Form との統合 | ✅ React Hook Form連携容易 | ✅ React Hook Form 連携可 | ✅ React Hook Form連携容易 | ✅ React Hook Form連携容易 |
| バンドルサイズ | ⚠️ 中(全体で大) | ⚠️ 中(全体で大) | ✅ 使った分だけ | ⚠️ 中(emotion含む) | ⚠️ 中(Emotion込み) | ✅ ゼロ追加 |
選択のポイント
- Mantine — Checkbox.Group / Radio.Group による宣言的なグループ化と、filled/outline バリアントで デザインの統一がしやすい。Switch も onLabel/offLabel でリッチに表現できる。 Mantine を採用しているプロジェクトなら一択。
- Ant Design — Radio.Button によるボタン型ラジオが便利で、カレンダーや切り替えUIによく使われる。 indeterminate を使った「全選択」パターンのサポートが手厚く、管理画面向きの実装が揃っている。
- MUI — 週670万DLと圧倒的なシェアを誇るMaterial Design準拠のライブラリ。エンタープライズ〜スタートアップまで幅広く採用され、ドキュメントや事例が豊富。Emotion(CSS-in-JS)を使用するため、Tailwind CSS v4との併用時はスタイルをMUI側のpropsで制御することを推奨。
- shadcn/ui — Radix UI ベースで WAI-ARIA 完全準拠。Checkbox の indeterminate 状態を標準サポート。 コードが手元にあるためデザインの完全カスタマイズが可能。 React Hook Form との相性も良く、フォーム実装に適している。
- Chakra UI — Checkbox.Root / Control / Label の複合パターンで、 レイアウトの自由度とアクセシビリティを両立。Switch も同様の複合パターンで提供される。 v3 での API 変更が大きいため、ドキュメントは必ず v3 を参照すること。
- CSS カスタム — デザインシステムに完全準拠したいとき、アニメーションや色を細部まで制御したいときに最適。 ネイティブ input を非表示にしつつアクセシビリティを保持できる。 React Hook Form との連携も素直に書ける。
チェックボックス・ラジオボタンは、複数または単一の選択肢からユーザーが選ぶフォームコンポーネント。チェックボックスは複数選択可、ラジオは排他選択。
アンケートの選択肢・設定のON/OFF・フィルター条件の複数選択・利用規約への同意など、ユーザーの意思決定が必要なフォームで使われる。
主なバリエーション
- •基本チェックボックス型
- •カスタムスタイル型
- •インジケーター付きラジオ型
- •カードラジオ型(選択肢をカードで表示)
- •不定状態(indeterminate)対応型