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

sqlcを新規サービスに採用してみた!

Kento Nishio
June 16, 2024
1.4k

 sqlcを新規サービスに採用してみた!

golang.tokyo #35 〜カンファレンス 後夜祭!〜
LT会登壇資料
https://golangtokyo.connpass.com/event/317973/

Kento Nishio

June 16, 2024
Tweet

Transcript

  1. © GENDA Inc. 自己紹介 西尾 健人 • GENDA 新卒 •

    FE/BE ◦ Go/TypeScript/Dart(Flutter) ◦ Python • 趣味 ◦ 筋トレ、ボディビル
  2. © GENDA Inc. 会社概要 社名 代表取締役社長 設立 上場市場 株式会社GENDA 申

    真衣 2018年5月 東京証券取引所グロース市場 資本金 64億6,307万円(資本剰余金含む)2023年8月31日現在 従業員数 連結:11,063名(2024年2月29日時点) 所在地 東京都港区東新橋1-9-1 東京汐留ビルディング17F
  3. © GENDA Inc. 2つの成長戦略 M&A / Finance GENDAグループはM&Aによって事業領域を拡大しており、 それに伴ってテクノロジーを活用する領域も増えていきます。 GENDAにはプロダクト開発に携わる

    プロフェッショナルが集まり、 グループ各社の成長をテクノロジー面でリード しています。 Technology アミューズメント施設会員向け 公式アプリの開発 アミューズメント施設の DX推進 テクノロジーを活用して、 エンターテイメント業界に挑戦 クレーンゲームの オンライン展開 既存事業の成長に加え、 M&Aでの「連続的な非連続な成長」 により 株式価値を高めていくことが成長戦略の柱になっています。
  4. © GENDA Inc. sqlcのサポート範囲 Language MySQL PostgreSQL SQLite Go Stable

    Stable Beta Kotlin Beta Beta Beta Python Beta Beta ー TypeScript Beta Beta ー [1] https://docs.sqlc.dev/en/latest/reference/language-support.html v1.26.0 (2024/06/13) 現在 [1]
  5. © GENDA Inc. sqlcの使い方 01.   DBのスキーマと設定ファイル(sqlc.yaml or sqlc.json)を用意 02.   SQLのクエリを書く 03.    $

    sqlc generate 全ての作業は「sqlc playground」[2] で実施しています。 (https://play.sqlc.dev/p/12767f4f5b4a5a6dbda6a51fd6c663cef35515f11bc5df569874a3ab57515b3d) [2] https://play.sqlc.dev
  6. © GENDA Inc. 設定ファイル • queries クエリファイルのパス • schema DDL文のパス

    • gen ◦ package 生成されるパッケージ名 ◦ out 生成コードを出力するディレクトリ sqlc.json
  7. © GENDA Inc. コードの安定性の向上 Go標準 ⚪ 使いやすい(クエリ書いて Scanするだけ) ✖ データのマッピング(テーブルのカラムを追加した時とか大変)

    高度なORMマッパー(GORM、xorm etc.) ⚪ 型安全 ⚪ Goの書き心地でSQLを扱える △ 学習コスト    ✖ データのマッピング
  8. © GENDA Inc. コードの安定性の向上 sqlc ⚪ Go標準の使いやすさ ⚪ 型安全 ⚪

    Testもしやすい ⚪ データのマッピング コンパイラがチェックできないエラー( SQL文のマッピング順と引数の順番)を解決 [4] マッピングをSQL文で管理できる (最近はORMでも自動生成できるものがあるらしい: Gorm GEN [5]) [4] https://conroy.org/introducing-sqlc [5] https://gorm.io/gen/index.html
  9. © GENDA Inc. コードの可読性の高さ Goの標準パッケージのみで生成 (context, database/sql, time) データもプリミティブなデータ型で定義さ れる

    ↓ ORMマッパーに慣れていないメンバー も使いやすい(インターン生が多かった) 最悪手動で直せる
  10. © GENDA Inc. SQL文のLinterを導入する SQL文が常に正となるのでしっかり保守したい • SQLFluff • ◦ PythonベースのSQL

    Linter ◦ 公式のDocker imageもあり扱いやすい [7] [7] https://hub.docker.com/r/sqlfluff/sqlfluff https://sqlfluff.com/
  11. © GENDA Inc. 他にも色々 便利な機能はたくさんある 機能 概要 sqlc verify schemaの変更を検知して、これまでのクエリが問

    題ないかを検証してくれる sqlc vet 自分でルールを書いて lintする 特定の操作を禁止したり、実行計画をもとに Slowク エリを特定したりする SQLのmigrationはサポートしていない • up/down migrationをよしなにみてくれる機能はある • 今回はsqldef [8]を使用してスキーマを管理 (sqlcと相性良さそう) [8] https://github.com/sqldef/sqldef
  12. END