ボタン(Button)

クリックで操作を実行するボタンUIの実装を4つのアプローチで比較。 バリアント・サイズ・ローディング状態・アイコン統合など、実践的な使用例をインタラクティブに確認できます。

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/uiCSS / Tailwind
バリアント数✅ 6種(gradient含む)✅ 5タイプ✅ 6種(destructive含む)⚠️ 自作(無制限)
サイズ✅ xs〜xl(5段階)✅ small・middle・large✅ sm・default・lg・icon✅ 自由に設定可能
ローディング状態✅ loading prop✅ loading prop⚠️ Loader2アイコンで自作⚠️ CSS animationで自作
アイコン統合✅ leftSection / rightSection✅ icon prop✅ children内に配置⚠️ 手動で配置
グループ化✅ Button.Group⚠️ Space コンポーネント⚠️ flexboxで手動⚠️ flexboxで手動
危険系アクション⚠️ color="red" で代替✅ danger prop✅ destructive variant⚠️ カラー選択で対応
カスタマイズ性⚠️ テーマ依存⚠️ テーマ依存✅ コードが手元にある✅ 完全自由
アクセシビリティ✅ WAI-ARIA準拠✅ WAI-ARIA準拠✅ Radix UIベース⚠️ 実装者次第
TypeScript✅ 完全サポート✅ 完全サポート✅ 完全サポート✅ 完全サポート
バンドルサイズ⚠️ 中(全体で大)⚠️ 中(全体で大)✅ 使った分だけ✅ ゼロ追加

選択のポイント

  • Mantine — グラデーションボタンや Button.Group など、リッチな表現を手軽に実現したい場合に最適。 カラーパレットが豊富で、デザインシステムとして使いやすい。 すでに Mantine を採用しているプロジェクトなら迷わず選択。
  • Ant Design — danger prop による危険系アクションの明示や、circle・round シェイプなど、 エンタープライズ向けの多様なユースケースをカバーしたい場合に最適。 管理画面や業務システムとの相性が良い。
  • shadcn/ui — コンポーネントのコードがプロジェクトに直接コピーされるため、完全にカスタマイズ可能。 Radix UI ベースでアクセシビリティが高く、Tailwind CSS との相性が抜群。 ライブラリへの依存を最小化しながら、高品質な UI を実現したい場合に最適。
  • CSS / Tailwind CSS — 外部ライブラリへの依存を避けたい、デザインを完全にコントロールしたい場合に最適。 バンドルサイズを最小化でき、デザイナーとの協業でもスタイルの調整がしやすい。 小規模プロジェクトや独自のデザインシステム構築に向いている。