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
Web開発を支えるマイグレーションツールについて / sqldef introduction ...
Search
Sponsored
·
Your Podcast. Everywhere. Effortlessly.
Share. Educate. Inspire. Entertain. You do you. We'll handle the rest.
→
yudppp
December 07, 2019
Programming
3.7k
2
Share
Embed
Copy iframe code
Copy JS code
Copy link
Start on current slide
Web開発を支えるマイグレーションツールについて / sqldef introduction for psql users
第11回 PostgreSQLアンカンファレンス@東京で発表する資料
https://pgunconf.connpass.com/event/155951/
yudppp
December 07, 2019
More Decks by yudppp
See All by yudppp
開発者にもコーディングエージェントにも働きやすい環境を整える
yudppp
1
110
型安全なDrag and Dropの設計を考える
yudppp
5
1.1k
未知のプログラミング言語にChatGPTと共に挑む
yudppp
0
550
SaaSフロントエンド開発の現場で求められる技術 / Technologies for SaaS Frontend Development in the Field
yudppp
2
290
2019年 HRBrainの技術的挑戦 / hrbain technology challenge 2019
yudppp
3
1.5k
ISUCON向けのツールを作った話 / isutools
yudppp
1
350
Row Level Securityはマルチテナントの銀の弾丸になりうるのか / Row Level Security is silver bullet for multitenancy?
yudppp
23
34k
Webサービス開発に必要な統計学入門 / study of statistics for web developers
yudppp
1
370
メジャーな Live Reloaderの違いをちゃんと調べて見た / Compare major live reloader of Go
yudppp
1
2k
Other Decks in Programming
See All in Programming
まずはプロンプトガイドを読もう、話はそれからだ
kiakiraki
1
250
新人はどこまで自力でやり、どこからAIに頼るべきか/エンジニア育成に向き合う_先輩たちの悩みと知見共有会
toppan_digital_dev
1
510
Hello, Hiroshima Geospatial Data! — Exploring DoboX with Python
ra0kley
0
160
[PyCon KR 2026] More Variants, More Diversity for AI Accelerators
achimnol
0
130
Go 1.27からのGODEBUG / Go 1.27 リリースパーティ #go127party
mazrean
0
280
DroidKaigi 2026 「個人開発という実験場: Android エンジニアが手にする4つの自由」
slashnephy
0
190
Claude Codeを組織的に動かして月400PRを実現した話
happy_ryo
0
250
Gmail/Google DriveをトリガーにAIエージェントを動かそう! / Run AI agents with Gmail/Google Drive as triggers!
har1101
3
460
Press start. Python's next generation.
willingc
PRO
3
300
ALB ログから Trace を気合で繋げる技術
fohte
7
850
Can LLMs Replicate 4 Years of Compose Migration? Exploring the boundaries of automation with 279 XML files from a real product
makun
0
130
Vibes Containers 〜AIで変わるコンテナ設計と運用〜
tkikuc
1
400
Featured
See All Featured
Tips & Tricks on How to Get Your First Job In Tech
honzajavorek
1
710
Designing for Performance
lara
611
70k
We Have a Design System, Now What?
morganepeng
55
8.3k
エンジニアに許された特別な時間の終わり
watany
108
250k
Learning to Love Humans: Emotional Interface Design
aarron
275
41k
Getting science done with accelerated Python computing platforms
jacobtomlinson
2
460
The Invisible Side of Design
smashingmag
301
52k
Winning Ecommerce Organic Search in an AI Era - #searchnstuff2025
aleyda
1
2.1k
[RailsConf 2023] Rails as a piece of cake
palkan
59
7k
From Legacy to Launchpad: Building Startup-Ready Communities
dugsong
0
320
Understanding Cognitive Biases in Performance Measurement
bluesmoon
32
3k
Noah Learner - AI + Me: how we built a GSC Bulk Export data pipeline
techseoconnect
PRO
0
410
Transcript
Web開発を⽀える マイグレーションツールについて 第11回 PostgreSQLアンカンファレンス@東京
⾃⼰紹介 @yudppp 株式会社HRBrain CTO 好きな⾔葉: 冪等性 嫌いなモノ: 浮動⼩数点の誤差 基本的にWebエンジニア
⽬標評価管理クラウド
HRBrainとは • ⽬標と評価を管理するクラウドSaaSを作って いる会社です。 • リリース開始からもうすぐで3年
先⽇Buildersconにて Row Level Securityは マルチテナントの 銀の弾丸になりうるのか という話をしました https://speakerdeck.com/yudppp/row-level-security-is-silver-bullet-for-multitenancy
概要 • SaaS開発していく上でリリース頻度を⾼く開 発していくには真のマルチテナント(全ての会 社の情報が⼀つのDB)にしていきたいが、セ キュリティ的な不安要素をPostgreSQLの RowLevelSecurityを使って解決した話
PostgreSQL Conference Japanで この内容とマイグレーションについて話そうとしたら CfP落ちました。。
現在のリリース頻度 • 週に2回リリース • 毎回ではないがSQLのマイグレーションが頻 繁に必要
みなさんマイグレーション の管理どうされていますか
元々のマイグレーション管理 gooseというGo製のToolを利⽤
起きた問題① Aさん「81_modify_user_birthday_col.sql」 Bさん「81_add_era_table.sql」 Aさん「Merge!」 Bさん「Merge!」 CI 「Test / Deploy 失敗!」
CIでTest実⾏した瞬間は ⼤丈夫なので Mergeされる前に 検知するのが難しい
起きた問題② 前提: みんなでdev環境⼀つを共有していてfeature ブランチをSlackで告知すれば好きなタイミ ングであげれる運⽤ (本当はfeatureブランチごとdeployしたい)
起きた問題② Bさん「令和追加した確認するのでdev使い ます。」 CI 「Deployed!」 Migrationがなぜか呼ばれない。。 誰かがあげたMigrationがdownされてない
この運⽤をしていると Migrationを戻すタイミング が難しい
解決策を探す
k0kubun/sqldef The easiest idempotent MySQL/PostgreSQL schema management by SQL. This
is inspired by Ridgepole but using SQL, so there's no need to remember Ruby DSL. 定義したschema.sqlとDB接続した情報を⽐較し ていい感じにALTER⽂を流してくれる Go製なのでbinaryだけで動く
https://github.com/k0kubun/sqldef
どうなるか 常にschemaファイルとDBの状態が等しくな るので、上記のような問題は起きない。 もし起きたとしても、schemaファイルが Conflictするので気づける。
sqldefの内部実装 Vitess(Vitess is a database clustering system for horizontal scaling
of MySQL)のsqlparser のsourceを拡張して作られている。 information_schema.table_constraintsあた りをSELECTした結果を元にCREATE⽂を Buildしている。
既知の課題 基本的な構⽂は対応しているが、Vitessから 派⽣したこともありPostgreSQLのあまり使わ れない構⽂が未対応だったりする。(そう例え ばRowLevelSecurityとか) sqldefのPostgreSQLのユーザーがそこまで多 くなさそう。
まとめ 冪等性が担保された安全な⽣活がしたい。 sqldefをPostgreSQLで使うユーザーを増やし て、より洗礼されたツールになってほしい 今⽇の発表で1⼈でもユーザーが増えたら嬉 しい
参考資料 •SQLで羃等にDBスキーマ管理ができるツー ル「sqldef」を作った (https:// k0kubun.hatenablog.com/entry/2018/08/ 25/114455) •http://vitess.io/