ここに解説が書いてあるから、真似して作ってみて
https://codezine.jp/article/detail/2653