Zodバリデーションのエラーメッセージを日本語化する設定

Zodは非常に強力なバリデーションツールですが、標準のエラーメッセージは英語で出力されます。
ユーザー向けのUIでは、日本語でわかりやすく表示したい場面が多くあります。
このドキュメントでは、Zodのエラーメッセージを日本語化する具体的な方法とカスタマイズ手法を、実例とともに詳しく解説します。
日本語化のアプローチ
Zodの日本語化には以下の3つの方法があります:
方法 | 概要 | おすすめ度 |
---|---|---|
.refine() や .superRefine() | カスタム条件と同時にエラーメッセージ指定 | ★★★ |
.describe() +メッセージ解釈 | UI側で .description を使って表示メッセージに利用 | ★★☆ |
.errorMap() の活用 | グローバルにエラーメッセージを置き換える | ★★★ |
方法① .refine()
で個別にエラーメッセージを指定
tsimport { z } from "zod";
const passwordSchema = z
.string()
.min(8, { message: "パスワードは8文字以上で入力してください" })
.refine((val) => /[A-Z]/.test(val), {
message: "パスワードには大文字を1文字以上含めてください",
});
min()
などのメソッドでもmessage
を指定可能refine()
は自由な条件とカスタムメッセージを同時に扱えるのが便利
方法② .superRefine()
で複数項目にまたがる日本語バリデーション
tsconst signUpSchema = z
.object({
password: z.string(),
confirmPassword: z.string(),
})
.superRefine(({ password, confirmPassword }, ctx) => {
if (password !== confirmPassword) {
ctx.addIssue({
code: "custom",
path: ["confirmPassword"],
message: "パスワードと確認用パスワードが一致しません",
});
}
});
- フィールド間の整合性に関するバリデーションに最適
ctx.addIssue()
で任意のパスとメッセージを明示的に追加可能
方法③ ZodErrorMap
を使ってグローバルに日本語化
Zodはエラーコードに応じたグローバルメッセージ変換マップを定義可能です。
tsimport { z, ZodIssueCode, setErrorMap } from "zod";
// 日本語化マップを定義
setErrorMap((issue, ctx) => {
const translations: Record<ZodIssueCode, string> = {
invalid_type: "型が正しくありません",
too_small: "値が小さすぎます",
too_big: "値が大きすぎます",
invalid_string: "文字列の形式が正しくありません",
invalid_enum_value: "許可されていない値です",
invalid_literal: "指定されたリテラル値と一致しません",
custom: "不正な値です",
// 他にも必要に応じて追加可能
};
const message = translations[issue.code] ?? ctx.defaultError;
return { message };
});
使用例:
tsconst schema = z.object({
email: z.string().email(),
age: z.number().min(18),
});
const result = schema.safeParse({ email: "test", age: 10 });
// エラー内容は日本語化されて出力される
console.log(result.error?.format());
画面表示に応じて個別翻訳をしたいときは?
フォームのフィールドごとにエラーを表示する場合、以下のように error.format()
を活用できます。
tsconst result = schema.safeParse(data);
if (!result.success) {
const formatted = result.error.format();
console.log(formatted.email?._errors); // ["メールアドレスの形式が正しくありません"]
}
React Hook Formで日本語エラーを扱うには?
React Hook Form + Zodで日本語エラーを表示したい場合、Zodスキーマに明示的に message
を設定するだけでOKです。
tsconst schema = z.object({
name: z.string().nonempty("名前を入力してください"),
});
これで formState.errors.name.message
に日本語エラーが格納され、UIでそのまま利用できます。
まとめ
Zodのバリデーションを日本語化することで、ユーザー体験が向上し、エラー内容の理解もスムーズになります。
方法 | 特徴 |
---|---|
.refine() / .superRefine() | 特定項目や複数項目間の柔軟な日本語対応が可能 |
.min(..., { message }) など | 単項目のエラーを個別に日本語化 |
setErrorMap() | グローバルで一括日本語化が可能 |
複雑なアプリケーションでは、これらを併用してスキーマごとの柔軟なエラーメッセージ戦略を設計すると、非常に高品質なUXが実現できます。
プロジェクト全体で統一された日本語バリデーションを整えたい場合は、Zodスキーマを共通モジュールとして分離・共通化する設計がおすすめです。
- article
Zod で配列・オブジェクトを安全に扱うバリデーションテクニック
- article
【実践】Zod の union・discriminatedUnion を使った柔軟な型定義
- article
Zod で条件付きバリデーションを実装する方法(if/then/else パターン)
- article
【徹底解説】Zod の refine と superRefine の違いと実践活用シーン
- article
Zod と React Hook Form を組み合わせて使う方法と実装例
- article
【入門】Zod で型安全なフォームバリデーションを実現する基本ステップ
- article
Zod と React Hook Form を組み合わせて使う方法と実装例
- article
Zustandでフォームの状態を管理する:React Hook Formとの併用パターン
- article
React Hook Formはもう不要?Jotaiで実現する、パフォーマンスを意識したフォーム状態管理術
- article
Zodバリデーションのエラーメッセージを日本語化する設定
- article
Zodとは?型安全なバリデーションを実現するZodの魅力と使い方
- article
React 開発を加速する GitHub Copilot 活用レシピ 20 選
- article
Prisma の公式ドキュメントを使い倒すためのコツ
- article
GitHub Actions × Node.js:テストとデプロイを自動化する
- article
Pinia × TypeScript:型安全なストア設計入門
- article
Obsidian デイリーノート活用術:毎日の思考ログを資産に変える方法
- article
Git で特定のコミットを打ち消す!git revert の正しい使い方
- blog
iPhone 17シリーズの発表!全モデルiPhone 16から進化したポイントを見やすく整理
- blog
Googleストアから訂正案内!Pixel 10ポイント有効期限「1年」表示は誤りだった
- blog
【2025年8月】Googleストア「ストアポイント」は1年表記はミス?2年ルールとの整合性を検証
- blog
Googleストアの注文キャンセルはなぜ起きる?Pixel 10購入前に知るべき注意点
- blog
Pixcel 10シリーズの発表!全モデル Pixcel 9 から進化したポイントを見やすく整理
- blog
フロントエンドエンジニアの成長戦略:コーチングで最速スキルアップする方法
- review
今の自分に満足していますか?『持たざる者の逆襲 まだ何者でもない君へ』溝口勇児
- review
ついに語られた業界の裏側!『フジテレビの正体』堀江貴文が描くテレビ局の本当の姿
- review
愛する勇気を持てば人生が変わる!『幸せになる勇気』岸見一郎・古賀史健のアドラー実践編で真の幸福を手に入れる
- review
週末を変えれば年収も変わる!『世界の一流は「休日」に何をしているのか』越川慎司の一流週末メソッド
- review
新しい自分に会いに行こう!『自分の変え方』村岡大樹の認知科学コーチングで人生リセット
- review
科学革命から AI 時代へ!『サピエンス全史 下巻』ユヴァル・ノア・ハラリが予見する人類の未来