ボタン(Button)

クリックで操作を実行するボタンUIを、Mantine・Ant Design・shadcn/ui・Chakra UI・MUI・CSS/Tailwind の6種で比較。 バリアント・サイズ・ローディング状態・アイコン統合など、実践的な使用例をインタラクティブに確認できます。

Mantine Button

Mantineが提供する高機能ボタンコンポーネント。filled・outline・light・subtle・gradient など6種類のvariantと、 xs〜xl の5サイズを標準サポート。Button.Group でグループ化も可能。

6種バリアント5サイズButton.Groupグラデーションローディング内蔵
読み込み中...
tsx
'use client';
import { useState } from 'react';
import { MantineProvider, Button, Group } from '@mantine/core';
import '@mantine/core/styles.css';

export function MantineButtonDemo() {
  const [loading, setLoading] = useState(false);

  const handleClick = () => {
    setLoading(true);
    setTimeout(() => setLoading(false), 2000);
  };

  return (
    <MantineProvider>
      <Group gap="sm" wrap="wrap">
        <Button variant="filled">filled</Button>
        <Button variant="outline">outline</Button>
        <Button variant="light">light</Button>
        <Button variant="subtle">subtle</Button>
        <Button variant="default">default</Button>
        <Button disabled>disabled</Button>
        <Button loading={loading} onClick={handleClick}>loading</Button>
      </Group>
    </MantineProvider>
  );
}

🤖 AIプロンプトテンプレート

React + Tailwind CSSで、Mantineを使ったボタンUIを実装してください。
- 使用ライブラリ: @mantine/core の Button コンポーネント
- バリアント:filled・outline・light・subtle・gradient・default の6種類
- カラースキーム:MantineProvider のカラーパレット(blue・green・red・yellow・gray)を使用
- サイズ:xs・sm・md・lg・xl の5段階(size prop で指定)
- ローディング状態:loading prop でスピナーを自動表示し、クリックを無効化
- 無効状態:disabled prop で半透明表示+クリック不可
- アイコン統合:leftSection・rightSection props でアイコンを左右に配置
- Button.Group コンポーネントで複数ボタンをグループ化
- グラデーション背景バリアント(variant="gradient" + gradient={{ from, to }})の実装

⚠️ このプロンプトはあくまでたたき台です。AIの回答はモデルやバージョン、会話の文脈によって毎回異なります。意図通りに動かない場合は、条件を追記・修正してお使いください。

ライブラリ比較

項目MantineAnt Designshadcn/uiChakra UIMUICSS / Tailwind
バリアント数✅ 6種(gradient含む)✅ 5タイプ✅ 6種(destructive含む)✅ 4種(solid・outline・ghost・subtle)✅ 3種(contained・outlined・text)⚠️ 自作(無制限)
サイズ✅ xs〜xl(5段階)✅ small・middle・large✅ sm・default・lg・icon✅ sm・md・lg(3段階)✅ small・medium・large(3段階)✅ 自由に設定可能
ローディング状態✅ loading prop✅ loading prop⚠️ Loader2アイコンで自作✅ loading prop✅ loading prop(v6)/ CircularProgressで自作⚠️ CSS animationで自作
アイコン統合✅ leftSection / rightSection✅ icon prop✅ children内に配置✅ children内に配置✅ startIcon / endIcon props⚠️ 手動で配置
グループ化✅ Button.Group⚠️ Space コンポーネント⚠️ flexboxで手動✅ Group コンポーネント✅ ButtonGroup⚠️ flexboxで手動
危険系アクション⚠️ color="red" で代替✅ danger prop✅ destructive variant⚠️ colorPalette="red" で代替✅ color="error" で対応⚠️ カラー選択で対応
カスタマイズ性⚠️ テーマ依存⚠️ テーマ依存✅ コードが手元にある✅ colorPalette で柔軟に対応⚠️ sx prop・テーマで対応✅ 完全自由
アクセシビリティ✅ WAI-ARIA準拠✅ WAI-ARIA準拠✅ Radix UIベース✅ WAI-ARIA準拠✅ WAI-ARIA準拠⚠️ 実装者次第
TypeScript✅ 完全サポート✅ 完全サポート✅ 完全サポート✅ 完全サポート✅ 完全サポート✅ 完全サポート
バンドルサイズ⚠️ 中(全体で大)⚠️ 中(全体で大)✅ 使った分だけ⚠️ 中(emotion含む)⚠️ 中(Emotion込みで大きめ)✅ ゼロ追加

選択のポイント

  • Mantine — グラデーションボタンや Button.Group など、リッチな表現を手軽に実現したい場合に最適。 カラーパレットが豊富で、デザインシステムとして使いやすい。 すでに Mantine を採用しているプロジェクトなら迷わず選択。
  • MUI — Material Designに準拠した業界標準のUIライブラリ。週670万DLと圧倒的なシェアを誇り、 StackOverflowやGitHubの事例が豊富。エンタープライズ〜スタートアップまで幅広く採用されており、 デザインシステムとして成熟している。Emotion(CSS-in-JS)を使用するため、 Tailwind CSS v4との併用時はスタイル干渉に注意が必要。
  • Ant Design — danger prop による危険系アクションの明示や、circle・round シェイプなど、 エンタープライズ向けの多様なユースケースをカバーしたい場合に最適。 管理画面や業務システムとの相性が良い。
  • shadcn/ui — コンポーネントのコードがプロジェクトに直接コピーされるため、完全にカスタマイズ可能。 Radix UI ベースでアクセシビリティが高く、Tailwind CSS との相性が抜群。 ライブラリへの依存を最小化しながら、高品質な UI を実現したい場合に最適。
  • Chakra UI — colorPalette prop によるカラーテーマの柔軟な切り替えが特徴。 シンプルなAPIで直感的に扱えるため、学習コストが低い。 アクセシビリティが標準で高水準。Emotion(CSS-in-JS)を使用するため、 Tailwind CSS v4 との併用時はスタイル干渉に注意が必要。
  • CSS / Tailwind CSS — 外部ライブラリへの依存を避けたい、デザインを完全にコントロールしたい場合に最適。 バンドルサイズを最小化でき、デザイナーとの協業でもスタイルの調整がしやすい。 小規模プロジェクトや独自のデザインシステム構築に向いている。

関連する逆引きリファレンス

ボタンは、ユーザーのクリック・タップ操作でアクションを実行するUIコンポーネント。テキスト・アイコン・スタイルのバリエーションで用途を伝える。

フォーム送信・ダイアログ開閉・ナビゲーション・データ操作など、あらゆるユーザーアクションのトリガーとして使われる。

主なバリエーション
  • プライマリ・セカンダリ・ゴーストの3段階型
  • アイコン付き型
  • ローディング状態付き型
  • サイズバリエーション型(sm/md/lg)
  • グループボタン型(ButtonGroup)