Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Sign up for free
Menu
Search
Features
All features
Private URLs
Password Protection
Custom URLS
Scheduled publishing
Remove Branding
Restrict embedding
Deck Collections
Notes
Features
All features
Private URLs
Password Protection
Custom URLS
Scheduled publishing
Remove Branding
Restrict embedding
Deck Collections
Notes
Explore
Featured decks
Featured speakers
Programming
Technology
Storyboards
Explore
Featured decks
Featured speakers
Programming
Technology
Storyboards
Pricing
Search
Sign in
Sign up for free
Short Introduction for Kysely
Search
YUMOTO Michitaka
November 20, 2024
Technology
510
1
Share
Embed
Copy iframe code
Copy JS code
Copy link
Start on current slide
Short Introduction for Kysely
Remix Tokyo × Cloudflare Meetup Lighting Talks
https://lu.ma/wv9xzam7
YUMOTO Michitaka
November 20, 2024
More Decks by YUMOTO Michitaka
See All by YUMOTO Michitaka
Dive Into Single Fetch
gothedistance
1
300
クラフトマンシップ(職人魂)を湾岸MIDNIGHTから学ぼう / Learn Craftsmanship from Wangan Midnight
gothedistance
0
370
プロ野球をデータモデリングしてみたら沼だった件 / Baseball ERD Modeling to be obsessed
gothedistance
2
930
フロントエンド開発スタイルの変遷と、私がFlutterにハマったわけ
gothedistance
8
15k
ITプロジェクトのはじめ方 / How to work around software project
gothedistance
28
150k
私がITプランナーを志すようになった理由、そして、目指していること / bpstudy142_why_i_wanna_be_a_it_plannner
gothedistance
1
980
ITプランナーの必要性を小一時間問い詰めたい / Why We need IT-Planner.
gothedistance
0
14k
IT企画をちゃんとやりたい#01 ガイダンス資料 / IT Planning do well_01
gothedistance
0
6.5k
bpstudy_127
gothedistance
0
610
Other Decks in Technology
See All in Technology
研究開発部の紹介 / Sansan R&D Profile
sansan33
PRO
4
25k
AIに丸投げしないトイル削減 / Eliminating Toil Without Leaving It All to AI
kohbis
4
1.1k
2026_devsumi_ozono.pdf
o3
2
370
全員がプロダクトへ向き合う組織を持続成長させるために——組織づくりのフライホイールと4象限 / The Flywheel Model and Four Quadrants for Organizational Design
hiro_torii
4
970
SQL文一行も書けない人事がCortexもろもろを使って人事業務を楽にしてみる
ponponmikankan
1
220
TinyGo 開発サイクルを高速化する:Go で作るエミュレータ入門
zozotech
PRO
1
610
作り直せるコードは迅速に 作り直せないDBは慎重に - AI時代のプロダクトエンジニアが「判断の不可逆性」で開発速度を変える話
kinosuke01
0
310
Snowflakeで実現する全社横断の顧客の声(VOC)分析・活用基盤@Snowflake World Tour Tokyo 2026
yuto16
0
170
20260906 「AWS運用入門」著者が教える、運用業務への生成AI活用入門
masaruogura
0
260
例外の正しい扱い方 そのエラー try-catchして大丈夫?
jinwatanabe
3
460
あるけみー式LTスライド作成術
alchemy1115
1
170
山手線を徒歩で一周してわかった、 位置情報アプリは「足」が最強のデバッガー
hinakko
0
100
Featured
See All Featured
SEO for Brand Visibility & Recognition
aleyda
0
4.7k
Lessons Learnt from Crawling 1000+ Websites
charlesmeaden
PRO
1
1.6k
Heart Work Chapter 1 - Part 1
lfama
PRO
9
36k
Building AI with AI
inesmontani
PRO
1
1.2k
16th Malabo Montpellier Forum Presentation
akademiya2063
PRO
0
370
Digital Projects Gone Horribly Wrong (And the UX Pros Who Still Save the Day) - Dean Schuster
uxyall
1
2.8k
エンジニアに許された特別な時間の終わり
watany
108
250k
Building an army of robots
kneath
306
46k
End of SEO as We Know It (SMX Advanced Version)
ipullrank
3
4.4k
AI Search: Implications for SEO and How to Move Forward - #ShenzhenSEOConference
aleyda
1
1.4k
個人開発の失敗を避けるイケてる考え方 / tips for indie hackers
panda_program
123
22k
Learning to Love Humans: Emotional Interface Design
aarron
275
41k
Transcript
Kysely ポータブルなTypeScript のクエリビルダ Remix Meetup #2 2024.09.17 @gothedistance Quality Start,inc
Agenda TypeScript とORM Kysely とは Kysely のPros/Cons Quality Start,inc 2
自己紹介 YUMOTO Michitaka 1979 年生まれ、松坂世代 https://x.com/gothedistance Flutter/Remix/Python を主に使っています。 野球が好きで、東京ヤクルトスワローズのファン Quality
Start,inc 3
ORM に疲れた時期が個人的にあった Remix に出会うまではPython を使うことが多く、SQLAlchemy を使った。 SQLAlchemy は重厚長大なORM で、モデル定義もガッツリ、DB とのやり取
りも独自のモデル設計。情報量がとにかく多い。 Remix を書き始めて、自分は 「コンパイルできるSQL 」 が欲しかっただけ なのでは・・・と天啓があった。 ORM のコードの書き方への習熟があっても最後は発行しているSQL のレビ ューになるし、ORM ではなくクエリビルダを使ってみようかな! というわけで、Kysely を使ってみた。 kysely-d1 を使えばCloudFlare D1 が 使える! Quality Start,inc 4
Kysely こんな感じでSQL を組み立ててくれるライブラリ。 selectFrom, innerJoin, where, select などを発行する時に、型推論が効いて いるので自動的にカラムやテーブル名の補完が走ります。 const
result = await db .selectFrom('person') .innerJoin('pet', 'pet.owner_id', 'person.id') .select(['person.id', 'pet.name as pet_name']) .execute() Quality Start,inc 5
Kysely のスキーマ定義(TypeScript の型定義) Prisma のような独自DSL ではなく、TS の型定義でDB スキーマを表現。 ORM で必ずあるリレーション定義がありません!
クエリビルダなんで! 文字数のようなカラムの付帯情報もありません! クエリビルダな(ry export type Pet = { id: Generated<number>; owner_id: Generated<int>; name: Generated<string>; created: Timestamp | null; modified: Timestamp | null; }; Quality Start,inc 6
Kysely の嬉しみ SQL の表現力を最大限にかせる!これが一番! Prisma のようなORM は、リレーション/ スキーマ定義をテコにデータの CRUD を単純化するために、SQL
の表現力を殺している。 Prisma はDB 関数,CTE,EXISTS,CASE, サブクエリなどが使えず、 queryRaw や TypedSQL で対応できるが、SQL の表現力を活かす方法に振り切ってる Kysely には勝てない。 Prisma の場合は1つの関数実行でN 個のクエリが吐かれる事が多く、個人 的に違和感がある。 ORM の設定や仕様に追従/ 習熟して得られるメリットが薄いなら、クエリ ビルダもアリよりのアリです。 Quality Start,inc 7
Kysely に求めてはあかんもの ネストされたデータの戻り値。 order:{detail: [ {item:}]} みたいな。 Kysely は一次元配列しか返しません。 SQL
の発行によってネストしたオブ ジェクトは得られないと同じ。JOIN 先のカラム名が同じ場合は上書きされ る。カラムの選択が必須になると思っていい。 マイグレーションは正直Prisma のほうが楽。モデル定義を持っているから ね。 スキーマのモデルに拡張メソッドを生やすとか、クエリ発行前にHook する イベント仕込むとか、そういうのも持ってないです。ActiveRecord 風なコ ードを書くのは難しい。 ORM との距離のとり方について誰か僕と話そう!! Quality Start,inc 8