intial commits on 21,22,24

ロジックが分かりづらい気がするので、
とりあえず pull request にしました。

module に切り出せる部分が現状無いので、
どうしたらいいか迷い中です。