Closed2

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

創好リナ創好リナ

XStateとは

まずXStateというライブラリが国内で認知度低そう(偏見)なので紹介

"状態"をいい感じに管理してくれる

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

kwsk

創好リナ創好リナ

Typegenと相性が絶望的

Xstateは基本的にクライアント側で使いやすい感じになっているがバックエンドでも使いたい場合があり、最近は個人的にバックエンドはdenoを使いたいのでこの組み合わせを採用した(Supabase FunctionsとかがDenoだし)
Xstateのマシンをいい感じに型安全にするエコシステムとしてCLIやVSCodeプラグインでTypegenという機能が提供されている
動作としては以下の通り

  1. machineのコンフィグ内でTsTypes: {}がある場合に動く
  2. hoge.typegen.tsという型定義ファイルが生成される
  3. 1で見つけた箇所をTsTypes: {} as import('./hoge.typegen').Typegen0と変更する

はいここ!
import('./hoge.typegen')

.tsがない!
これではDenoでは動かない
厄介なのが基本的に上記の動きしかしないので

  • TsTypesにas以降があれば変更しない
    とかの分岐は一切されていない
    つまり実行するたびに手で修正しなくてはいけない

手で修正するだけならまだいい・・・
VSCodeのプラグインではこれ以外にマシーンの可視化をしてくれたりおかしいところにエラーを出してくれたりするのでぜひ使いたいが、Typegen機能の実行条件が「ファイル保存時」なのだ
つまりプラグインが有効化されている場合手で修正したところで保存したら元に戻される
ブッダシット!なんたることか!
これでは使い物にならないではないか!

というわけでDenoでXstateを使う場合は現状ちょっと使いづらいという話でした
普通にNodeで使う場合とかテストコードに使うのは非常に便利なライブラリなのでそのうち記事は書きたい

このスクラップは2023/04/03にクローズされました