AppShell・ページレイアウト

アプリケーション全体の骨格(AppShell)と、ページ内のコンテンツ配置(Page Layout)を比較します。 UIライブラリ3種のAppShellに加え、CSS Grid / Flexbox だけで構成する基本レイアウトパターンも紹介します。

Mantine AppShell

Mantine が提供する専用の AppShell コンポーネント。Header・Navbar・Main を宣言的に構成でき、レスポンシブ対応やブレークポイント制御が組み込み済み。

専用コンポーネントレスポンシブ対応Provider必須
読み込み中...
tsx
'use client';
import { MantineProvider, Burger, NavLink } from '@mantine/core';
import { useDisclosure } from '@mantine/hooks';
import '@mantine/core/styles.css';

export function MantineAppShellDemo() {
  const [opened, { toggle }] = useDisclosure(true);
  return (
    <MantineProvider>
      <div style={{ display: 'flex', flexDirection: 'column', height: '100vh' }}>
        <header style={{ height: 50, background: '#1e293b', display: 'flex', alignItems: 'center', padding: '0 16px', gap: 12 }}>
          <Burger opened={opened} onClick={toggle} size="sm" color="white" />
          <span style={{ color: 'white', fontWeight: 700 }}>MyApp</span>
        </header>
        <div style={{ display: 'flex', flex: 1, overflow: 'hidden' }}>
          <nav style={{ width: opened ? 220 : 0, overflow: 'hidden', transition: 'width 200ms', background: '#f8fafc', borderRight: '1px solid #e2e8f0' }}>
            <div style={{ padding: 16, width: 220 }}>
              <NavLink label="ダッシュボード" leftSection="📊" />
              <NavLink label="設定" leftSection="⚙️" />
            </div>
          </nav>
          <main style={{ flex: 1, padding: 16 }}>メインコンテンツ</main>
        </div>
      </div>
    </MantineProvider>
  );
}

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

React + Tailwind CSSで、Mantineを使ったAppShell(アプリシェルレイアウト)を実装してください。
- 使用ライブラリ: @mantine/core の AppShell / AppShell.Header / AppShell.Navbar / AppShell.Main、MantineProvider必須
- AppShell の navbar.width / navbar.breakpoint props でサイドバー幅とレスポンシブブレークポイントを設定する
- collapsed prop でサイドバーの折りたたみ(アイコンのみ表示)を制御する
- ヘッダーにロゴ・タイトル・ユーザーアイコンを配置する
- モバイルではサイドバーをドロワー(オーバーレイ)として開閉できるようにする
- Next.js の layout.tsx パターンに対応した構造にする

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

ライブラリ比較

項目MantineShadcn/uiAnt DesignCSS Grid/Flex
AppShell専用✅ あり❌ 組み合わせ⚠️ Layout組み合わせ❌ 自前実装
ProviderMantineProvider不要ConfigProvider不要
レスポンシブ✅ breakpoint指定✅ Tailwind✅ Grid + breakpoint✅ メディアクエリ
レイアウトパターンHeader+Sidebar+Main自由構成Header+Sider+Content+FooterHoly Grail / Grid / Stacked 等
サイドバー開閉✅ collapsed prop✅ 自前実装✅ collapsible prop✅ 自前実装
スタイリングCSS Modules / styleTailwind CSSCSS-in-JS / tokenCSS Grid / Flexbox
バンドルサイズ中(Tree-shaking可)小(コピペ方式)大(多機能)0(追加なし)
Next.js layout.tsx 統合⚠️ Provider設計が必要✅ 自然に統合⚠️ Provider設計が必要✅ 直接利用可

選択のポイント

  • Mantine — AppShell専用コンポーネントがあり、宣言的にレイアウトを構成できる。レスポンシブ対応も組み込み済みで、最も手早くAppShellを実装できる。
  • Shadcn/ui — Providerが不要でTailwind CSSとの親和性が高い。既存プロジェクトへの導入やデザインのカスタマイズが容易。AppShellの実装は自前だが、自由度が最も高い。
  • Ant Design — Layout + Menu の統合が強力で、管理画面・エンタープライズ向けに最適。テーマカスタマイズのtoken設計や多数の組み込みコンポーネントが魅力。
  • CSS Grid / Flexbox — 追加の依存なしでページレイアウトを構築できる。Next.js の layout.tsx とそのまま組み合わせられるため、軽量なプロジェクトやライブラリに縛られたくない場合に最適。Holy Grail や Dashboard Grid など定番パターンも CSS だけで実現可能。