はじめに Zodは、TypeScript用のスキーマ定義とバリデーションのためのライブラリです。 tRPCの入出力のバリデーションでもよく使用されています。 今回、tRPCを使用する際にドメインモデルの作成にZodのスキーマを利用します。 また、レイヤードアーキテクチャ等のPresentation層 ↔︎ UseCase層 ↔︎ Domain層 の各レイヤーでスキーマを派生させていくことで、入出力モデルをより低コストに定義する方法について記載します。 実装について 今回話を進めていくにあたって、一般的なWebサービスにあるUserのような概念を用いていきます。 まず、全体像としてはこちらの図のようになっています。 Domain層に定義されているEntityのスキーマから派生して、UseCaseの入出力になり、さらにそれらがPresentationでさらに加工されAPIなどの入出力になります