Onomatopoeic —
哈哈 imitates the sound of laughter (just like English 'ha ha'), and
大笑 means 'big laugh'. Stack them and you get a vivid 'ha-ha big-laugh = roar with laughter'. The phrase is descriptive, not idiomatic, so it works in both speech and writing.