きっと眠かったのでこんなコード書いたんだと思う。あと若干のdecorator使いたさもあったかも