The 31-year-old clocked 1:53.36 to beat Japan's Masato Sakai by just four hundredths of second at the Olympic Aquatics Stadium, Xinhua news agency reported.
Hungary's Tamas Kenderesi took bronze, 0.26 seconds further back.
South Africa's Chad le Clos, who beat Phelps for the gold medal in this event at the London 2012 Games, finished fourth.
It was Phelps' second gold medal of the Rio Games after his triumph with US 4x100m freestyle relay team on Sunday.
Phelps has reduced his competition schedule in Rio as he focuses on butterfly and relay events.
He is aiming to become only the third athlete to win gold in the same event at four consecutive Olympics, joining Al Oerter (discuss) and Carl Lewis (long jump).
Phelps could perform the feat in both the 100m butterfly and 200m individual medley.
At the end of Tuesday night's swimming session, the USA led the Rio 2016 gold medal tally with nine, one ahead of China.
Phelps has now netted three gold medals at these Games -- winning each of the events he has entered. Overall, he has racked up 25 Olympic medals, 21 of them gold.
In the relay final, Phelps joined Conor Dwyer, Ryan Lochte and Townley Haas to hit the wall in seven minutes 0.66 seconds.
Britain's Stephen Milne, Duncan Scott, Dan Wallace and James Guy took silver, 2.47sec behind the USA, and Japan's Kosuke Hagino, Naito Ehara, Yuki Kobori and Takeshi Matsuda pocketed bronze, 2.84sec further back.
Phelps swum the final leg of the race to loud cheers from the packed arena.
This website uses cookies.