【日報】型なしvuexつらい

 お休み… みたいなものなのですが、9月13日の日報です。

型なしvuexつらい問題

 つらいのかな?と思いつつ適当に書き進めたところ「実際つらい」という認識に至りましたのでご報告します。

リファクタリングつらい

 vuex公式の型定義を利用し、その仕組みに乗れば、ステートだけは割ときっちり型で管理できるようになります。

 当初、それだけでまあまあ回るのではと思った(そして実際なんとかなった)のですが、一旦書いたコードを直す段階になって、なかなか困る点も出てきました。全面的に困るのですが、最も困りそうなのが「commit / dispatch / gettersの型定義がないと、コンパイルもテストも失敗しない」という部分です。

 コンパイルについては単純なことで、「dispatch 最初の引数は文字列なら何でもオッケー」という型定義しかなければ dispatch("hoge") だろうが dispatch("fuga") だろうが通ってしまうわけです。そんなアクションないぞ!みたいなエラーは実行するまで起こりません。大変に困りますね。

 またテストに関していえば、モックが旧実装を隠してしまうことがあります。つまりユニットテストを書く場合、テスト対象からさらに呼び出される dispatch なり commit なり、そういったものはモックで動作を再現しているかもしれません。そうすると例えば、実際には削除されているにも関わらず、actions の中では存在しなくなった動作を呼び出す実装のままであり、おまけにテスト用モックも古いままなのでエラーにならない、みたいなことが起こってきます。ドチャクソ困りますね。

 せめてコンパイルかテストか、どちらか1つでも落ちれば人間が気づいて直せるわけですが、両方スムーズに通ってしまうと厳しい。そして可能ならコンパイルで落ちてほしい1。そういう次第なので、vuexに型定義をきっちり組み入れる方向で学習追加中です。


  1. 実行するまで分からないテストの失敗と、IDEが自動検出して赤線まで引いてくれるコンパイルエラーでは、後者の方が生産性が高い