The 25-year-old, whose existing deal was due to expire at the end of next season, took 43 wickets in County Championship Division Two in 2016.
The former England Under-19 player is a product of Gloucestershire's academy.
"He performed with great consistency, scored vital runs down the order and has been an integral part of the team," head coach Richard Dawson said.
Gloucestershire seamer David Payne has extended his contract with the county until 2019.