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.
This website uses cookies.