Refactoring

いろいろとリファクタリングしてみました。
例によってがらっと構成が変わっているので、コミットログを一つずつ見ていった方がわかりやすいと思います。