JavaScriptバリデーションライブラリ Yup 入門ガイド

yup javascript library JavaScript
この記事は約8分で読めます。

この記事の最終更新日: 2025年6月23日

はじめに

入力バリデーションはフロントエンド・バックエンドを問わず欠かせない安全装置です。Yup は JavaScript/TypeScript で手軽に 宣言的スキーマバリデーション を行えるライブラリとして広く使われています。この記事では、初心者の方にもわかりやすいように 基本から応用まで を丁寧に解説します。

yup javascript library

バリデーションとは?:ユーザーが入力した内容が正しいかどうかを確認する仕組みのことです。例えば、年齢に文字が入っていないか、メールアドレスの形式が正しいかをチェックします。


1. Yup とは?

  • 宣言的 にスキーマ(型 + 制約)を記述し、データを検証するライブラリ。
  • Formik、React-Hook-Form、Next.js のサーバーアクションなどと組み合わせて使われることが多い。
  • バリデーション結果は 同期/非同期 の両方で取得可能。

スキーマとは?:データがどのような形式(型)や条件(制約)であるべきかを定義するものです。例えば「名前は必須で文字列、年齢は0歳以上の数値」といったルールの集合です。

同期/非同期とは?:同期はその場ですぐに結果を返す処理、非同期は時間がかかる処理(例えばネットワーク通信など)を別スレッドで行い、後で結果を受け取る処理です。


2. Yup を選ぶ理由

理由詳細
シンプルな APIyup.string().required() のように直感的に書ける
TypeScript との相性infer 型サポートで型安全に扱える
チェーン記法制約をドットチェーンで積み重ねられるので読みやすい
国際化対応エラーメッセージを簡単にローカライズ可能
豊富な拡張addMethod でカスタムルールを追加できる

TypeScriptとは?:JavaScriptを拡張して型チェックを可能にしたプログラミング言語です。

型安全とは?:変数や関数に設定したデータ型を厳密に守ることで、バグの発生を減らす仕組みです。


3. インストールとセットアップ

# npm
npm install yup
# または yarn / pnpm

TypeScript プロジェクトの場合、型定義は同梱されているため追加は不要です。

npm/yarn/pnpm:JavaScriptのライブラリを管理・インストールするためのツールです。


4. 基本のスキーマ定義

4.1 文字列

import * as yup from "yup";

const schema = yup.string().required().min(3).max(30);

min(3)は「3文字以上」、max(30)は「30文字以下」の意味です。

4.2 数値

const numSchema = yup.number().integer().positive();

integer()は「整数であること」、positive()は「0より大きいこと」を意味します。

4.3 メールアドレス

const emailSchema = yup.string().email("メールアドレスの形式が正しくありません");

4.4 オブジェクト

const userSchema = yup.object({
  name: yup.string().required(),
  age: yup.number().min(0).max(130).required(),
  email: emailSchema,
});

オブジェクトスキーマは複数のフィールド(項目)をまとめて定義できます。


5. バリデーションの実行方法

5.1 同期的に検証

try {
  userSchema.validateSync(data);
  // OK 時のロジック
} catch (e) {
  // e.errors は配列
}

validateSync()はその場で結果を返します。try...catchでエラーを受け取れます。

5.2 非同期で検証

await userSchema.validate(data, { abortEarly: false }); // すべてのエラーを取得

abortEarly: falseを指定すると、1つのエラーで止まらず、全てのエラーを確認できます。


6. React との統合例

6.1 React-Hook-Form

import { useForm } from "react-hook-form";
import { yupResolver } from "@hookform/resolvers/yup";

const { register, handleSubmit, formState: { errors } } = useForm({
  resolver: yupResolver(userSchema),
});

resolverを使うことで Yup のバリデーションルールを React のフォームに統合できます。

6.2 Formik

<Formik
  initialValues={{ name: "", age: "", email: "" }}
  validationSchema={userSchema}
  onSubmit={handleSubmit}
>
  {/* ... */}
</Formik>

Formikはフォームの状態管理とバリデーションを助けてくれるライブラリです。


7. カスタムバリデーションとメッセージ

yup.addMethod(yup.string, "katakana", function (msg) {
  return this.matches(/^[ァ-ヶー\s]+$/, {
    message: msg ?? "全角カタカナで入力してください",
    excludeEmptyString: true,
  });
});

const schema = yup.string().katakana();

addMethod を使うと独自ルール(例:カタカナだけ)を定義できます。


8. スキーマの再利用と DRY 原則

複数画面で同じスキーマを使う場合は 関数に切り出す か、schemas/ ディレクトリに共通定義を置くと管理しやすくなります。

DRY原則とは?:「Don’t Repeat Yourself(繰り返すな)」の略で、同じ処理や定義を何度も書かない設計方針です。


9. よくあるエラーとデバッグ Tips

エラー原因対処
ValidationError: data must be a型が合わないスキーマと入力データを再確認
期待したエラーが出ないabortEarly が truevalidate({ abortEarly:false }) に設定
オブジェクトのネストでキーが undefinedスキーマが部分一致を許可.defined() を付与

デバッグ:バグやエラーの原因を見つけて修正する作業のことです。


10. まとめ

Yup は 書き味と拡張性のバランスが取れた バリデーションライブラリです。この記事で紹介した基礎を押さえておけば、ほとんどのフォーム検証はスムーズに実装できます。フォーム処理に悩んだら、まず Yup を試してみましょう。


FAQ

Q. Joi や Zod と比べてどう?

  • Joi: Node.js サーバー向け。重量級だが高機能。
  • Zod: TypeScript ファーストで型推論が強力。
  • Yup: フロントエンドでの利用例が豊富。軽量で学習コストが低い。

Q. ブラウザ対応は?

  • ES2015+ をサポートするモダンブラウザなら問題なし。

ES2015+:2015年以降の新しいJavaScriptの書き方を指します(例:アロー関数、クラス構文など)。


11. 最新アップデート(2024–2025)備考

バージョン公開日主要変更点(抜粋)
1.6.12024‑12‑17Bug Fix: lazy() のバリデーションエラーが他の非同期バリデーションと同じ挙動で解決されるように修正
1.6.02024‑12‑16新機能: LazySchema を公開し、遅延スキーマ構築が公式 API に
1.5.02024‑12‑03新機能: object()exact()stripUnknown() を追加し、オブジェクトキーの厳密制御が可能に
1.4.02024‑03‑06新機能: string().datetime() を追加(ISO 8601 / RFC 3339 形式の日時文字列を検証)
1.3.x 系2023‑09〜12スキーマメタデータの型安全化・パフォーマンス改善 など

メンテナンス状況

  • npm における最新安定版は v1.6.1(2024‑12‑17時点)。4か月以内にリリースが行われており、保守は継続中です。
  • GitHub ⭐️23k、依存パッケージ 6,500+ と依然として 採用実績が多い一方、Issue は約165件と backlog が溜まり気味。
  • 標準 JSON Schema API への対応提案(Issue #2255)が議論中。実装は未着手ですが PR 提案あり。
  • 0.x → 1.x 移行では null/undefined の扱いがより厳格になっています(Issue #1906 のマイグレーションガイドを参照)。

エコシステムの動向

  • @hookform/resolvers など周辺ライブラリは 最新バージョンで Yup 1.x を正式サポート
  • 軽量×高速をうたう ZodValibot といった新興ライブラリも普及中。パフォーマンス重視の用途では選択肢として検討すると良いでしょう。

まとめ:Yup は引き続きメンテナンスされており、フォームバリデーションのデファクトスタンダードとして実践投入しやすい状況です。新機能を使いたい場合は v1.6 以降へのアップグレードを推奨します。


コメント

タイトルとURLをコピーしました