scopeをうまく組み合わせていていいコードだと思います。