max() の代わりに refine() を使用して 動的なメッセージを表示します。
.max(15, { message: "ユーザー名は最大15文字です。" })
↓
.refine(
(arg: string) => arg.length <= 15,
(arg: string) => ({
message: `ユーザー名は最大15文字です。現在 ${arg.length} 文字使用しています。`,
}),
),