Claude Code Plugins

Community-maintained marketplace

Feedback

synthetic-data-generator

@ntaksh42/agents
0
0

テスト用の合成データ生成スキル。リアルなユーザーデータ、トランザクション、ログ、APIレスポンス等を生成。GDPR準拠、フェイカー連携、スキーマベース生成、時系列データ、異常データ生成に対応。

Install Skill

1Download skill
2Enable skills in Claude

Open claude.ai/settings/capabilities and find the "Skills" section

3Upload to Claude

Click "Upload skill" and select the downloaded ZIP file

Note: Please verify skill by going through its instructions before using it.

SKILL.md

name synthetic-data-generator
description テスト用の合成データ生成スキル。リアルなユーザーデータ、トランザクション、ログ、APIレスポンス等を生成。GDPR準拠、フェイカー連携、スキーマベース生成、時系列データ、異常データ生成に対応。

Synthetic Data Generator Skill

テスト・開発用のリアルな合成データを生成するスキルです。

概要

このスキルは、開発・テスト・デモ用のリアルで多様な合成データを生成します。個人情報を含まない安全なテストデータ、エッジケースのシミュレーション、パフォーマンステスト用の大量データなど、様々なニーズに対応します。

主な機能

  • ユーザーデータ生成: 名前、メール、住所、電話番号など
  • トランザクションデータ: 購買履歴、決済情報、注文データ
  • ログデータ: アプリケーションログ、アクセスログ、エラーログ
  • 時系列データ: センサーデータ、メトリクス、株価
  • 関係データ: 正規化されたDB用データ(外部キー関係含む)
  • APIレスポンス: REST/GraphQL APIのモックレスポンス
  • 異常データ: エッジケース、エラーシナリオ
  • GDPR準拠: 実在しない個人情報のみ生成
  • 複数形式対応: JSON, CSV, SQL, XML, YAML
  • カスタムスキーマ: JSONスキーマ、OpenAPI、TypeScript型定義からデータ生成

データタイプ

1. 個人情報(PII)

ユーザープロフィール

{
  "id": "usr_7f3k9m2p",
  "firstName": "太郎",
  "lastName": "山田",
  "email": "taro.yamada.test@example.com",
  "phone": "090-1234-5678",
  "dateOfBirth": "1990-05-15",
  "address": {
    "country": "Japan",
    "postalCode": "150-0001",
    "prefecture": "東京都",
    "city": "渋谷区",
    "street": "神宮前1-2-3",
    "building": "テストビル 405号室"
  },
  "createdAt": "2023-01-15T10:30:00Z",
  "lastLogin": "2024-11-20T14:22:33Z"
}

企業情報

{
  "companyId": "com_9x4j2k7n",
  "companyName": "テックイノベーション株式会社",
  "industry": "IT・ソフトウェア",
  "employeeCount": 250,
  "founded": "2015-04-01",
  "website": "https://techinnovation-test.example.com",
  "email": "info@techinnovation-test.example.com",
  "phone": "03-1234-5678",
  "address": {
    "country": "Japan",
    "postalCode": "100-0001",
    "prefecture": "東京都",
    "city": "千代田区",
    "street": "丸の内1-1-1"
  }
}

2. トランザクションデータ

購買データ

{
  "orderId": "ord_20241122_001",
  "customerId": "usr_7f3k9m2p",
  "orderDate": "2024-11-22T09:15:00Z",
  "status": "completed",
  "items": [
    {
      "productId": "prod_laptop_001",
      "productName": "ノートパソコン ProBook 15",
      "category": "Electronics",
      "quantity": 1,
      "unitPrice": 89800,
      "discount": 5000,
      "subtotal": 84800
    },
    {
      "productId": "prod_mouse_042",
      "productName": "ワイヤレスマウス",
      "category": "Accessories",
      "quantity": 2,
      "unitPrice": 2980,
      "discount": 0,
      "subtotal": 5960
    }
  ],
  "subtotal": 90760,
  "tax": 9076,
  "shipping": 0,
  "total": 99836,
  "paymentMethod": "credit_card",
  "shippingAddress": {
    "name": "山田 太郎",
    "postalCode": "150-0001",
    "prefecture": "東京都",
    "city": "渋谷区",
    "street": "神宮前1-2-3",
    "phone": "090-1234-5678"
  }
}

決済データ

{
  "transactionId": "txn_20241122_001",
  "orderId": "ord_20241122_001",
  "amount": 99836,
  "currency": "JPY",
  "paymentMethod": "credit_card",
  "cardLast4": "1234",
  "cardBrand": "VISA",
  "status": "succeeded",
  "timestamp": "2024-11-22T09:16:12Z",
  "gatewayResponse": {
    "authCode": "AUTH123456",
    "transactionRef": "ref_abc123xyz"
  }
}

3. ログデータ

アプリケーションログ

{
  "timestamp": "2024-11-22T10:15:32.456Z",
  "level": "INFO",
  "service": "user-service",
  "environment": "production",
  "traceId": "trace_7f3k9m2p4j",
  "spanId": "span_2x9k4n",
  "userId": "usr_7f3k9m2p",
  "action": "user.login",
  "message": "User logged in successfully",
  "metadata": {
    "ipAddress": "192.168.1.100",
    "userAgent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64)",
    "sessionId": "sess_abc123xyz"
  },
  "duration": 234
}

エラーログ

{
  "timestamp": "2024-11-22T10:16:45.789Z",
  "level": "ERROR",
  "service": "payment-service",
  "environment": "production",
  "traceId": "trace_err_5k2m9p",
  "error": {
    "type": "PaymentGatewayError",
    "message": "Payment gateway timeout",
    "code": "GATEWAY_TIMEOUT",
    "stack": "at processPayment (payment.js:45:12)..."
  },
  "context": {
    "orderId": "ord_20241122_002",
    "amount": 15000,
    "retryCount": 2
  }
}

アクセスログ(Apache/Nginx形式)

192.168.1.100 - - [22/Nov/2024:10:15:32 +0900] "GET /api/users/profile HTTP/1.1" 200 1234 "https://example.com/dashboard" "Mozilla/5.0 (Windows NT 10.0; Win64; x64)" 0.234
192.168.1.101 - - [22/Nov/2024:10:15:33 +0900] "POST /api/orders HTTP/1.1" 201 567 "https://example.com/cart" "Mozilla/5.0 (Macintosh; Intel Mac OS X)" 0.567
192.168.1.102 - - [22/Nov/2024:10:15:34 +0900] "GET /api/products?category=electronics HTTP/1.1" 200 8901 "-" "PostmanRuntime/7.26.8" 0.123

4. 時系列データ

センサーデータ

{
  "deviceId": "sensor_temp_001",
  "location": "Building A - Room 301",
  "measurements": [
    {
      "timestamp": "2024-11-22T10:00:00Z",
      "temperature": 22.5,
      "humidity": 45.2,
      "pressure": 1013.25
    },
    {
      "timestamp": "2024-11-22T10:05:00Z",
      "temperature": 22.7,
      "humidity": 45.0,
      "pressure": 1013.30
    },
    {
      "timestamp": "2024-11-22T10:10:00Z",
      "temperature": 22.9,
      "humidity": 44.8,
      "pressure": 1013.28
    }
  ]
}

メトリクスデータ

{
  "service": "api-gateway",
  "metrics": [
    {
      "timestamp": "2024-11-22T10:00:00Z",
      "requestsPerSecond": 1250,
      "averageLatency": 45,
      "p95Latency": 120,
      "p99Latency": 250,
      "errorRate": 0.2,
      "cpuUsage": 45.5,
      "memoryUsage": 62.3
    }
  ]
}

5. APIレスポンスデータ

REST APIレスポンス

{
  "status": "success",
  "data": {
    "users": [
      {
        "id": 1,
        "name": "山田太郎",
        "email": "taro@example.com",
        "role": "admin"
      },
      {
        "id": 2,
        "name": "鈴木花子",
        "email": "hanako@example.com",
        "role": "user"
      }
    ],
    "pagination": {
      "page": 1,
      "perPage": 20,
      "total": 150,
      "totalPages": 8
    }
  },
  "meta": {
    "requestId": "req_abc123",
    "timestamp": "2024-11-22T10:15:32Z",
    "version": "v1"
  }
}

GraphQLレスポンス

{
  "data": {
    "user": {
      "id": "usr_123",
      "name": "山田太郎",
      "email": "taro@example.com",
      "posts": [
        {
          "id": "post_001",
          "title": "初めての投稿",
          "content": "こんにちは、これは私の最初の投稿です。",
          "createdAt": "2024-11-20T10:00:00Z",
          "likes": 42
        }
      ]
    }
  }
}

6. 関係データ(正規化DB用)

Users テーブル

INSERT INTO users (id, email, name, created_at) VALUES
(1, 'user1@example.com', '山田太郎', '2024-01-15 10:30:00'),
(2, 'user2@example.com', '鈴木花子', '2024-01-16 11:45:00'),
(3, 'user3@example.com', '佐藤次郎', '2024-01-17 09:20:00');

Orders テーブル(外部キー関係)

INSERT INTO orders (id, user_id, total_amount, status, created_at) VALUES
(1, 1, 99836, 'completed', '2024-11-22 09:15:00'),
(2, 1, 15000, 'pending', '2024-11-22 14:30:00'),
(3, 2, 45000, 'completed', '2024-11-22 10:00:00');

Order_Items テーブル

INSERT INTO order_items (id, order_id, product_id, quantity, unit_price) VALUES
(1, 1, 101, 1, 89800),
(2, 1, 102, 2, 2980),
(3, 2, 103, 1, 15000),
(4, 3, 104, 3, 15000);

異常データ生成

エッジケース

{
  "testCase": "edge_cases",
  "scenarios": [
    {
      "description": "空文字列",
      "data": {
        "name": "",
        "email": "",
        "phone": ""
      }
    },
    {
      "description": "最大長文字列",
      "data": {
        "name": "A".repeat(255),
        "bio": "Lorem ipsum...".repeat(100)
      }
    },
    {
      "description": "特殊文字",
      "data": {
        "name": "O'Brien",
        "company": "A&B Corp.",
        "note": "Test <script>alert('xss')</script>"
      }
    },
    {
      "description": "数値境界値",
      "data": {
        "age": 0,
        "salary": -1,
        "score": 9999999999
      }
    },
    {
      "description": "日付異常値",
      "data": {
        "birthDate": "1900-01-01",
        "futureDate": "2099-12-31",
        "invalidDate": "2024-02-30"
      }
    }
  ]
}

エラーシナリオ

{
  "testCase": "error_scenarios",
  "scenarios": [
    {
      "statusCode": 400,
      "error": {
        "type": "ValidationError",
        "message": "Invalid email format",
        "fields": ["email"]
      }
    },
    {
      "statusCode": 401,
      "error": {
        "type": "UnauthorizedError",
        "message": "Invalid authentication token"
      }
    },
    {
      "statusCode": 404,
      "error": {
        "type": "NotFoundError",
        "message": "User not found",
        "resourceId": "usr_nonexistent"
      }
    },
    {
      "statusCode": 429,
      "error": {
        "type": "RateLimitError",
        "message": "Too many requests",
        "retryAfter": 60
      }
    },
    {
      "statusCode": 500,
      "error": {
        "type": "InternalServerError",
        "message": "Database connection failed"
      }
    }
  ]
}

スキーマベース生成

JSONスキーマから生成

{
  "schema": {
    "type": "object",
    "properties": {
      "name": {
        "type": "string",
        "minLength": 2,
        "maxLength": 50
      },
      "age": {
        "type": "integer",
        "minimum": 18,
        "maximum": 100
      },
      "email": {
        "type": "string",
        "format": "email"
      },
      "tags": {
        "type": "array",
        "items": {
          "type": "string"
        },
        "minItems": 1,
        "maxItems": 5
      }
    },
    "required": ["name", "email"]
  },
  "count": 10
}

生成結果:

[
  {
    "name": "山田太郎",
    "age": 32,
    "email": "taro.yamada@example.com",
    "tags": ["開発", "React", "TypeScript"]
  },
  {
    "name": "鈴木花子",
    "age": 28,
    "email": "hanako.suzuki@example.com",
    "tags": ["デザイン", "UI/UX"]
  }
]

TypeScript型定義から生成

interface User {
  id: string;
  name: string;
  email: string;
  age?: number;
  roles: ('admin' | 'user' | 'guest')[];
  metadata?: Record<string, any>;
}

生成されるデータ:

{
  "id": "usr_7f3k9m2p",
  "name": "山田太郎",
  "email": "taro@example.com",
  "age": 32,
  "roles": ["user"],
  "metadata": {
    "department": "Engineering",
    "joinDate": "2023-04-01"
  }
}

OpenAPI仕様から生成

paths:
  /users:
    get:
      responses:
        '200':
          description: User list
          content:
            application/json:
              schema:
                type: object
                properties:
                  users:
                    type: array
                    items:
                      $ref: '#/components/schemas/User'

生成されるモックレスポンス:

{
  "users": [
    {
      "id": 1,
      "name": "山田太郎",
      "email": "taro@example.com"
    },
    {
      "id": 2,
      "name": "鈴木花子",
      "email": "hanako@example.com"
    }
  ]
}

大量データ生成

パフォーマンステスト用

100万件のユーザーデータを生成してください:

要件:
- ユーザーID: user_000001 〜 user_1000000
- 名前: 日本人名(ランダム)
- メール: {name}@example.com 形式
- 登録日: 2020-01-01 〜 2024-11-22 の範囲でランダム
- 出力形式: CSV
- ファイルサイズ: 約100MB想定

時系列データ(1年分)

1年分の時系列センサーデータを生成してください:

要件:
- 期間: 2024-01-01 00:00:00 〜 2024-12-31 23:59:59
- 間隔: 5分ごと
- センサー数: 10個
- 各測定値: temperature, humidity, pressure
- トレンド: 季節変動を含む
- ノイズ: ±2%のランダムノイズ
- 出力形式: JSON(圧縮)

使用例

基本的な使い方

ユーザーデータを10件生成してください。
フィールド: id, name, email, age, createdAt
出力形式: JSON

特定のスキーマに基づく生成

以下のTypeScript型定義に基づいてデータを20件生成してください:

interface Product {
  id: string;
  name: string;
  category: 'Electronics' | 'Clothing' | 'Food';
  price: number;
  stock: number;
  isAvailable: boolean;
}

出力形式: JSON配列

関係データの生成

ECサイトのデータベース用に以下のテーブルデータを生成してください:

テーブル:
1. users (100件)
2. products (50件)
3. orders (200件、users.idを参照)
4. order_items (500件、orders.idとproducts.idを参照)

出力形式: SQL INSERT文

APIモックレスポンス生成

以下のAPIエンドポイント用のモックレスポンスを10パターン生成してください:

エンドポイント: GET /api/users/:id
レスポンス構造:
- 成功ケース(200): 8パターン
- エラーケース(404): 1パターン
- エラーケース(500): 1パターン

出力形式: JSON(各パターンをファイル化)

テストデータセット生成

E2Eテスト用のテストデータセットを生成してください:

シナリオ:
1. 正常系: 標準的なユーザーフロー(10ケース)
2. 異常系: バリデーションエラー(5ケース)
3. エッジケース: 境界値、特殊文字(5ケース)

各ケースに以下を含める:
- 入力データ
- 期待される出力
- テストの説明

出力形式: YAML

時系列データ生成

株価の時系列データを生成してください:

要件:
- 銘柄数: 5
- 期間: 過去1年間(2023-11-22 〜 2024-11-22)
- 頻度: 日次(営業日のみ)
- データ項目: Open, High, Low, Close, Volume
- トレンド: ランダムウォーク + トレンド
- 出力形式: CSV

ログデータ生成

1週間分のアプリケーションログを生成してください:

要件:
- 期間: 2024-11-15 00:00:00 〜 2024-11-22 23:59:59
- ログレベル: INFO (70%), WARN (20%), ERROR (10%)
- リクエスト数: 1日あたり約10,000件
- サービス: user-service, order-service, payment-service
- 含める情報: timestamp, level, service, traceId, message, metadata
- 出力形式: JSONL(1行1ログ)

高度な機能

データの一貫性保持

以下の制約を満たすデータセットを生成してください:

制約:
- 各ユーザーは必ず1件以上の注文を持つ
- 注文の合計金額は商品の単価×数量と一致
- 注文日は必ずユーザー登録日以降
- 在庫数は注文数量の合計を上回る

生成データ:
- Users: 50件
- Products: 100件
- Orders: 200件
- Order_Items: 500件

現実的な分布

現実的な分布に従うデータを生成してください:

年齢分布:
- 20-29歳: 30%
- 30-39歳: 35%
- 40-49歳: 20%
- 50歳以上: 15%

購買金額分布:
- 正規分布(平均: 10,000円、標準偏差: 3,000円)
- 最小値: 1,000円、最大値: 50,000円

都道府県分布:
- 東京都: 20%
- 大阪府: 10%
- その他: 人口比に応じて

異常検知テスト用データ

異常検知アルゴリズムのテスト用データを生成してください:

正常データ: 900件
- 平均: 100、標準偏差: 10

異常データ: 100件
- パターン1: 極端な外れ値(平均の3σ以上): 50件
- パターン2: トレンドの急激な変化: 30件
- パターン3: 周期性の崩れ: 20件

出力形式: CSV(ラベル付き)

多言語データ

多言語対応アプリのテストデータを生成してください:

言語:
- 日本語: 40%
- 英語: 30%
- 中国語: 20%
- その他(韓国語、フランス語等): 10%

フィールド:
- name: 各言語の一般的な名前
- address: 各国の住所形式
- phone: 各国の電話番号形式
- email: 国際化ドメイン含む

件数: 100件
出力形式: JSON

GDPR・プライバシー対応

完全匿名データ

実在しない個人情報のみを使用:
- 名前: ランダム生成(実在の人物と一致しない)
- メール: test用ドメイン(@example.com等)
- 住所: 架空の住所
- 電話番号: 使用されていない番号帯
- クレジットカード: Luhnアルゴリズムで有効だが実在しない番号

個人情報マスキング

実データをベースにマスキング:
- 名前 → ランダムな仮名
- メール → ハッシュ化 + @example.com
- 電話番号 → 最後の4桁以外をマスキング
- 住所 → 地域のみ保持、詳細はランダム化
- 生年月日 → 年代のみ保持(例: 1990年代)

出力形式

JSON

[
  {"id": 1, "name": "山田太郎"},
  {"id": 2, "name": "鈴木花子"}
]

CSV

id,name,email
1,山田太郎,taro@example.com
2,鈴木花子,hanako@example.com

SQL

INSERT INTO users (id, name, email) VALUES
(1, '山田太郎', 'taro@example.com'),
(2, '鈴木花子', 'hanako@example.com');

XML

<users>
  <user>
    <id>1</id>
    <name>山田太郎</name>
    <email>taro@example.com</email>
  </user>
</users>

YAML

users:
  - id: 1
    name: 山田太郎
    email: taro@example.com
  - id: 2
    name: 鈴木花子
    email: hanako@example.com

ベストプラクティス

  1. 現実的なデータ: 実際のユースケースに近いデータを生成
  2. 一貫性: 関連データ間の整合性を保つ
  3. 多様性: エッジケースを含む多様なパターン
  4. スケーラビリティ: 大量データでも高速に生成
  5. プライバシー: 実在する個人情報は使用しない
  6. テスト可能性: テストに必要な特性を明示的に定義
  7. 再現性: 同じシードで同じデータを生成可能に
  8. ドキュメント: 生成データの仕様を明記

バージョン情報

  • スキルバージョン: 1.0.0
  • 最終更新: 2025-11-22

使用例まとめ

シンプルな生成

ユーザーデータを5件、JSON形式で生成してください。

スキーマベース

以下のTypeScript型定義に基づいて10件生成してください:
{type_definition}

テストデータセット

E2Eテスト用の包括的なテストデータセットを生成してください。
正常系、異常系、エッジケースを含めてください。

このスキルで、開発・テストに必要なあらゆるデータを生成しましょう!