2
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

[zod v4] エラーメッセージをカスタマイズする時の入力値の取り方

Last updated at Posted at 2025-06-18

2025年5月にzod v4が公開されました。

zod v4ではv3と比較しいくつかの変更点があります。
具体的な変更点は以下の記事が詳しいです。

さて、zod v4では、ZodErrorクラスから入力値を取る方法も変更されています。
ZodErrorのデータをもとにエラーメッセージを組み立てることも多いかと思いますので、本記事ではZodErrorからデータを取得する方法について解説します。

v3の場合

v3までは、issue.receivedから入力値を取得する事ができていました。

zod v3
import { z } from "zod";

const Schema = z.object({
  foo: z.number(),
  bar: z.number(),
});

const { success, data, error } = Schema.safeParse(
  { foo: 1, bar: "hoge" },
);

if (!success) {
  for (const issue of error.issues) {
    console.log("code:", issue.code); //=> invalid_type
    console.log("path:", issue.path); //=> [ 'bar' ]
    console.log("期待値:", issue.expected); //=> number
    console.log("入力値:", issue.received); //=> string (入力した値の型が取れる)
  }
}

上の例ですと、期待値はnumber型、実際に入力された値はstring型という情報が取得できます。これを元にエラーメッセージを組み立てる事ができます。

v4の場合

v4からは、issue.inputから入力値を取得します。
ただし、parse時に{ reportInput: true }を渡す必要があります。

zod v4
import { z } from "zod/v4";

const Schema = z.object({
  foo: z.number(),
  bar: z.number(),
});

const { success, data, error } = Schema.safeParse(
  { foo: 1, bar: "hoge" },
  { reportInput: true }, // ここでreportInput: trueを渡さないといけない!
);

if (!success) {
  for (const issue of error.issues) {
    console.log("code:", issue.code); //=> invalid_type
    console.log("path:", issue.path); //=> [ 'bar' ]
    console.log("期待値:", issue.expected); // => "number"
    console.log("入力値:", issue.input); // => "hoge" (入力した値が取れる)
  }
}

zod v4では、このようにreportInputオプションを指定することでissue.inputから実際に入力された値を取得する事ができます。

エラーメッセージをカスタマイズする際は、これらのデータを元に文字列を組み立てます。

エラーメッセージの組み立て
const message = `${issue.expected}型じゃなくて……${issue.input}が来た……ってコト!?`;

image.png

以上、zod v4でエラーメッセージをカスタマイズする時の入力値の取り方について解説しました。

2
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?