のんびり起床し、Dota2やら掃除洗濯やら。午後はジム、買い物。
Claude Codeにテストを増やせと言われたのでwatch-duty-managerのReactコンポーネントのテストを考えていたが、結構難題。Remixは現時点では割とReactにべったりのフレームワークで、サーバーサイドが提供するデータはRemixが提供するカスタムフックを使ってReactコンポーネントで受け取ることになる。必然的にそのコンポーネントは原理主義的な「関数」コンポーネントとは言いづらい状態になる。Remixはオフィシャル?でその辺りを上手いことモックしてくれるテストライブラリを提供しているが、こういう強すぎるテストライブラリの導入は鶏を割くに焉んぞ牛刀を用いん状態になりそう&保守が厳しそう。各ページのルートコンポーネントをコンテナとして、その子たちを「関数」に近づけていくのはありかも。
クリーンアーキテクチャのHumble Objectのパターンに従えば、Reactコンポーネントを単なるテンプレートエンジンまで骨抜きにして、そこにpropsを提供するプレゼンター側を厚くテストせよということになる。そんな風にReactを使って嬉しいんだろうか?useState禁止のReact書きたい?コードベースを縦切りにするコンポーネントベースの開発と横切りにする(レイヤーに分ける)クリーンアーキテクチャの思想が相容れない部分のように見える。双方向性の強いGUI+サーバークライアント間の物理的境界という特殊な条件下で、ビューを薄くするという選択は取りづらい。
結局ある程度はカスタムフックに入れてreact-hooks-testing-libraryでテストし、漏れ出たフォーマット系の処理は純粋関数として抽出、残りのテストは諦めるという感じになるかなあ。E2EやVRTは厳しいけどスナップショットテストくらいはありかもね。tailwindはクラス名とルールの結びつきが一定なので相性もいい。
本質的にGUIアプリケーションは難しい、というところに行き着く話かもしれない。