Link
Embed
Share
Beginning
This slide
Copy link URL
Copy link URL
Copy iframe embed code
Copy iframe embed code
Copy javascript embed code
Copy javascript embed code
Share
Tweet
Share
Tweet
Slide 1
Slide 1 text
© GENDA Inc. sqlcを新規サービスに採用してみた! プロダクト開発部 西尾 健人
Slide 2
Slide 2 text
© GENDA Inc. 01. 会社説明 02. sqlcとは 03. sqlcを採用した理由 04. プロダクトでsqlcを使う際のTips 目次
Slide 3
Slide 3 text
© GENDA Inc. 自己紹介 西尾 健人 ● GENDA 新卒 ● FE/BE ○ Go/TypeScript/Dart(Flutter) ○ Python ● 趣味 ○ 筋トレ、ボディビル
Slide 4
Slide 4 text
© GENDA Inc. 01. 会社説明
Slide 5
Slide 5 text
© GENDA Inc. 会社概要 社名 代表取締役社長 設立 上場市場 株式会社GENDA 申 真衣 2018年5月 東京証券取引所グロース市場 資本金 64億6,307万円(資本剰余金含む)2023年8月31日現在 従業員数 連結:11,063名(2024年2月29日時点) 所在地 東京都港区東新橋1-9-1 東京汐留ビルディング17F
Slide 6
Slide 6 text
© GENDA Inc. 世界中の 人々の人生を より楽しく Aspiration 人が人らしく生きるために「 楽しさ」は不可欠と考え、 私たちは「世界中の人々の人生をより楽しく 」という Aspiration(アスピレーション=大志)を掲げています。
Slide 7
Slide 7 text
© GENDA Inc. 2つの成長戦略 M&A / Finance GENDAグループはM&Aによって事業領域を拡大しており、 それに伴ってテクノロジーを活用する領域も増えていきます。 GENDAにはプロダクト開発に携わる プロフェッショナルが集まり、 グループ各社の成長をテクノロジー面でリード しています。 Technology アミューズメント施設会員向け 公式アプリの開発 アミューズメント施設の DX推進 テクノロジーを活用して、 エンターテイメント業界に挑戦 クレーンゲームの オンライン展開 既存事業の成長に加え、 M&Aでの「連続的な非連続な成長」 により 株式価値を高めていくことが成長戦略の柱になっています。
Slide 8
Slide 8 text
© GENDA Inc. GENDAグループ概観
Slide 9
Slide 9 text
© GENDA Inc. プロダクト
Slide 10
Slide 10 text
© GENDA Inc. 02. sqlcとは
Slide 11
Slide 11 text
© GENDA Inc. sqlcとは SQLのクエリからtype-safeなコード を自動生成するパッケージ https://sqlc.dev/
Slide 12
Slide 12 text
© 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]
Slide 13
Slide 13 text
© 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
Slide 14
Slide 14 text
© GENDA Inc. 設定ファイル ● queries クエリファイルのパス ● schema DDL文のパス ● gen ○ package 生成されるパッケージ名 ○ out 生成コードを出力するディレクトリ sqlc.json
Slide 15
Slide 15 text
© GENDA Inc. クエリを書く DDL文 id指定で購入履歴を一つ取得するクエリ
Slide 16
Slide 16 text
© GENDA Inc. コード生成 ← クエリがconstで生成 (設定次第) ← データ取得のコードが生成 ← 別ファイルに構造体も生成
Slide 17
Slide 17 text
03. sqlcを採用した理由
Slide 18
Slide 18 text
© GENDA Inc. sqlcを採用した理由 01. コードの安定性の向上 02. 生成されるコードの可読性の高さ 03. 個人のOSS → 会社化
Slide 19
Slide 19 text
© GENDA Inc. コードの安定性の向上 Go標準 ⚪ 使いやすい(クエリ書いて Scanするだけ) ✖ データのマッピング(テーブルのカラムを追加した時とか大変) 高度なORMマッパー(GORM、xorm etc.) ⚪ 型安全 ⚪ Goの書き心地でSQLを扱える △ 学習コスト ✖ データのマッピング
Slide 20
Slide 20 text
© 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
Slide 21
Slide 21 text
© GENDA Inc. コードの可読性の高さ Goの標準パッケージのみで生成 (context, database/sql, time) データもプリミティブなデータ型で定義さ れる ↓ ORMマッパーに慣れていないメンバー も使いやすい(インターン生が多かった) 最悪手動で直せる
Slide 22
Slide 22 text
© GENDA Inc. 個人OSS → 会社化 Coreコントリビューターの方が会社を立ち上げて sqlcをフルタイムでサポート&スポンサード ● プロダクトレベルで導入する上で少し安心 https://github.com/sqlc-dev/sqlc
Slide 23
Slide 23 text
© GENDA Inc. 04. プロダクトでsqlcを使 う際のTips
Slide 24
Slide 24 text
© GENDA Inc. 集計関数を使用する時の注意点( MySQL) ← 集計関数を使用したクエリ ← 集計値の型が interfaceとなってしまう (具象型は []byte型、詳細はzennへ [6]) [6] https://zenn.dev/genda_jp/articles/b8b8df8e6fc769
Slide 25
Slide 25 text
© GENDA Inc. 生成されたコードにGodocをつける ↑ コメントを残すと、 生成されたメソッドにGodocも生成される
Slide 26
Slide 26 text
© GENDA Inc. SQL文のLinterを導入する SQL文が常に正となるのでしっかり保守したい ● SQLFluff ● ○ PythonベースのSQL Linter ○ 公式のDocker imageもあり扱いやすい [7] [7] https://hub.docker.com/r/sqlfluff/sqlfluff https://sqlfluff.com/
Slide 27
Slide 27 text
© GENDA Inc. 他にも色々 便利な機能はたくさんある 機能 概要 sqlc verify schemaの変更を検知して、これまでのクエリが問 題ないかを検証してくれる sqlc vet 自分でルールを書いて lintする 特定の操作を禁止したり、実行計画をもとに Slowク エリを特定したりする SQLのmigrationはサポートしていない ● up/down migrationをよしなにみてくれる機能はある ● 今回はsqldef [8]を使用してスキーマを管理 (sqlcと相性良さそう) [8] https://github.com/sqldef/sqldef
Slide 28
Slide 28 text
© GENDA Inc. Now Hiring!! エンジニア、募集しています! 他にもプロダクトマネージャーやデータサイエンティスト、 M&A担 当まで幅広く募集しています。
Slide 29
Slide 29 text
END