突っ込みどころ満載だろうが、とりあえずリファクタリングした