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
SQL Firstなsqlc
Search
Sponsored
·
Your Podcast. Everywhere. Effortlessly.
Share. Educate. Inspire. Entertain. You do you. We'll handle the rest.
→
yushin
October 14, 2025
0
46
SQL Firstなsqlc
Go Night Talks – After Conference 2025/10/14 で発表した資料です。
yushin
October 14, 2025
Tweet
Share
More Decks by yushin
See All by yushin
gopls で知る言語サーバー
yushin
0
340
Featured
See All Featured
Mozcon NYC 2025: Stop Losing SEO Traffic
samtorres
0
190
Intergalactic Javascript Robots from Outer Space
tanoku
273
27k
Optimising Largest Contentful Paint
csswizardry
37
3.6k
The AI Revolution Will Not Be Monopolized: How open-source beats economies of scale, even for LLMs
inesmontani
PRO
3
3.2k
The browser strikes back
jonoalderson
0
860
The Straight Up "How To Draw Better" Workshop
denniskardys
239
140k
The State of eCommerce SEO: How to Win in Today's Products SERPs - #SEOweek
aleyda
2
10k
The MySQL Ecosystem @ GitHub 2015
samlambert
251
13k
How to Talk to Developers About Accessibility
jct
2
160
The Organizational Zoo: Understanding Human Behavior Agility Through Metaphoric Constructive Conversations (based on the works of Arthur Shelley, Ph.D)
kimpetersen
PRO
0
280
The Success of Rails: Ensuring Growth for the Next 100 Years
eileencodes
47
8k
A Guide to Academic Writing Using Generative AI - A Workshop
ks91
PRO
0
250
Transcript
SQL First なsqlc 1
自己紹介 名前:yushin 経歴:golang 約2 年, python, typescript, kotlin, swift, ruby...
余談: 最近購入したcornix というキーボードが非常にカッコよくて、使いや すくて気に入っています 会場に持って来ているので気になっている方はぜひ 2
sqlc とは何か SQL から型安全なコードを生成する sqlc.yaml config ファイル(connection, engine... ) PostgreSQL,
MySQL, SQLite schema.sql database schema query.sql CRUD 等のquery を記載 3
schema Author schema.sql CREATE TABLE authors ( id BIGSERIAL PRIMARY
KEY, name text NOT NULL, bio text, created_at timestamp without time zone DEFAULT clock_timestamp() NOT NULL ); 4
schema Author models.go type Author struct { ID int64 Name
string Bio pgtype.Text CreatedAt time.Time } 内部でpgx/v5 というPostgreSQL driver を使用することができます。 pgtype.Text はNullable を表現しています。 5
query GetAuthor query.sql -- name: GetAuthor :one SELECT * FROM
authors WHERE id = $1 LIMIT 1; query.sql.go const getAuthor = `-- name: GetAuthor :one SELECT id, name, bio, created_at FROM authors WHERE id = $1 LIMIT 1 ` 6
query GetAuthor query.sql.go func (q *Queries) GetAuthor(ctx context.Context, id int64)
(Author, error) { row := q.db.QueryRow(ctx, getAuthor, id) var i Author err := row.Scan( &i.ID, &i.Name, &i.Bio, &i.CreatedAt, ) return i, err } 7
sqlc の特徴・比較 SQL スキーマ・クエリをもとにコードを生成 → go のコードとスキーマが完全一致する → コード生成時、またはコンパイル時にエラーを検知できる vs
GORM → Go の構造体または gorm タグを元にSQL を生成 → スキーマとズレがある場合、実行時にエラーを検知 vs sqlx → db タグを元に構造体へマッピング → SQL と構造体にズレがある場合、実行時にエラーを検知 8
sqlc メリット・デメリット メリット スキーマ・クエリを元に生成することによる型安全性 table 名, カラム名のタイポにも気づくことができる SQL クエリが .sql
ファイルとして分離されるので、SQL が見やすい デメリット 動的なクエリの構築が苦手 共通化やチェーンなどができない マイグレーションやフックなどの便利機能がない 9
ご清聴ありがとうございました 10