Refactoring

まだ作業中だけど大きな変更なので公開しておく。
作業後に要約を書く。