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
43
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
330
Featured
See All Featured
The Impact of AI in SEO - AI Overviews June 2024 Edition
aleyda
5
730
XXLCSS - How to scale CSS and keep your sanity
sugarenia
249
1.3M
Between Models and Reality
mayunak
1
180
Automating Front-end Workflow
addyosmani
1371
200k
Why Our Code Smells
bkeepers
PRO
340
58k
Have SEOs Ruined the Internet? - User Awareness of SEO in 2025
akashhashmi
0
270
The Curse of the Amulet
leimatthew05
1
8.3k
Sharpening the Axe: The Primacy of Toolmaking
bcantrill
46
2.7k
Agile Leadership in an Agile Organization
kimpetersen
PRO
0
79
Templates, Plugins, & Blocks: Oh My! Creating the theme that thinks of everything
marktimemedia
31
2.7k
Darren the Foodie - Storyboard
khoart
PRO
2
2.3k
Future Trends and Review - Lecture 12 - Web Technologies (1019888BNR)
signer
PRO
0
3.2k
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