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
Short Introduction for Kysely
Search
Sponsored
·
Ship Features Fearlessly
Turn features on and off without deploys. Used by thousands of Ruby developers.
→
YUMOTO Michitaka
November 20, 2024
Technology
500
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
290
クラフトマンシップ(職人魂)を湾岸MIDNIGHTから学ぼう / Learn Craftsmanship from Wangan Midnight
gothedistance
0
360
プロ野球をデータモデリングしてみたら沼だった件 / Baseball ERD Modeling to be obsessed
gothedistance
2
920
フロントエンド開発スタイルの変遷と、私が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
970
ITプランナーの必要性を小一時間問い詰めたい / Why We need IT-Planner.
gothedistance
0
14k
IT企画をちゃんとやりたい#01 ガイダンス資料 / IT Planning do well_01
gothedistance
0
6.5k
bpstudy_127
gothedistance
0
600
Other Decks in Technology
See All in Technology
OpenID for Verifiable Credentials 実装から見えた相互運用性確保までの道のり(OAuth/OIDC Numa (Immersion) Workshop 2026)
oidfj
PRO
0
360
最新技術に積極チャレンジ!EKS共通基盤のこれまでとこれから
daitak
0
250
dbt と Snowflake と tag
kevinrobot34
2
290
Introduction to Bill One Development Engineer
sansan33
PRO
0
480
hookで自作する Claude Code の「実況ボード」
shinyasaita
2
230
アクセスキーが漏れた日にやるべきこと- 無効化の先にある本当の対応
kazzpapa3
0
360
Claude Codeで開発以外の業務も爆速化しよう!
minorun365
PRO
11
9k
1.5時間を無駄にして学んだwsl2におけるaptとsnapの選択と仕組み
yosaka0123
0
470
Microsoft MVP プログラムを紹介するから目指す人増えてくれ
tsubakimoto_s
0
140
『自分で判断できるか』を基準に、プロダクトのハンズオン研修でAI利用の線を引いてみた / Where We Drew the Line on AI in Hands-on Training
honyanya
1
440
AI駆動開発をチームに根付かせる - 「1行も書かない」チームがHarnessを育てた1年 -
kenichirokimura
6
3.3k
現場の暗黙知を継承するAIエージェント — 対話から生まれる長期記憶と Skills
atsukish
0
130
Featured
See All Featured
[RailsConf 2023 Opening Keynote] The Magic of Rails
eileencodes
31
10k
Measuring & Analyzing Core Web Vitals
bluesmoon
9
970
Evolving SEO for Evolving Search Engines
ryanjones
0
270
How To Stay Up To Date on Web Technology
chriscoyier
790
250k
Lessons Learnt from Crawling 1000+ Websites
charlesmeaden
PRO
1
1.5k
Become a Pro
speakerdeck
PRO
31
6.2k
技術選定の審美眼(2025年版) / Understanding the Spiral of Technologies 2025 edition
twada
PRO
120
120k
How to Build an AI Search Optimization Roadmap - Criteria and Steps to Take #SEOIRL
aleyda
1
2.2k
brightonSEO & MeasureFest 2025 - Christian Goodrich - Winning strategies for Black Friday CRO & PPC
cargoodrich
3
790
Leo the Paperboy
mayatellez
8
2.2k
Docker and Python
trallard
47
4.2k
Building Experiences: Design Systems, User Experience, and Full Site Editing
marktimemedia
0
580
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