スケルトンスクリーン(Skeleton)

データの読み込み中にコンテンツの形を仮表示するローディングUI。スピナーよりも体感速度が良く、レイアウトシフトを防げる。

このページでは、Mantine・Ant Design・shadcn/ui・MUI・react-loading-skeletonを使ったスケルトンスクリーンの実装パターン(基本・複数行・カード型・アバター+テキスト・ロード完了切り替え)をインタラクティブなデモとコードで確認できます。

Mantine Skeleton

Mantine の Skeleton は height・width で形状を、circle で円形を指定するシンプルなコンポーネント。 visible プロパティで子要素をラップすると、読み込み完了時にそのまま実コンテンツへ切り替えられるため条件分岐が不要になる。

height / widthcircleradiusvisible で子要素ラップ
読み込み中...
tsx
'use client';
import { Skeleton } from '@mantine/core';
import '@mantine/core/styles.css';

export function MantineSkeletonDemo() {
  const [loading, setLoading] = useState(true);

  return (
    <>
      {/* 基本(1行) */}
      <Skeleton height={20} width="100%" radius="sm" />

      {/* 複数行(最後の行は短め) */}
      <Skeleton height={12} />
      <Skeleton height={12} mt={6} />
      <Skeleton height={12} mt={6} width="70%" />

      {/* カード型 */}
      <div style={{ width: 288 }}>
        <Skeleton height={160} radius="md" />
        <Skeleton height={16} mt={12} width="80%" />
        <Skeleton height={12} mt={8} />
      </div>

      {/* アバター + テキスト */}
      <div className="flex items-center gap-3">
        <Skeleton height={40} circle />
        <div className="flex-1">
          <Skeleton height={12} width="40%" />
          <Skeleton height={10} mt={6} width="70%" />
        </div>
      </div>

      {/* ロード切り替え(visibleで子要素をラップ) */}
      <Skeleton visible={loading}>
        <div>実際のコンテンツ</div>
      </Skeleton>
    </>
  );
}

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

React + Tailwind CSSで、Mantineを使ったスケルトンスクリーンを実装してください。
- 使用コンポーネント: @mantine/core の Skeleton
- 基本(1行テキスト)、複数行テキスト、カード型、アバター+テキストの4パターン
- height、width、circle、radius プロパティを活用
- visible プロパティで子要素のラップによる表示制御も実装
- ボタンでローディング/完了をトグルできるデモも追加

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

ライブラリ比較

項目MantineAnt Designshadcn/uiMUIreact-loading-skeleton
アニメーション✅ あり✅ active で切替✅ あり(Tailwind)✅ wave / pulse 切替✅ あり
バリアント形状を数値指定avatar / title / paragraph 一括Tailwind で自由text / rect / circular / roundedcount / circle / width / height
子要素ラップ✅ visible で可能✅ loading で可能⚠️ 条件分岐⚠️ 条件分岐⚠️ 条件分岐
画像プレースホルダ⚠️ height で自作✅ Skeleton.Image⚠️ className で自作✅ rectangular / rounded⚠️ height で自作
学習コスト
おすすめ用途Mantine系プロジェクト管理画面・一括指定派完全カスタム派Material Design準拠UIライブラリ非依存

選択のポイント

  • Mantine — Mantine を既に使っているプロジェクトなら最有力。visible プロパティで子要素をラップすると条件分岐不要で書ける。
  • Ant Designavatarparagraph などのオプションで複雑なレイアウトを一発で作れる。管理画面・ダッシュボードに最適。
  • shadcn/ui — Tailwind の class で形状を完全コントロール。デザインシステムを統一したいプロジェクト向け。
  • MUIvariant が豊富で text はフォントサイズに合わせた自動サイズ調整あり。Material Design 準拠が必要なら最適。
  • react-loading-skeleton — UIライブラリに依存せず単独で使える。count プロパティで複数行を一気に書ける手軽さが魅力。

スケルトンスクリーンは、データの読み込み中にコンテンツの形状を灰色のプレースホルダで仮表示するローディングUI。完成後のレイアウトを先に示すことで体感速度を上げ、レイアウトシフトを防ぐ。

記事一覧・SNSフィード・ユーザープロフィール・ダッシュボードのカードなど、非同期でデータを取得して表示する画面の初期ローディングで使われる。スピナーの代替として体感待ち時間を短縮したい場面に適している。

主なバリエーション
  • テキスト1行型
  • 複数行テキスト型
  • カード型(画像 + テキスト)
  • アバター + テキスト型
  • ロード完了で実コンテンツに切り替え