この辺りは要リファクタ（設計を見直すレベルで）ですね...