CodePreview コンポーネント

プレイグラウンド用コード・プレビュー表示コンポーネント - デフォルト左右配置(特別な場合のみ上下配置)

基本的な使用例

デフォルトの左右配置レイアウト。デスクトップで効率的にコードとプレビューを同時に確認できます。

ボタンコンポーネント

TSX
import { Button } from '@/components/Button';

export default function Example() {
  return (
    <div className="space-y-4">
      <Button variant="primary">
        プライマリボタン
      </Button>
      <Button variant="secondary">
        セカンダリボタン
      </Button>
    </div>
  );
}

プレビュー

Variant設定カラム

3カラム構成でVariant設定を含む例。設定により動的にプレビューが変更されます。

設定

ボタンコンポーネント

TSX
import { Button } from '@/components/Button';

export default function Example() {
  return (
    <Button 
      variant="primary" 
      size="md"
    >
      サンプルボタン
    </Button>
  );
}

プレビュー

上下レイアウト

コードとプレビューを上下に配置するレイアウト。モバイルや狭い画面でのレスポンシブ表示に適しています。

カードコンポーネント

TSX
import { Card } from '@/components/Card';

export default function Example() {
  return (
    <Card className="max-w-sm">
      <Card.Header>
        <Card.Title>製品カード</Card.Title>
        <Card.Description>
          シンプルで美しいカードコンポーネント
        </Card.Description>
      </Card.Header>
      <Card.Content>
        <div className="space-y-4">
          <img 
            src="/placeholder.jpg" 
            alt="製品画像"
            className="w-full h-32 object-cover rounded"
          />
          <p className="text-gray-600 dark:text-gray-400">
            このカードコンポーネントは柔軟性があり、
            様々なコンテンツに対応できます。
          </p>
        </div>
      </Card.Content>
      <Card.Footer>
        <Button variant="primary" className="w-full">
          詳細を見る
        </Button>
      </Card.Footer>
    </Card>
  );
}

プレビュー

製品カード

シンプルで美しいカードコンポーネント

このカードコンポーネントは柔軟性があり、様々なコンテンツに対応できます。

左右レイアウト(デフォルト)

コードとプレビューを左右に配置する標準レイアウト。デスクトップで効率的にコードと結果を同時に確認できます。

カードコンポーネント

TSX
import { Card } from '@/components/Card';

export default function CardExample() {
  return (
    <Card className="max-w-sm">
      <Card.Header>
        <Card.Title>カードタイトル</Card.Title>
        <Card.Description>
          カードの説明文です。
        </Card.Description>
      </Card.Header>
      <Card.Content>
        <p>カードのメインコンテンツ</p>
      </Card.Content>
    </Card>
  );
}

実際の表示

カードタイトル

カードの説明文です。

カードのメインコンテンツ

プレビューのみ

コード表示が不要な場合のプレビュー専用表示

アイコン一覧

1
2
3
4
5
6
7
8
9
10
11
12

コードのみ

プレビューが不要な場合のコード専用表示

設定ファイル

JSON
{
  "name": "sample-project",
  "version": "1.0.0",
  "scripts": {
    "dev": "next dev",
    "build": "next build",
    "start": "next start"
  },
  "dependencies": {
    "next": "^14.0.0",
    "react": "^18.0.0"
  }
}

シンタックスハイライト

react-syntax-highlighterによる美しいコードハイライト

JavaScript

JavaScript
function fibonacci(n) {
  if (n <= 1) return n;
  return fibonacci(n - 1) + fibonacci(n - 2);
}

const result = fibonacci(10);
console.log(`Fibonacci(10) = ${result}`);

実行結果

$ node fibonacci.js
Fibonacci(10) = 55

CSS

CSS
.button {
  display: inline-flex;
  align-items: center;
  padding: 0.5rem 1rem;
  border-radius: 0.375rem;
  border: none;
  font-weight: 500;
  transition: all 0.2s;
  cursor: pointer;
}

.button:hover {
  transform: translateY(-1px);
  box-shadow: 0 4px 12px rgba(0, 0, 0, 0.15);
}

スタイル適用例

HTML

HTML
<!DOCTYPE html>
<html lang="ja">
<head>
  <meta charset="UTF-8">
  <meta name="viewport" content="width=device-width, initial-scale=1.0">
  <title>サンプルページ</title>
</head>
<body>
  <header>
    <h1>ウェブサイトタイトル</h1>
    <nav>
      <ul>
        <li><a href="#home">ホーム</a></li>
        <li><a href="#about">について</a></li>
      </ul>
    </nav>
  </header>
</body>
</html>

レンダリング結果

ウェブサイトタイトル

複数パターン表示

異なるバリエーションを比較表示

小さいボタン

TSX
<Button size="sm" variant="primary">
  小さいボタン
</Button>

プレビュー

大きいボタン

TSX
<Button size="lg" variant="primary">
  大きいボタン
</Button>

プレビュー

レスポンシブ動作

デバイスサイズに応じた自動レイアウト調整

レスポンシブ仕様:

• モバイル(〜1024px): 常に上下レイアウト

• デスクトップ(1024px〜): デフォルト左右配置(特別な場合のみ上下配置を指定)

• コード・プレビューは等幅で表示(flex-1)

• オーバーフロー時は自動スクロール対応

使用方法

CodePreviewコンポーネントの基本的な使用方法

基本的なインポートと使用

TSX
// インポート
import { CodePreview } from '@/components/CodePreview';

// 基本的な使用(デフォルト:左右配置)
<CodePreview>
  <CodePreview.Code title="コード" language="tsx">
    {`コードの内容`}
  </CodePreview.Code>
  <CodePreview.Preview title="プレビュー" centered={true}>
    {/* プレビューコンテンツ */}
  </CodePreview.Preview>
</CodePreview>

// 特別な場合のみ上下配置を指定
<CodePreview layout="vertical">
  <CodePreview.Code title="コード" language="tsx">
    {`コードの内容`}
  </CodePreview.Code>
  <CodePreview.Preview title="プレビュー" centered={true}>
    {/* プレビューコンテンツ */}
  </CodePreview.Preview>
</CodePreview>

Props 一覧:

CodePreview:

  • • layout: "horizontal" | "vertical" (デフォルト: "horizontal" - 左右配置、特別な場合のみ"vertical"を指定)
  • • className: カスタムCSSクラス

CodePreview.Code:

  • • title: コードブロックのタイトル
  • • language: シンタックスハイライトの言語 (tsx, js, css, html, json等)
  • • syntax: シンタックスハイライトの有効/無効 (デフォルト: true)
  • • flex: フレックスレイアウトの適用 (デフォルト: true)

CodePreview.Preview:

  • • title: プレビューエリアのタイトル
  • • background: "white" | "gray" | "transparent" (デフォルト: "white")
  • • centered: 中央配置の有効/無効 (デフォルト: true)
  • • align: 縦方向の配置 ("start" | "center" | "end" | "stretch")
  • • justify: 横方向の配置 ("start" | "center" | "end" | "between" | "around" | "evenly")
  • • direction: フレックス方向 ("row" | "column")
  • • flex: フレックスレイアウトの適用 (デフォルト: true)