Go言語のDBアクセスにおいて、SQLから型安全なGoコードを自動生成するツール「sqlc」を紹介する記事です。ORMを使わずSQLは自分で書きつつ、rows.Scan()など、SQLとGoコードをつなぐ定型的なボイラープレート(毎回同じように書く定型コード)を自動生成で排除する手法を、PostgreSQL+pgx/v5構成の導入手順とともに解説しています。
Go 1.24以降ではsqlcを go get -tool github.com/sqlc-dev/sqlc/cmd/sqlc でtool dependencyとして管理でき、sqlc.yamlでスキーマパス・クエリパス・出力先を指定します。SQLファイルには-- name: ListExhibitionsByMuseumID :manyのようなコメントで生成メソッド名と戻り値の型を指定する仕組みです。著者はORMではなくsqlcを選んだ理由として、SQLは自分で設計しつつ、SQLとGoをつなぐ部分だけをコード生成できる点を挙げています。
出典が伝えている要点
- sqlcはSQLから型安全なGoコードを自動生成するツールである
- 記事ではPostgreSQLとpgx/v5を組み合わせた使用例が示されている
- Go 1.24以降ではsqlcをtool dependencyとして管理できる
- sqlcの導入コマンドは
go get -tool github.com/sqlc-dev/sqlc/cmd/sqlcである - sqlcの設定は
sqlc.yamlで行い、スキーマパス・クエリパス・出力先を指定する - 記事の例では生成先ディレクトリとして
internal/sqlcgenが使われている - SQLファイルには
-- name: ListExhibitionsByMuseumID :manyのようなコメントで生成メソッド名と戻り値の型(one/many等)を指定する - sqlcを使うことで、Query実行後の
rows.Scan()など手書きの型変換処理を省略できる - 著者はORMではなくsqlcを選んだ理由として、SQLは自分で設計し、SQLとGoをつなぐ部分のみをコード生成する方針を挙げている