Agent Skills by ALSEL
OpenAIソフトウェア開発⭐ リポ 0品質スコア 70/100

yup

Yupスキーマ検証ライブラリ。Formikと組み合わせたフォーム検証で人気があります。 React/Formikを使用したフォーム構築やスキーマベースの検証が必要な場合に使用できます。 使用する場合:ユーザーが「Yup」「Formik検証」「yupスキーマ」「Formikセットアップ」「フォーム検証ライブラリ」について言及した場合 使用しない場合:Zodプロジェクト(zodスキルを使用)、NestJS/class-validator(class-validatorスキルを使用)、新規プロジェクト(Zodを推奨)

description の原文を見る

Yup schema validation library. Popular with Formik for form validation. Use when building forms with React/Formik or needing schema-based validation. USE WHEN: user mentions "Yup", "Formik validation", asks about "yup schema", "Formik setup", "form validation library" DO NOT USE FOR: Zod projects (use zod skill), NestJS/class-validator (use class-validator skill), new projects (prefer Zod)

SKILL.md 本文

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

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

詳細情報: mcp__documentation__fetch_docs を technology: yup で使用して、包括的なドキュメントを取得できます。

セットアップ

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 User = yup.InferType<typeof userSchema>;

// バリデーション
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;
  }
}

スキーマの種類

String

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');

Number

const numberSchema = yup
  .number()
  .required()
  .min(0)
  .max(100)
  .positive()
  .integer()
  .typeError('Must be a number');

Date

const dateSchema = yup
  .date()
  .required()
  .min(new Date('2020-01-01'), 'Too old')
  .max(new Date(), 'Cannot be in future');

Array

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 []

Object

const objectSchema = yup.object({
  name: yup.string().required(),
  address: yup.object({
    street: yup.string().required(),
    city: yup.string().required(),
  }),
}).noUnknown(true);  // Strip unknown keys

// 部分的なオブジェクト(すべてのフィールドがオプション)
const partialSchema = objectSchema.partial();

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

const result = await schema.validate(data, {
  abortEarly: false,    // すべてのエラーを返す(最初のエラーだけでなく)
  stripUnknown: true,   // 不明なキーを削除
  strict: false,        // 型の強制変換を許可
});

// 同期バリデーション
schema.validateSync(data);
schema.isValidSync(data);  // ブール値を返す

比較: Yup vs Zod

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

このスキルを使用しない場合

  • 新規プロジェクト - TypeScript統合が優れているため、Zodを優先
  • NestJSアプリケーション - デコレータ付きの class-validator を使用
  • フォーム検証以外 - Zodの方が一般的なバリデーションに優れたAPI

アンチパターン

アンチパターン問題点正しいアプローチ
コンポーネント内のスキーマ毎回のレンダリング時に再作成されるモジュールレベルで定義
abortEarly: false を忘れる最初のエラーのみ表示されるabortEarly: false を設定
カスタムメッセージなし汎用的なエラー各項目にカスタムメッセージを追加
InferType を使用しない手動での型定義yup.InferType<typeof schema> を使用

クイックトラブルシューティング

問題原因解決方法
InferTypeの型エラーインポート漏れ'yup' から型をインポート
非同期バリデーションが動作しないvalidateSync を使用.validate()(非同期)を使用
"Value is required" が予期せず表示undefined vs null.nullable() または .optional() を使用
エラーメッセージが表示されないabortEarly: trueabortEarly: false を設定

本番環境チェックリスト

  • スキーマはモジュールレベルで定義
  • InferType による型推論
  • カスタムエラーメッセージ
  • フォームの場合は abortEarly: false
  • フォームライブラリ用のリゾルバー
  • 多言語対応の場合はローカライゼーション

参考ドキュメント

ライセンス: MIT(寛容ライセンスのため全文を引用しています) · 原本リポジトリ

詳細情報

作者
d-subrahmanyam
リポジトリ
d-subrahmanyam/deno-fresh-microservices
ライセンス
MIT
最終更新
2026/3/24

Source: https://github.com/d-subrahmanyam/deno-fresh-microservices / ライセンス: MIT

本サイトは GitHub 上で公開されているオープンソースの SKILL.md ファイルをクロール・インデックス化したものです。 各スキルの著作権は原作者に帰属します。掲載に問題がある場合は info@alsel.co.jp または /takedown フォームよりご連絡ください。
原作者: d-subrahmanyam · d-subrahmanyam/deno-fresh-microservices · ライセンス: MIT
yup | Agent Skills by ALSEL | Agent Skills by ALSEL