XGitHub

sqlcの使い方

Published Icon
2025-11-29
Tag Icon

インストール

私の環境だとインストール時に C 言語のパスが解決できなかったので、直接バイナリファイルを GitHub からインストールしました。

Releases · sqlc-dev/sqlcGenerate type-safe code from SQL. Contribute to sqlc-dev/sqlc development by creating an account on GitHub.
favicongithub.com
ogp

Windows 環境のため、sqlc_X.XX.X_windows_amd64.zipをダウンロード

下記コマンドでバージョン情報が出力されれば成功です。

sqlc version
> vX.XX.X

コード生成

Configuration — sqlc 1.30.0 documentation
favicondocs.sqlc.dev
ogp
version: "2"
 
sql:
  - engine: "postgresql"
    queries: "query.sql"
    schema: "schema.sql"
    gen:
      go:
        package: "tutorial"
        out: "tutorial"
        sql_package: "pgx/v5"
  • engine

    使用する RDBMS を指定

    指定可能値 : postgresql, sqlite, mysql

  • schema

    SQL ファイルか、ファイルが入っているディレクトリを指定

  • queries

    SELECT, INSERT, UPDATE, DELETEの実行クエリを記述するディレクトリかファイルを指定

  • gen

    生成する言語を指定。Go 以外にも Python などを指定可能

  • package

    生成される Go のパッケージ名

  • out

    生成コードの出力先ディレクトリ

  • sql_package

    生成されるコードで使用する SQL パッケージ

    指定可能 : pgx/v4, pgx/v5, database/sql

  • emit_json_tags

    true の場合、struct フィールドにjson:"xxx"を付与する

  • emit_db_tags

    struct フィールドにdb:"column_name"を付与するかどうか

  • emit_prepared_queries

    true の場合 Prepared Statement 版のクエリ関数を生成する

  • emit_interface

    true の場合、生成コードに interface を生成する

  • emit_exact_table_names

    true の場合、構造体名はテーブル名になる

  • emit_empty_slices

    true の場合、:many クエリの返り値は nil ではなく空スライスになる

Getting started with PostgreSQL — sqlc 1.30.0 documentation
favicondocs.sqlc.dev
ogp

公式サイトから参考データを使って生成します。

schema.sql
CREATE TABLE authors (
  id   BIGSERIAL PRIMARY KEY,
  name text      NOT NULL,
  bio  text
);
query.sql
-- name: GetAuthor :one
SELECT * FROM authors
WHERE id = $1 LIMIT 1;
 
-- name: ListAuthors :many
SELECT * FROM authors
ORDER BY name;
 
-- name: CreateAuthor :one
INSERT INTO authors (
	name, bio
) VALUES (
	$1, $2
)
RETURNING *;
 
-- name: UpdateAuthor :exec
UPDATE authors
set name = $2,
bio = $3
WHERE id = $1;
 
-- name: DeleteAuthor :exec
DELETE FROM authors
WHERE id = $1;

ファイル構成

.
├── go.mod
├── query.sql
├── schema.sql
└── sqlc.yaml

下記コマンド実行で、コードが生成されます。

sqlc generate

このようなファイル構成になったら成功です。

.
├── go.mod
├── query.sql
├── schema.sql
├── sqlc.yaml
└── tutorial
    ├── db.go
    ├── models.go
    └── query.sql.go