0517
月曜だからかあまり元気がない。急に蒸し暑くなったせいもあるだろう。今年は梅雨入りがめちゃくちゃ早いらしい。まだ春の陽気を全然感じていない(例年も別にそうだが)のに梅雨入りして、明けたらもう夏だなんて、さすがに承服しかねる。
仕事はなんかDockerをガチャガチャやっていた。SPAをRailsからサーブすることについて完全に誤解したまま進めてしまっていたせいで大きく方針を変える必要が生じてしまったりした。あとGoogle Sign-Inは呼び出し元を任意のポート番号にできない(これ要するにCORSのヘッダだよね)ようなので、そこでも挫折しかけた。最終的には迂回するアイデアを思いついた、と思うけど……。いやどうかな、怪しい気もするな……。明日ちゃんと検証しなくては。
夜はRustのエラーハンドリングについて考えていた。レイヤードアーキテクチャで依存関係の逆転をしていると、リポジトリの関数が返すエラー型は誰が定義すべきなのかという疑問が生じる。Domain層がthiserrorを使ってエラー型を定義しても、Infrastructure層は実装詳細に依存した別のエラーを出していて、Intoを実装しようとするとorphan ruleに阻まれてしまう(ここではDomainとInfrastructureはクレートを分けてある)。かといっていちいちmap_errに変換関数をはさむのは格好悪い。どうしたものか…… と思っていたのだけど、結局DomainはDomainが知ってどうにかできるエラーにしか関心がなく、知っているなら定義されているのだからそのくらいは明示的なmap_errを書けばよく(敗北感はある)、そうでない漠然としたエラーは全部anyhow::Errorに丸め込めばよい(ここはmap_errではなくcontextを使うと付加情報を与えられるのでなおよい)。となれば逆にDomainが知ってどうにかできるエラーなんてそう多くはないのだし、結局はかなりの部分が実質anyhowになるのではないかと思う。型は一応定義するけど。あとPresentation層ではレスポンスのためにいろいろなエラーを使い分けることになるけど。
疲れた。明日は歯医者でマウスピースの型を取ってもらう予定。