Fix many bug

差分が多いように見えますがコミットを細かく分けてあるので詳細はコミットを御覧ください。