複雑で分かりにくいのは分かるけど https://cakoi.net/other/7233/