マイケルのコードをリファクタリングしてみました

リファクタリングしようと思った詳しい動機は、各コミットのコメントに書いています。