状態遷移をCommand化して、実行とイベントはランタイムに任せる
from
関数型プログラミングと型システムのメンタルモデル
ユーザーのインタラクションをCommandで抽象するとテストしやすい