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
| 機能 | Yup | Zod |
|---|---|---|
| 型推論 | 良好 | 優秀 |
| バンドルサイズ | 〜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: true | abortEarly: false を設定 |
本番環境チェックリスト
- スキーマはモジュールレベルで定義
- InferType による型推論
- カスタムエラーメッセージ
- フォームの場合は abortEarly: false
- フォームライブラリ用のリゾルバー
- 多言語対応の場合はローカライゼーション
参考ドキュメント
ライセンス: MIT(寛容ライセンスのため全文を引用しています) · 原本リポジトリ
詳細情報
- 作者
- d-subrahmanyam
- ライセンス
- MIT
- 最終更新
- 2026/3/24
Source: https://github.com/d-subrahmanyam/deno-fresh-microservices / ライセンス: MIT
関連スキル
doubt-driven-development
重要な判断はすべて、本番環境への展開前に新しい視点から対抗的レビューを実施します。速度より正確性が重要な場合、不慣れなコードを扱う場合、本番環境・セキュリティに関わるロジック・取り消し不可の操作など影響度が高い場合、または後でバグを修正するよりも今検証する方が効率的な場合に活用してください。
apprun-skills
TypeScriptを使用したAppRunアプリケーションのMVU設計に関する総合的なガイダンスが得られます。コンポーネントパターン、イベントハンドリング、状態管理(非同期ジェネレータを含む)、パラメータと保護機能を備えたルーティング・ナビゲーション、vistestを使用したテストに対応しています。AppRunコンポーネントの設計・レビュー、ルートの配線、状態フローの管理、AppRunテストの作成時に活用してください。
desloppify
コードベースのヘルスチェックと技術負債の追跡ツールです。コード品質、技術負債、デッドコード、大規模ファイル、ゴッドクラス、重複関数、コードスメル、命名規則の問題、インポートサイクル、結合度の問題についてユーザーが質問した場合に使用してください。また、ヘルススコアの確認、次の改善項目の提案、クリーンアップ計画の作成をリクエストされた際にも対応します。29言語に対応しています。
debugging-and-error-recovery
テストが失敗したり、ビルドが壊れたり、動作が期待と異なったり、予期しないエラーが発生したりした場合に、体系的な根本原因デバッグをガイドします。推測ではなく、根本原因を見つけて修正するための体系的なアプローチが必要な場合に使用してください。
test-driven-development
テスト駆動開発により実装を進めます。ロジックの実装、バグの修正、動作の変更など、あらゆる場面で活用できます。コードが正常に動作することを証明する必要がある場合、バグ報告を受けた場合、既存機能を修正する予定がある場合に使用してください。
incremental-implementation
変更を段階的に実施します。複数のファイルに影響する機能や変更を実装する場合に使用してください。大量のコードを一度に書こうとしている場合や、タスクが一度では完結できないほど大きい場合に活用します。