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
PRO
October 30, 2024
Technology
950
3
Share
Prisma Typed SQLのススメ
2024/10/30 (水) Mita.ts #2
Prisma の Typed SQL の紹介です。
Tech Leverages
PRO
October 30, 2024
More Decks by Tech Leverages
See All by Tech Leverages
Engineering ManagerがAI時代に この先生きのこるには?
leveragestech
PRO
1
37
最新技術を"今は選ばない"という技術選定
leveragestech
PRO
0
420
Tableauを活かすためにTableauに制約を設けた話
leveragestech
PRO
0
57
営業支援システムと歩んだ7年半の変遷
leveragestech
PRO
0
110
DMBOKを使ってレバレジーズのデータマネジメントを評価した
leveragestech
PRO
0
750
Google ADKのSub Agentを Agentic Workflowに移行し、 遷移成功率を改善した話
leveragestech
PRO
0
9
ハッカソンから社内プロダクトへ AIエージェント ko☆shi 開発で学んだ4つの重要要素
leveragestech
PRO
0
3.5k
2025年のデザインシステムとAI 活用を振り返る
leveragestech
PRO
0
4.1k
ディメンショナルモデリングを採用してない組織がモデリング本を通じて得られたこと
leveragestech
PRO
0
3.6k
Other Decks in Technology
See All in Technology
Harnessing the Power of Mocks and Stubs in PHPUnit / #laravellivejp
asumikam
0
590
EdgeプロファイルでAWSアカウントを安全に使い分ける
jhashimoto
0
110
さきさん文庫の書籍ができるまで
sakiengineer
0
160
Agentic Design Patterns
glaforge
0
200
Claude Code x Accounting
kawaguti
PRO
1
320
その英語学習、AWSで代替できませんか?
suzutatsu
1
260
DI コンテナ自動生成ツールを実装してみた / intro-autodi
uhzz
0
870
Geek Woman の育ち方 〜コミュニティとAIと〜
chicaco
0
420
「使われるデータ基盤」を目指してデータアナリストとワークショップをやった話
jackojacko_
2
870
AI活用の格差をなくす:チーム全体のAI開発生産性を底上げする方法
moongift
PRO
1
100
コーディングエージェントはTypeScriptの 型エラーをどう自己修正しているのか
melonps
4
490
AIコーディングエージェントの活用で、コードは静かに肥大化した
yosukeshinoda
1
370
Featured
See All Featured
Sam Torres - BigQuery for SEOs
techseoconnect
PRO
0
270
Build The Right Thing And Hit Your Dates
maggiecrowley
39
3.1k
Design of three-dimensional binary manipulators for pick-and-place task avoiding obstacles (IECON2024)
konakalab
0
430
The Cost Of JavaScript in 2023
addyosmani
55
9.9k
How To Stay Up To Date on Web Technology
chriscoyier
790
250k
Ethics towards AI in product and experience design
skipperchong
2
280
Visual Storytelling: How to be a Superhuman Communicator
reverentgeek
2
540
What’s in a name? Adding method to the madness
productmarketing
PRO
24
4k
Leading Effective Engineering Teams in the AI Era
addyosmani
9
2k
The Illustrated Children's Guide to Kubernetes
chrisshort
51
52k
Data-driven link building: lessons from a $708K investment (BrightonSEO talk)
szymonslowik
1
1.1k
Agile Actions for Facilitating Distributed Teams - ADO2019
mkilby
0
190
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