手元で実装してみたけど見やすいかと言われると微妙な感じ