Slide 1

Slide 1 text

Prisma Typed SQL のススメ レバテック開発部 塚原 渉

Slide 2

Slide 2 text

| © 2024 Levtech Co., Ltd. 2 レバテック開発部 ITSプロダクト開発グループ / 契約請求ドメインチーム 塚原 渉 WATARU TSUKAHARA 2022年8月にレバテックに参画し、ITフリーランス向けのプロダクト開発に従事。 現在はPHPからTypeScriptへのシステムリプレースに取り組んでいます! リプレースにあたり、Prismaを導入しています! 趣味はスマブラ

Slide 3

Slide 3 text

| © 2024 Levtech Co., Ltd. 3 ● はじめに ● Prismaで生SQLを使いたいケース ● $queryRawの問題点 ● Typed SQLで解決 ● まとめ アジェンダ

Slide 4

Slide 4 text

| © 2024 Levtech Co., Ltd. 4 ● はじめに ● Prismaで生SQLを使いたいケース ● $queryRawの問題点 ● Typed SQLで解決 ● まとめ アジェンダ

Slide 5

Slide 5 text

| © 2024 Levtech Co., Ltd. 5 Prismaで生SQLを使う場合は、型安全な Typed SQLを活用しよう!! 今日伝えたいこと

Slide 6

Slide 6 text

| © 2024 Levtech Co., Ltd. 6 ● はじめに ● Prismaで生SQLを使いたいケース ● $queryRawの問題点 ● Typed SQLで解決 ● まとめ アジェンダ

Slide 7

Slide 7 text

| © 2024 Levtech Co., Ltd. 7 2024年10月現在だと、例えば以下のようなケース Prismaで生SQLを使いたいケースがいくつかある Prismaで生SQLを使いたいケース ケース 説明 パフォーマンスチューニング したい PrismaのAPIで発行されるSQLは、パフォーマンスが良くないケースがあるた め、生SQLを書いてパフォーマンスチューニングしたい。 Prisma APIが対応していない SQLを書きたい WHERE条件に配列を渡すSQLやUnionを使うSQLはPrisma APIが対応していない ため、生SQLを書く必要がある。 外部キー制約がないテーブルに対 してJOINしたい 外部キー制約がないテーブルをJOINしてデータを取得したい場合は、Prisma APIでは対応できないため、生SQLを書く必要がある。 ※自チームではこのケースで生SQLを利用しました。

Slide 8

Slide 8 text

| © 2024 Levtech Co., Ltd. 8 $queryRawを使う Prismaでの生SQLの使い方 Prismaで生SQLを使いたいケース 公式ドキュメントより引用

Slide 9

Slide 9 text

| © 2024 Levtech Co., Ltd. 9 アジェンダ ● はじめに ● Prismaで生SQLを使いたいケース ● $queryRawの問題点 ● Typed SQLで解決 ● まとめ

Slide 10

Slide 10 text

| © 2024 Levtech Co., Ltd. 10 ただし、$queryRawには問題点がある $queryRawの問題点 クエリの返却値の型はunknownになっ てしまう

Slide 11

Slide 11 text

| © 2024 Levtech Co., Ltd. 11 ただし、$queryRawには問題点がある $queryRawの問題点 $queryRawの型引数にあらかじめ定義 した返却値の型を設定できる ただし、型引数に指定する型と実際の 返却値の整合性は開発者自身が担保す る必要がある schema.prisma から自動生成した Task 型を利用

Slide 12

Slide 12 text

| © 2024 Levtech Co., Ltd. 12 ● はじめに ● Prismaで生SQLを使いたいケース ● $queryRawの問題点 ● Typed SQLで解決 ● まとめ アジェンダ

Slide 13

Slide 13 text

| © 2024 Levtech Co., Ltd. 13 Prisma5.19からPreview Featureとして追加された新機能 型安全に生SQLが扱える Typed SQLって何? Typed SQLで解決 公式サイトより引用

Slide 14

Slide 14 text

| © 2024 Levtech Co., Ltd. 14 1.SQLファイルからTSの関数を生成して利用するため型安全になる Typed SQLを使うと何が良い? Typed SQLで解決 $ prisma generate –sql コマンドを実行

Slide 15

Slide 15 text

| © 2024 Levtech Co., Ltd. 15 1.SQLファイルからTSの関数を生成して利用するため型安全になる Typed SQLを使うと何が良い? Typed SQLで解決 $ prisma generate –sql コマンドを実行 クエリの返却値にSQLから自動生成された型が使われる!

Slide 16

Slide 16 text

| © 2024 Levtech Co., Ltd. 16 2.TS関数生成時のSQLの誤りがあるとエラーを出してくれる Typed SQLを使うと何が良い? Typed SQLで解決 watchオプションでSQLファイルの修正を監視 SQLの構文ミスだけでなく、schema.prismaとの整合性もチェックしてくれる

Slide 17

Slide 17 text

| © 2024 Levtech Co., Ltd. 17 ● はじめに ● Prismaで生SQLを使いたいケース ● $queryRawの問題点 ● Typed SQLで解決 ● まとめ アジェンダ

Slide 18

Slide 18 text

| © 2024 Levtech Co., Ltd. 18 Prismaで生SQLを扱いたくなったら、 Typed SQLを活用しよう!! 1. SQLファイルからTSの関数を生成して利用するため 型安全になる 2. TS関数生成時のSQLの誤りがあるとエラーを 出してくれる

Slide 19

Slide 19 text

宣伝

Slide 20

Slide 20 text

開発職向け会社紹介資料 プロダクトや開発組織についてご紹介しています。 https://speakerdeck.com/leverages/levtech-hui-she-shao-jie-zi-liao-enzi niazhi-xiang-ke レバテック開発部テックブログ 日々の開発におけるリアルをお届けしています! https://zenn.dev/p/levtech カジュアル面談フォーム 気軽にご応募ください!いろんなお話しましょう! https://hrmos.co/pages/leverages/jobs/A_c_00071