Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Sign up for free
Menu
Search
Features
All features
Private URLs
Password Protection
Custom URLS
Scheduled publishing
Remove Branding
Restrict embedding
Deck Collections
Notes
Features
All features
Private URLs
Password Protection
Custom URLS
Scheduled publishing
Remove Branding
Restrict embedding
Deck Collections
Notes
Explore
Featured decks
Featured speakers
Programming
Technology
Storyboards
Explore
Featured decks
Featured speakers
Programming
Technology
Storyboards
Pricing
Search
Sign in
Sign up for free
sqlc と併用するクエリビルダとログ出力ライブラリ
Search
Sponsored
·
Your Podcast. Everywhere. Effortlessly.
Share. Educate. Inspire. Entertain. You do you. We'll handle the rest.
→
Takeshi AKIMA
August 26, 2025
Programming
100
0
Share
Embed
Copy iframe code
Copy JS code
Copy link
Start on current slide
sqlc と併用するクエリビルダとログ出力ライブラリ
https://github.com/tecowl/querybm
と
https://github.com/akm/sql-slog
の紹介です
Takeshi AKIMA
August 26, 2025
Other Decks in Programming
See All in Programming
ChromeでローカルLLM
ryu1013
0
140
Verilogで学ぶCPU自作入門
uyuki234
8
4.1k
Railsのためのパスキー実践入門 〜マルチテナントSaaSでの意思決定〜
utakaha
2
660
Web Framework Benchmark Battle 2026, Any%
a_matsuda
2
2.3k
Everything will be SERVERLESS — 信じて運用した10年の経験値 / Everything Will be Serverless — Lessons Learned from 10 Years of Operational Experience
seike460
PRO
1
1.1k
When benchmarks go bad - what I learned from measuring performance wrong
hollycummins
0
220
月間100万人のサービス刷新で、 技術選定をHonoに振り切った話
yutobara
8
6.7k
Herb in Rails 8.2: Your ERB views, now HTML-aware @ Kaigi on Rails 2026, Tokyo, Japan
marcoroth
2
270
R8 の設定見直しでアプリサイズ削減
andpad
0
220
[Rails World 2026] Durable orchestration on Rails: from continuation to workflow
palkan
1
750
[Dev Group Paris Octobre 26] Agentforce, SIforce, Claudeforce, Slackbot… on s'y retrouve ?
nabondance
0
110
半永久的に提供し続けられるプライベートクラウドを目指して ― 利用者の認知負荷を抑えるAPI抽象化とハードウェア世代交代の基盤設計
tomokon
0
500
Featured
See All Featured
Fashionably flexible responsive web design (full day workshop)
malarkey
409
67k
The MySQL Ecosystem @ GitHub 2015
samlambert
251
13k
Bridging the Design Gap: How Collaborative Modelling removes blockers to flow between stakeholders and teams @FastFlow conf
baasie
0
730
GraphQLの誤解/rethinking-graphql
sonatard
75
12k
10 Git Anti Patterns You Should be Aware of
lemiorhan
PRO
659
62k
Site-Speed That Sticks
csswizardry
13
1.6k
Tips & Tricks on How to Get Your First Job In Tech
honzajavorek
1
800
Paper Plane
katiecoart
PRO
5
54k
The Success of Rails: Ensuring Growth for the Next 100 Years
eileencodes
47
8.4k
Why Your Marketing Sucks and What You Can Do About It - Sophie Logan
marketingsoph
0
430
Visual Storytelling: How to be a Superhuman Communicator
reverentgeek
2
710
Optimising Largest Contentful Paint
csswizardry
37
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 お願いします!