McKinnon, 27, returned from the physically unable to perform list Tuesday and has been dealing with soreness in his surgically repaired knee. He suffered a torn ACL last September, costing him the entire 2018 season.
"It was just great to be back out there," McKinnon told reporters after his return. "I've been off rehabbing for 11 months and a couple days. It really hits you when you have something you love taken away from you."
McKinnon has been choosing to not wear a brace on his knee. It's unknown whether the soreness is related or whether he'll change his mind regarding the brace when he returns.
The 49ers signed him to a four-year, $30 million contract last offseason. They've since added Tevin Coleman and have incumbent Matt Breida, both of whom are expecting snaps in 2019.
"It's more of [determining] a pecking order," Shanahan told reporters earlier this week. "Just let it play out. I think we've got a pretty good feel for all the guys. We kind of have an idea what they can do ... we just want those guys repping. Right now, we don't really care what the play is. I don't even know who's in, Bobby just rolls them in every play. We want them to compete and hopefully it sorts itself out. If it doesn't, they're going to make me have to make a very tough decision."
McKinnon's absence makes it unlikely he'll wind up as the Week 1 starter. Coleman seems like the safer bet at this point, but the trio will almost certainly wind up in some sort of timeshare as the season progresses, with the team hoping one guy will stand out above the pack.
McKinnon played his first four seasons with the Minnesota Vikings, flashing a versatility out of the backfield that made him attractive in Shanahan's offense. With Coleman and Breida also able to catch passes, though, the most important skill in this position battle could be health.