I usually use begin, end as per your first example, but if there's a bit more code, I just look if the variable exists, no need to create another method just for that.
def some_method
return @some_method if @some_method
# lot's of code
@some_method
end