生SQLに型を手書きする時代は終わり?Prismaの新機能「TypedSQL」
ARANK
生SQLを扱う $queryRawTypeScript向けのORMライブラリとしてPrismaがあります。Prismaは直感的で型安全なAPIを提供し、TypeScript向けのORMとしては第一に名前が上がることが多いライブラリです。しかしそんな人気なPrismaでも、裏側では少しクセのあるSQLが発行されていたり、欲しいSQLがPrismaのAPIでは実現できない場合があります。そういった場合のために $queryRaw というメソッドが用意されており、これを使うことで生SQLを書いてその結果を受け取ることができました。他のORMにもよくある機能です。例えば以下のように実装することができます。const users = await prisma.$queryRaw` SELECT id, name FROM "Users" WHERE id = ${userID} `; console.log(users) しかしTypeScriptでこれを扱う上ではある課題があります。そう、 型 です。$queryRaw の結果が入るこの users の型は残念ながら unknown となってしまいます。そこで $queryRaw では以下のようにGenericsを用いて返ってくるレコードの型を指定する必要があります。const users = await prisma.$queryRaw<{ id: number; name: string }[]>` SELECT id, name FROM "Users" WHERE id = ${userID} `; こ…