DenoでXstateを使いたいけどTS用エコシステムが噛み合わなすぎる

XStateとは
まずXStateというライブラリが国内で認知度低そう(偏見)なので紹介
"状態"をいい感じに管理してくれる
よくある状態管理ライブラリと呼ばれるやつがあるが、あれらは個人的に状態保持ライブラリと言えると思っている
大抵の場合、一つのオブジェクトを軸としてそれを操作するメソッドを作り込んだりしてオブジェクトを色んな場所で共有するというイメージが強い
それに対してXState
は状態を保持するというよりは管理するイメージのほうが強い
状態、つまりライフサイクルを軸にして「今どんな状態か」「今何ができるか」を一度決めてしまえばいい感じにしてくれるのだ
kwsk

Typegenと相性が絶望的
Xstateは基本的にクライアント側で使いやすい感じになっているがバックエンドでも使いたい場合があり、最近は個人的にバックエンドはdenoを使いたいのでこの組み合わせを採用した(Supabase FunctionsとかがDenoだし)
Xstateのマシンをいい感じに型安全にするエコシステムとしてCLIやVSCodeプラグインでTypegen
という機能が提供されている
動作としては以下の通り
- machineのコンフィグ内で
TsTypes: {}
がある場合に動く -
hoge.typegen.ts
という型定義ファイルが生成される -
1
で見つけた箇所をTsTypes: {} as import('./hoge.typegen').Typegen0
と変更する
はいここ!
import('./hoge.typegen')
.ts
がない!
これではDenoでは動かない
厄介なのが基本的に上記の動きしかしないので
- TsTypesにas以降があれば変更しない
とかの分岐は一切されていない
つまり実行するたびに手で修正しなくてはいけない
手で修正するだけならまだいい・・・
VSCodeのプラグインではこれ以外にマシーンの可視化をしてくれたりおかしいところにエラーを出してくれたりするのでぜひ使いたいが、Typegen機能の実行条件が「ファイル保存時」なのだ
つまりプラグインが有効化されている場合手で修正したところで保存したら元に戻される
ブッダシット!なんたることか!
これでは使い物にならないではないか!
というわけでDenoでXstateを使う場合は現状ちょっと使いづらいという話でした
普通にNodeで使う場合とかテストコードに使うのは非常に便利なライブラリなのでそのうち記事は書きたい