Upgrade to Pro — share decks privately, control downloads, hide ads and more …

SQL Firstなsqlc

Avatar for yushin yushin
October 14, 2025
41

SQL Firstなsqlc

Go Night Talks – After Conference 2025/10/14 で発表した資料です。

Avatar for yushin

yushin

October 14, 2025
Tweet

Transcript

  1. 自己紹介 名前:yushin 経歴:golang 約2 年, python, typescript, kotlin, swift, ruby...

    余談: 最近購入したcornix というキーボードが非常にカッコよくて、使いや すくて気に入っています 会場に持って来ているので気になっている方はぜひ 2
  2. 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
  3. 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
  4. 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
  5. 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
  6. sqlc の特徴・比較 SQL スキーマ・クエリをもとにコードを生成 → go のコードとスキーマが完全一致する → コード生成時、またはコンパイル時にエラーを検知できる vs

    GORM → Go の構造体または gorm タグを元にSQL を生成 → スキーマとズレがある場合、実行時にエラーを検知 vs sqlx → db タグを元に構造体へマッピング → SQL と構造体にズレがある場合、実行時にエラーを検知 8
  7. sqlc メリット・デメリット メリット スキーマ・クエリを元に生成することによる型安全性 table 名, カラム名のタイポにも気づくことができる SQL クエリが .sql

    ファイルとして分離されるので、SQL が見やすい デメリット 動的なクエリの構築が苦手 共通化やチェーンなどができない マイグレーションやフックなどの便利機能がない 9