The Czechs had enjoyed the better of the Group E clash but with both teams having been reduced to 10 men it was Wales who struck in the 81st minute as James met Gareth Bale's cross.
But Roberts was later dismissed for catching Tomas Soucek with his arm in the 77th minute.
The slick Czechs threatened on numerous occasions in the first half with Jakub Jankto going close and even after they lost Schick they were the better side.
But after an opening loss to Belgium, Wales were delighted to get their campaign up and running.
They are in third place with three points from two games, with the Czechs on four from three games and Belgium leading on seven points after thrashing Belarus.
That it was Manchester United winger James, one of the smallest players on the pitch, leaping high into the air to power Bale's cross beyond Tomas Vaclik was surprising as it was the first headed goal of his career.
"Massive result for us, especially after losing the first game," James said. "We needed to pick our heads up. In the last month I've had a couple of headers at club level and been disappointed, but thankfully this one went in."
Jankto was the best player on the pitch in the first half and he curled an effort just wide before sending a shot into the side-netting.
Wales were unimaginative but had the best chance before the interval when Neco Williams' cross was perfect for Bale but his volleyed effort was down into the ground and Vaclik saved.
The Czechs will wonder how they took nothing from the game, especially after home defender Joe Rodon produced an amazing stoppage-time clearance to prevent an equaliser.
"We showed a lot of heart and desire to match a very physical team," Bale said. "It was very chaotic, especially second half, but we were ready and kept going until the end and most important thing is to get that winner."