Upgrade to Pro — share decks privately, control downloads, hide ads and more …

sqlc と併用するクエリビルダとログ出力ライブラリ

sqlc と併用するクエリビルダとログ出力ライブラリ

Avatar for Takeshi AKIMA

Takeshi AKIMA

August 26, 2025
Tweet

Other Decks in Programming

Transcript

  1. 自己紹介 • 秋間武志 ◦ github: akm ◦ twitter: @akimatter •

    株式会社グルーヴノーツ 社員 • 株式会社テクノ産業 副社長 今日お話するライブラリはテクノ産業のプロジェクトの中で開発あるいは利用されている ものです。
  2. クエリビルダの候補 • goqu reflect を使っている • gocqlx reflect を使っている •

    jet reflect を使っている • query DB 接続部分も実装している • godb reflect を使っている • sqlz コンストラクタに Driver が必要 • loukoum PostgreSQL 専用 • sqlf reflect を使っている。マッピングの仕方がちょっと惜しい
  3. 検索フォームのユースケース • 検索条件が入力された場合には WHERE 句を追加 • 検索条件によっては INNER JOIN も追加

    • 取得するフィールドのために INNER JOIN が必要になることも • ページネーションのために COUNT を実行 ◦ フィールドは不要
  4. querybm の現状 • カバレッジ 100% ◦ 本体のカバレッジと mysql で動作確認したテストコードでのカバレッジと go

    tool covdata merge で マージすることで依存ゼロとカバレッジ 100% を両立 • 101 enabled linters • シンプルに書けるようにまだまだ開発中
  5. sql-slog database/sql のログを log/slog を使って出力するためのライブラリです。 https://github.com/akm/sql-slog • sql.DB の使い方は(ほぼ)これまで通り •

    ログアダプタ不要。log/slog を使うだけ • 依存ゼロ • ログレベルの設定を詳細に変更可能 ◦ TRACE, VERBOSE も指定可能 • 実行時間の出力
  6. sql-slog で頑張ったところ • カバレッジ 100% ◦ 本体のカバレッジと mysql で動作確認したテストコードでのカバレッジと go

    tool covdata merge で マージすることで依存ゼロとカバレッジ 100% を両立 • 99 enabled linters • 汎用的にしようとするとdatabase/sql/driver のインターフェースの実装がややこしく なるけど頑張った
  7. まとめ • querybm を使うって動的なクエリを生成できます • sql-slog でログ出力できます • どちらも依存ゼロで軽量です •

    なにか気づいたことがあればぜひ教えて下さい ◦ Issue, Slack なんでも大丈夫です ◦ 良かったら Star お願いします!