mcpField
Y
yup

yup

github.com/claude-dev-suite開発4650 回インストール2 日前に更新
リポジトリ

yup について

JavaScript や TypeScript で検証スキーマを作る開発者向けの Yup クイックリファレンスです。主なスキーマ型や検証オプション、フォームでの利用方法を扱います。

主な機能

  1. 01文字列・数値・日付・配列・オブジェクトのスキーマ
  2. 02同期・非同期の検証
  3. 03InferType による型推論
  4. 04未知のフィールドの除去と型変換

活用シーン

  1. 01ユーザーやフォームのデータ検証
  2. 02複数の検証エラーの収集
  3. 03スキーマからの TypeScript 型推論

インストール

コマンドをコピーしてターミナルで実行します。

$npx skills add https://github.com/claude-dev-suite/claude-dev-suite --skill yup

インストール後、Claude Code で/yupを入力して読み込まれたか確認します。

同梱ファイルadvanced.md

詳細

Yup - クイックリファレンス

完全なリファレンス:条件付きバリデーション(.when)、カスタムバリデーション(.test)、Formik/React Hook Form との統合、変換、ローカライズについては、advanced.md を参照してください。

詳細なドキュメント:包括的なドキュメントを確認するには、technology: yup を指定して mcp__documentation__fetch_docs を使用してください。

セットアップ

npm install yup

基本的な使い方

import * as yup from 'yup';

const userSchema = yup.object({
  name: yup.string().required().min(2).max(50),
  email: yup.string().required().email(),
  age: yup.number().required().min(18).max(120).integer(),
  bio: yup.string().optional(),
});

// Type inference
type User = yup.InferType<typeof userSchema>;

// Validate
async function validateUser(data: unknown) {
  try {
    const user = await userSchema.validate(data, { abortEarly: false });
    return { success: true, data: user };
  } catch (error) {
    if (error instanceof yup.ValidationError) {
      return { success: false, errors: error.errors };
    }
    throw error;
  }
}

スキーマの型

文字列
const stringSchema = yup
  .string()
  .required('Name is required')
  .min(2, 'Too short')
  .max(100, 'Too long')
  .trim()
  .email('Invalid email')
  .url('Invalid URL')
  .matches(/^[a-zA-Z]+$/, 'Only letters allowed')
  .oneOf(['option1', 'option2'], 'Must be one of the options');
数値
const numberSchema = yup
  .number()
  .required()
  .min(0)
  .max(100)
  .positive()
  .integer()
  .typeError('Must be a number');
日付
const dateSchema = yup
  .date()
  .required()
  .min(new Date('2020-01-01'), 'Too old')
  .max(new Date(), 'Cannot be in future');
配列
const arraySchema = yup
  .array()
  .of(yup.string().required())
  .required()
  .min(1, 'At least one item')
  .max(10, 'Maximum 10 items')
  .ensure();  // Transform null/undefined to []
オブジェクト
const objectSchema = yup.object({
  name: yup.string().required(),
  address: yup.object({
    street: yup.string().required(),
    city: yup.string().required(),
  }),
}).noUnknown(true);  // Strip unknown keys

// Partial object (all fields optional)
const partialSchema = objectSchema.partial();

バリデーションオプション

const result = await schema.validate(data, {
  abortEarly: false,    // Return all errors, not just first
  stripUnknown: true,   // Remove unknown keys
  strict: false,        // Allow type coercion
});

// Sync validation
schema.validateSync(data);
schema.isValidSync(data);  // Returns boolean

比較:Yup と Zod

機能YupZod
型推論良好優秀
バンドルサイズ約12KB約8KB
非同期バリデーション組み込み.parseAsync()
Formikネイティブ対応リゾルバー経由
条件付き.when().refine()

このスキルを使わない場合

  • 新規プロジェクト - TypeScript との統合に優れた Zod を推奨します
  • NestJS アプリケーション - デコレーターを使った class-validator を使用してください
  • フォーム以外のバリデーション - 一般的なバリデーションには Zod の API のほうが適しています

アンチパターン

アンチパターン問題点適切な方法
コンポーネント内のスキーマレンダリングのたびに再作成されるモジュールレベルで定義する
abortEarly: false を忘れる最初のエラーしか表示されないabortEarly: false を設定する
カスタムメッセージがない汎用的なエラーになる各項目にカスタムメッセージを追加する
InferType を使わない型を手動で定義することになるyup.InferType を使用する

すぐに使えるトラブルシューティング

問題原因解決策
InferType で型エラーが発生するインポートが不足している'yup' から型をインポートする
非同期バリデーションが機能しないvalidateSync を使用している.validate()(非同期)を使用する
「Value is required」が予期せず表示されるundefined と null の違い.nullable() または .optional() を使用する
エラーメッセージが表示されないabortEarly: trueabortEarly: false を設定する

本番環境向けチェックリスト

  • スキーマがモジュールレベルで定義されている
  • InferType による型推論を使用している
  • カスタムエラーメッセージを設定している
  • フォームで abortEarly: false を設定している
  • フォームライブラリ用のリゾルバーを使用している
  • 多言語対応の場合はローカライズしている

リファレンスドキュメント

コメント