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
sqlc と併用するクエリビルダとログ出力ライブラリ
Search
Takeshi AKIMA
August 26, 2025
Programming
0
61
sqlc と併用するクエリビルダとログ出力ライブラリ
https://github.com/tecowl/querybm
と
https://github.com/akm/sql-slog
の紹介です
Takeshi AKIMA
August 26, 2025
Tweet
Share
Other Decks in Programming
See All in Programming
Reduxモダナイズ 〜コードのモダン化を通して、将来のライブラリ移行に備える〜
pvcresin
2
590
プログラマのための作曲入門
cheebow
0
460
Back to the Future: Let me tell you about the ACP protocol
terhechte
0
110
Navigation 2 を 3 に移行する(予定)ためにやったこと
yokomii
0
450
TokyoR#119 bignners session2 Visualization
kotatyamtema
0
110
LLMとPlaywright/reg-suitを活用した jQueryリファクタリングの実際
kinocoboy2
4
580
大規模アプリにおけるXcode Previews実用化までの道のり
ikesyo
0
820
dynamic!
moro
7
2.8k
Repenser les filtres API Platform: une nouvelle syntaxe
vinceamstoutz
2
130
なぜGoのジェネリクスはこの形なのか? Featherweight Goが明かす設計の核心
ryotaros
7
760
2分台で1500examples完走!爆速CIを支える環境構築術 - Kaigi on Rails 2025
falcon8823
2
1.2k
Astroの使用感とディレクトリ設計についての考察
saku0109
0
130
Featured
See All Featured
RailsConf & Balkan Ruby 2019: The Past, Present, and Future of Rails at GitHub
eileencodes
140
34k
Improving Core Web Vitals using Speculation Rules API
sergeychernyshev
18
1.1k
Keith and Marios Guide to Fast Websites
keithpitt
411
22k
Designing for Performance
lara
610
69k
Docker and Python
trallard
46
3.6k
The Pragmatic Product Professional
lauravandoore
36
6.9k
Navigating Team Friction
lara
189
15k
Build The Right Thing And Hit Your Dates
maggiecrowley
37
2.9k
[RailsConf 2023 Opening Keynote] The Magic of Rails
eileencodes
30
9.7k
Easily Structure & Communicate Ideas using Wireframe
afnizarnur
194
16k
Dealing with People You Can't Stand - Big Design 2015
cassininazir
367
27k
I Don’t Have Time: Getting Over the Fear to Launch Your Podcast
jcasabona
33
2.4k
Transcript
sqlc と併用する クエリビルダ と ログ出力ライブラリ akm
自己紹介 • 秋間武志 ◦ github: akm ◦ twitter: @akimatter •
株式会社グルーヴノーツ 社員 • 株式会社テクノ産業 副社長 今日お話するライブラリはテクノ産業のプロジェクトの中で開発あるいは利用されている ものです。
sqlc スキーマ定義とコメント付きクエリから Go のコードを生成するツールです 例 https://github.com/sqlc-dev/sqlc/tree/main/examples/authors/mysql
query.sql
models.go
query.sql.go
sqlc の良いところ • SQL をそのまま動かす安心感 • 型安全 ◦ sqlc.embed マクロ
• 生成される実行時のコードは reflect 不使用
sqlc の困った点 クエリが静的に定義されているため動的な条件に基づいてクエリを生成することができ ません
クエリビルダの候補 • goqu reflect を使っている • gocqlx reflect を使っている •
jet reflect を使っている • query DB 接続部分も実装している • godb reflect を使っている • sqlz コンストラクタに Driver が必要 • loukoum PostgreSQL 専用 • sqlf reflect を使っている。マッピングの仕方がちょっと惜しい
querybm 動的に SELECT 文を生成しモデルにマッピングするための Go のライブラリです https://github.com/tecowl/querybm/ • reflect 不使用
• 依存ゼロ
最もシンプルなケース
querybm.Query の使い方
検索フォームのユースケース • 検索条件が入力された場合には WHERE 句を追加 • 検索条件によっては INNER JOIN も追加
• 取得するフィールドのために INNER JOIN が必要になることも • ページネーションのために COUNT を実行 ◦ フィールドは不要
INNER JOIN を使うケース
querybm の現状 • カバレッジ 100% ◦ 本体のカバレッジと mysql で動作確認したテストコードでのカバレッジと go
tool covdata merge で マージすることで依存ゼロとカバレッジ 100% を両立 • 101 enabled linters • シンプルに書けるようにまだまだ開発中
sqlc のちょっと困った点 ログの出力は実装されていません。 開発者はログ出力を別途実装する必要があります。
sql-slog database/sql のログを log/slog を使って出力するためのライブラリです。 https://github.com/akm/sql-slog • sql.DB の使い方は(ほぼ)これまで通り •
ログアダプタ不要。log/slog を使うだけ • 依存ゼロ • ログレベルの設定を詳細に変更可能 ◦ TRACE, VERBOSE も指定可能 • 実行時間の出力
log/slog とは • Go 1.21 で導入されたログ出力のためのパッケージ • 構造化ロギングをサポート • ログレベルの定義済み
• JSON と テキストをサポート
sql-slog の使い方 https://pkg.go.dev/github.com/akm/sql-slog#hdr-How_ mysql, postgres, sqlite3 の例
sql-slog のログ出力の例
sql-slog で頑張ったところ • カバレッジ 100% ◦ 本体のカバレッジと mysql で動作確認したテストコードでのカバレッジと go
tool covdata merge で マージすることで依存ゼロとカバレッジ 100% を両立 • 99 enabled linters • 汎用的にしようとするとdatabase/sql/driver のインターフェースの実装がややこしく なるけど頑張った
まとめ • querybm を使うって動的なクエリを生成できます • sql-slog でログ出力できます • どちらも依存ゼロで軽量です •
なにか気づいたことがあればぜひ教えて下さい ◦ Issue, Slack なんでも大丈夫です ◦ 良かったら Star お願いします!