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
Managing Database Migrations in Go Backend Systems
Search
Kazuhiko Yamashita
September 16, 2025
Programming
530
0
Share
Embed
Copy iframe code
Copy JS code
Copy link
Start on current slide
Managing Database Migrations in Go Backend Systems
https://pepabo.connpass.com/event/363869/
ペパボ & GO 〜 夏のGo祭り2025、あの夏〜でお話しました。
Kazuhiko Yamashita
September 16, 2025
More Decks by Kazuhiko Yamashita
See All by Kazuhiko Yamashita
タクシーアプリ『GO』の バックエンド開発のおける AI利活用と若者のすべて
pyama86
3
2.2k
継続的な負荷検証を目指して
pyama86
3
1.7k
成長期における、 ユーザー領域の複雑さと 整備の進め方
pyama86
1
680
Stay Hacker 〜九州で生まれ、Perlに出会い、コミュニティで育つ〜
pyama86
2
6.5k
新しい職場の CI が 20 分かかっていたらあなたならどうする?
pyama86
2
1.5k
事業を差別化する技術を生み出す技術
pyama86
4
2.3k
Re:Define 可用性を支える モニタリング、パフォーマンス最適化、そしてセキュリティ
pyama86
9
11k
AI時代におけるSRE、 あるいはエンジニアの生存戦略
pyama86
6
2.1k
Tuning GraphQL on Rails
pyama86
2
2.8k
Other Decks in Programming
See All in Programming
初めてのKubernetes 本番運用でハマった話
oku053
0
130
分散システム、なんですぐ死んでしまうん?耐障害性を高めたいあなたのためのレジリエンスパターン入門
mshibuya
7
6.4k
エンジニア向け会社紹介/Findy Company Profile
findyinc
6
360k
1年で人数1.5倍、PR数5.5倍増。 品質とアウトカムはどうなったか、 何が効いたか
ike002jp
0
140
Laravel Boostに学ぶ、AIにPHPを書かせる技術 〜OSSの実装から蒸留するエージェント制御の王道〜
kentaroutakeda
3
460
20260623_Loop Engineeringで自分の分身の問い合わせBotを作る
ryugen04
0
220
AIキャラアプリkaiwaの低遅延音声通話基盤をどう作ったか - AWS Gravitonで支える低遅延・低コストAI Agent基盤
mogamit
0
170
音楽のための関数型プログラミング言語mimiumにおける多段階計算の活用
tomoyanonymous
1
340
どこまでゆるくて許されるのか
tk3fftk
0
500
광주소프트웨어마이스터고등학교 DevFest 특강 - 바이브 코딩 시대에서 주니어 개발자로 살아남는 방법
utilforever
1
140
ソフトウェア設計に溶けるインフラ ― AWS CDK のインフラ認識論
konokenj
2
550
act1-costs.pdf
sumedhbala
0
240
Featured
See All Featured
The browser strikes back
jonoalderson
0
1.4k
10 Git Anti Patterns You Should be Aware of
lemiorhan
PRO
659
62k
Chasing Engaging Ingredients in Design
codingconduct
0
240
How to Think Like a Performance Engineer
csswizardry
28
2.7k
Thoughts on Productivity
jonyablonski
76
5.2k
Optimising Largest Contentful Paint
csswizardry
37
3.8k
<Decoding/> the Language of Devs - We Love SEO 2024
nikkihalliwell
1
280
Building a Modern Day E-commerce SEO Strategy
aleyda
45
9.1k
Evolution of real-time – Irina Nazarova, EuRuKo, 2024
irinanazarova
9
1.4k
VelocityConf: Rendering Performance Case Studies
addyosmani
333
25k
Noah Learner - AI + Me: how we built a GSC Bulk Export data pipeline
techseoconnect
PRO
0
220
How People are Using Generative and Agentic AI to Supercharge Their Products, Projects, Services and Value Streams Today
helenjbeal
1
240
Transcript
Managing Database Migrations in Go Backend Systems 2025.09.16 P山@GO株式会社
© GO Inc. 2 GO株式会社 山下 和彦 所属 開発本部 ソフトウェア開発統括部
バックエンド開発部 バックエンド1グループ @pyama86
© GO Inc. 3 旧来のバックエンドチームのDBマイグレーション 1. sqldefを利用しているリポジトリに変更内容をPR 2. レビュー後マージ 3.
開発環境は即時PR作成者が適用 4. 週に1回リリース担当のチームが変更を本番に適用
© GO Inc. 4 sqldef k0kubunさんが開発したSQLで冪等にDBスキーマ管理が できるソフトウェア CREATE TABLE offices
( id INT AUTO_INCREMENT PRIMARY KEY, name VARCHAR(100) NOT NULL, address VARCHAR(255), city VARCHAR(100), phone VARCHAR(50), created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP ); ALTER TABLE `offices` ADD COLUMN `city` VARCHAR(100)
© GO Inc. 5 十分に解決されていないこと 1. sqldefを利用しているリポジトリに変更内容をPR 2. レビュー後マージ 3.
開発環境は即時PR作成者が適用 4. 週に1回リリース担当のチームが変更を本番に適用
© GO Inc. 6 開発環境は即時PR作成者が適用 手順がそれなりにあり、トイルになっていた 1. bastionサーバにログイン(堅牢なログイン=手間) 2. 作業が重複しないように部全体に周知
3. 開発環境とQA環境へsqldefを実行
© GO Inc. 7 十分に解決されていないこと 1. sqldefを利用しているリポジトリに変更内容をPR 2. レビュー後マージ 3.
開発環境は即時PR作成者が適用 4. 週に1回リリース担当のチームが変更を本番に適用
© GO Inc. 8 週に1回リリース担当のチームが変更を本番に適用 変更を行いたい人と作業者が異なるのとMySQLの特性 1. MySQLのレプリケーションは ALTERで詰まる※ 2.
変更対象のテーブルの 件数が多い=ALTERが長期化する 3. 作業者がテーブルの行数を 確認する必要がある ※INSTANT DDLであれば高速に完了します
© GO Inc. 9 pt-online-schema-change(pt-osc) https://martin-son.github.io/Martin-IT-Blog/mysql/3rd%20party%20tool/pt-osc/2022/08/20/pt-osc-%EC%84%A4%EC%B9%98- %EB%B0%8F-%EC%82%AC%EC%9A%A9%EB%B2%95.htmlより引用 ALTERによるレプリケーション遅延をコントロールして スキーマ・マイグレーションを行うソフトウェア
© GO Inc. 10 運用課題を解決するalterguard作った 1. sqldefのDryRunの結果を食わせると、テーブルの行数に 応じてALTER実行するか、pt-oscするか自動で決定して実行 2. DryRunやSlack通知を備えており、自動化に特化
3. テーブルのリネームやクリーンアップも対応 a. リネーム時に新旧のテーブル行数を精査 b. 成功時のクリーンアップだけじゃなく、失敗時の クリーンアップも対応 https://github.com/pyama86/alterguard/
© GO Inc. 11 alterguardの実行風景 Slack通知でオペレーション 内容がわかるし、 かかった時間や行数も 通知することで影響がわかる
© GO Inc. 12 現在のバックエンドチームのDBマイグレーション 1. sqldefを利用しているリポジトリに変更内容をPR 2. レビュー後マージ 3.
GitHub Actionsから開発環境、QA環境に自動適用 4. 週に1回リリース担当がGitHub Actionsをキック a. 本番はDryRunの後にActionsのApproveも必須
© GO Inc. 13 残っている課題 1. pt-oscは銀の弾丸ではなく、メタデータロックを 取るのと、コピー時にレコードをロックするため、 状況によってはオンライン処理のトランザクションが 失敗したりする
2. 交通インフラは高い可用性が求められるため、タクシーの 注文に重要なテーブルは深夜に適用している →運用枯れてきたら深夜に自動実行するかも?
© GO Inc. 14 最後に 1. トイルをなくすために、ソフトウェア作った 2. pt-osc便利だけど、それでも様々あるね 3.
GO、ベンチャーから会社の規模が大きくなるタイミングで 必要になる、仕組みで解決する仕事がたくさんある
© GO Inc. 日本のモビリティ、ほんとに良くしたいし、最近はそういう意識でデススト やってます 15 私たちと一緒に 未来を作っていきませんか?