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
75
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
The Past, Present, and Future of Enterprise Java
ivargrimstad
0
620
AWS re:Invent 2025参加 直前 Seattle-Tacoma Airport(SEA)におけるハードウェア紛失インシデントLT
tetutetu214
2
120
Smart Handoff/Pickup ガイド - Claude Code セッション管理
yukiigarashi
0
150
AIによる高速開発をどう制御するか? ガードレール設置で開発速度と品質を両立させたチームの事例
tonkotsuboy_com
7
2.4k
生成AIを活用したソフトウェア開発ライフサイクル変革の現在値
hiroyukimori
PRO
0
110
組織で育むオブザーバビリティ
ryota_hnk
0
180
Vibe Coding - AI 驅動的軟體開發
mickyp100
0
180
責任感のあるCloudWatchアラームを設計しよう
akihisaikeda
3
180
今から始めるClaude Code超入門
448jp
8
9.1k
CSC307 Lecture 04
javiergs
PRO
0
660
AI Agent の開発と運用を支える Durable Execution #AgentsInProd
izumin5210
7
2.3k
【卒業研究】会話ログ分析によるユーザーごとの関心に応じた話題提案手法
momok47
0
200
Featured
See All Featured
Bash Introduction
62gerente
615
210k
Building a Scalable Design System with Sketch
lauravandoore
463
34k
Refactoring Trust on Your Teams (GOTO; Chicago 2020)
rmw
35
3.4k
The browser strikes back
jonoalderson
0
420
Digital Projects Gone Horribly Wrong (And the UX Pros Who Still Save the Day) - Dean Schuster
uxyall
0
400
Deep Space Network (abreviated)
tonyrice
0
66
Tell your own story through comics
letsgokoyo
1
810
The Straight Up "How To Draw Better" Workshop
denniskardys
239
140k
Making Projects Easy
brettharned
120
6.6k
How to Talk to Developers About Accessibility
jct
2
140
brightonSEO & MeasureFest 2025 - Christian Goodrich - Winning strategies for Black Friday CRO & PPC
cargoodrich
3
110
Avoiding the “Bad Training, Faster” Trap in the Age of AI
tmiket
0
79
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 お願いします!