Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Features
Speaker Deck
PRO
Sign in
Sign up for free
Search
Search
Prisma Typed SQLのススメ
Search
Tech Leverages
October 30, 2024
Technology
1
140
Prisma Typed SQLのススメ
2024/10/30 (水) Mita.ts #2
Prisma の Typed SQL の紹介です。
Tech Leverages
October 30, 2024
Tweet
Share
More Decks by Tech Leverages
See All by Tech Leverages
データエンジニアとしてのキャリア戦略 〜これからの挑戦〜
leveragestech
0
51
ドメインロジックで考えるテスタビリティ
leveragestech
1
280
専門領域に特化したチームの挑戦
leveragestech
0
380
もう一度、 事業を支えるシステムに。
leveragestech
6
3.4k
ログに対する誤解とベストプラクティス
leveragestech
0
74
We Are PdE!! 〜高価値なプロダクトを作れるようになるための勉強会〜
leveragestech
1
600
今日から始める技術的負債の解消
leveragestech
3
550
ドキュメントとの付き合い方を考える
leveragestech
2
220
開発者体験を向上させる ボトムアップな組織改善
leveragestech
1
280
Other Decks in Technology
See All in Technology
PostgreSQL Conference Japan 2024 A4 Comparison of column-oriented access methods
nori_shinoda
0
160
PR TIMESにおけるNext.jsとcacheの付き合い方
apple_yagi
2
320
イベントをどう管理するか
mikanichinose
1
120
AWS re:Invent 2024登壇資料(GBL206-JA: Unleashing the power of generative AI on AWS for your business)
minorun365
PRO
7
260
2024/12/05 AITuber本著者によるAIキャラクター入門 - AITuberの基礎からソフトウェア設計、失敗談まで
sr2mg4
2
590
MLOps の現場から
asei
3
280
開発者向けツールを魔改造してセキュリティ診断ツールを作っている話 - 第1回 セキュリティ若手の会 LT
pizzacat83
0
410
大規模サーバ移行を成功に導くための事前調査フェーズの工夫事例
fukuchiiinu
2
120
Connect × Server-Side Kotlinで実現する!スキーマ駆動開発と品質改善の実践
sansantech
PRO
1
170
ガバメントクラウドのセキュリティ対策事例について
fujisawaryohei
0
180
KubeCon NA 2024 Recap: Managing and Distributing AI Models Using OCI Standards and Harbor / Kubernetes Meetup Tokyo #68
pfn
PRO
0
130
Oracle Base Database Service:サービス概要のご紹介
oracle4engineer
PRO
0
15k
Featured
See All Featured
Making Projects Easy
brettharned
116
5.9k
Build your cross-platform service in a week with App Engine
jlugia
229
18k
Building a Modern Day E-commerce SEO Strategy
aleyda
38
7k
Art, The Web, and Tiny UX
lynnandtonic
298
20k
The Web Performance Landscape in 2024 [PerfNow 2024]
tammyeverts
2
260
Optimising Largest Contentful Paint
csswizardry
33
3k
Measuring & Analyzing Core Web Vitals
bluesmoon
4
160
The Language of Interfaces
destraynor
154
24k
The Myth of the Modular Monolith - Day 2 Keynote - Rails World 2024
eileencodes
17
2.2k
Cheating the UX When There Is Nothing More to Optimize - PixelPioneers
stephaniewalter
280
13k
Design and Strategy: How to Deal with People Who Don’t "Get" Design
morganepeng
126
18k
Helping Users Find Their Own Way: Creating Modern Search Experiences
danielanewman
29
2.3k
Transcript
Prisma Typed SQL のススメ レバテック開発部 塚原 渉
| © 2024 Levtech Co., Ltd. 2 レバテック開発部 ITSプロダクト開発グループ / 契約請求ドメインチーム
塚原 渉 WATARU TSUKAHARA 2022年8月にレバテックに参画し、ITフリーランス向けのプロダクト開発に従事。 現在はPHPからTypeScriptへのシステムリプレースに取り組んでいます! リプレースにあたり、Prismaを導入しています! 趣味はスマブラ
| © 2024 Levtech Co., Ltd. 3 • はじめに • Prismaで生SQLを使いたいケース
• $queryRawの問題点 • Typed SQLで解決 • まとめ アジェンダ
| © 2024 Levtech Co., Ltd. 4 • はじめに • Prismaで生SQLを使いたいケース
• $queryRawの問題点 • Typed SQLで解決 • まとめ アジェンダ
| © 2024 Levtech Co., Ltd. 5 Prismaで生SQLを使う場合は、型安全な Typed SQLを活用しよう!! 今日伝えたいこと
| © 2024 Levtech Co., Ltd. 6 • はじめに • Prismaで生SQLを使いたいケース
• $queryRawの問題点 • Typed SQLで解決 • まとめ アジェンダ
| © 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を利用しました。
| © 2024 Levtech Co., Ltd. 8 $queryRawを使う Prismaでの生SQLの使い方 Prismaで生SQLを使いたいケース 公式ドキュメントより引用
| © 2024 Levtech Co., Ltd. 9 アジェンダ • はじめに •
Prismaで生SQLを使いたいケース • $queryRawの問題点 • Typed SQLで解決 • まとめ
| © 2024 Levtech Co., Ltd. 10 ただし、$queryRawには問題点がある $queryRawの問題点 クエリの返却値の型はunknownになっ てしまう
| © 2024 Levtech Co., Ltd. 11 ただし、$queryRawには問題点がある $queryRawの問題点 $queryRawの型引数にあらかじめ定義 した返却値の型を設定できる
ただし、型引数に指定する型と実際の 返却値の整合性は開発者自身が担保す る必要がある schema.prisma から自動生成した Task 型を利用
| © 2024 Levtech Co., Ltd. 12 • はじめに • Prismaで生SQLを使いたいケース
• $queryRawの問題点 • Typed SQLで解決 • まとめ アジェンダ
| © 2024 Levtech Co., Ltd. 13 Prisma5.19からPreview Featureとして追加された新機能 型安全に生SQLが扱える Typed
SQLって何? Typed SQLで解決 公式サイトより引用
| © 2024 Levtech Co., Ltd. 14 1.SQLファイルからTSの関数を生成して利用するため型安全になる Typed SQLを使うと何が良い? Typed
SQLで解決 $ prisma generate –sql コマンドを実行
| © 2024 Levtech Co., Ltd. 15 1.SQLファイルからTSの関数を生成して利用するため型安全になる Typed SQLを使うと何が良い? Typed
SQLで解決 $ prisma generate –sql コマンドを実行 クエリの返却値にSQLから自動生成された型が使われる!
| © 2024 Levtech Co., Ltd. 16 2.TS関数生成時のSQLの誤りがあるとエラーを出してくれる Typed SQLを使うと何が良い? Typed
SQLで解決 watchオプションでSQLファイルの修正を監視 SQLの構文ミスだけでなく、schema.prismaとの整合性もチェックしてくれる
| © 2024 Levtech Co., Ltd. 17 • はじめに • Prismaで生SQLを使いたいケース
• $queryRawの問題点 • Typed SQLで解決 • まとめ アジェンダ
| © 2024 Levtech Co., Ltd. 18 Prismaで生SQLを扱いたくなったら、 Typed SQLを活用しよう!! 1.
SQLファイルからTSの関数を生成して利用するため 型安全になる 2. TS関数生成時のSQLの誤りがあるとエラーを 出してくれる
宣伝
開発職向け会社紹介資料 プロダクトや開発組織についてご紹介しています。 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