全体的にオブジェクト指向で書き直した