SlideShare a Scribd company logo
べき等データベーススキーマ
マイグレーションツール
migu
mercari.go #15
2020-02-05
自己紹介
● @naoina (Naoya Inada)
● Backend engineer at Merpay
https://github.com/naoina
https://twitter.com/naoina
データベーススキーマのマイグレーションどうやってますか?
● bitbucket.org/liamstask/goose / pressly/goose
● golang-migrate/migrate
● rubenv/sql-migrate
● 手作業による温かみのあるALTER TABLE
よくあるマイグレーションツール
よくあるマイグレーションツール
マイグレーション用ファイルを作成
よくあるマイグレーションツール
マイグレーション用の SQLを書く
よくあるマイグレーションツール
適用する
何が問題か?
● 最新に追いつくまでに時間がかかる
○ 最初からひとつひとつマイグレーションしていくため
○ 最新のスキーマをダンプしたものを初期化に使ったりして時間を節約する
○ 途中までマイグレーションしていたら?
● 人力でマイグレーション用SQLを書く必要がある
○ バージョン管理があるだけの温かみのある手動 ALTER TABLE
○ 柔軟性はある
○ UP/DOWNを間違いなく書けますか?
● データベースのテーブルでバージョン管理
○ マイグレーションをどこまで行ったかを管理用テーブルで把握する
○ 実際のテーブルスキーマとバージョン情報の間で不整合が生まれてしまったら?
■ 開発時など頻繁にスキーマを変更するときにめっちゃ面倒・・・
実際のテーブルと手元の環境のスキーマの差分をとって
マイグレーション用のSQLを生成すればいいのでは???
naoina/migu
Miguとは
● https://github.com/naoina/migu
● べき等データベーススキーママイグレーションツール
○ 何度実行しても結果は同じ
● Go製
○ コマンドまたはライブラリとして使える
○ mercari.goなので
● MySQL / MariaDB / Cloud Spanner対応
○ Merpayで使われているデータベースは Cloud Spanner
○ PostgreSQLなどで使いたい人がいればぜひ Pull-Requestをください
● GoのstructからDDLを生成する
○ モデルからスキーマを生成できる
■ スキーマからモデルの生成は cloudspannerecosystem/yo や daichirata/hammer がある
○ 逆も可
Miguをつかったマイグレーション(CLI)
Miguをつかったマイグレーション(CLI)
アノテーションをつける
Miguをつかったマイグレーション(CLI)
カラムの設定をstruct tagで指定
(ここでは主キーを指定 )
Miguをつかったマイグレーション(CLI)
ディレクトリも指定可
Miguをつかったマイグレーション(CLI)
変更がないので2度目は何も起こらない
Miguをつかったマイグレーション(CLI)
型をintからuintに変更
Miguをつかったマイグレーション(CLI)
型をintからuintに変更したことで
UNSIGNEDに
Miguをつかったマイグレーション(ライブラリ)
GoDoc: https://pkg.go.dev/github.com/naoina/migu
Miguをつかったマイグレーション(ライブラリ)
GoDoc: https://pkg.go.dev/github.com/naoina/migu
Miguをつかったマイグレーション
● 最新に追いつくまでに時間がかからない
○ 現在の手元のスキーマとデータベースとの差分からマイグレーション用 SQLを生成するので1回の
マイグレーションで済む
● 人力でマイグレーション用SQLを書く必要がない
○ ツールで自動生成
● データベースのテーブルでバージョン管理しなくていい
○ スキーマがどんな状態であっても差分からマイグレーション用 SQLを生成するのでバージョン管理
不要
○ 不整合も起きない
まとめ
● べき等(宣言的?)マイグレーションツールというものがある
● そろそろマイグレーションも次のパラダイムに移ってもいいのではないか?
● べき等はいいぞ
● https://github.com/naoina/migu

More Related Content

PDF
WebSocket / WebRTCの技術紹介
PPTX
「関心の分離」と「疎結合」 ソフトウェアアーキテクチャのひとかけら
PPTX
データ履歴管理のためのテンポラルデータモデルとReladomoの紹介 #jjug_ccc #ccc_g3
PDF
ドメイン駆動設計のための Spring の上手な使い方
PDF
世界最強のソフトウェアアーキテクト
PDF
オンラインゲームの仕組みと工夫
PDF
JavaからScala、そしてClojureへ: 実務で活きる関数型プログラミング
PDF
フロー効率性とリソース効率性について #xpjug
WebSocket / WebRTCの技術紹介
「関心の分離」と「疎結合」 ソフトウェアアーキテクチャのひとかけら
データ履歴管理のためのテンポラルデータモデルとReladomoの紹介 #jjug_ccc #ccc_g3
ドメイン駆動設計のための Spring の上手な使い方
世界最強のソフトウェアアーキテクト
オンラインゲームの仕組みと工夫
JavaからScala、そしてClojureへ: 実務で活きる関数型プログラミング
フロー効率性とリソース効率性について #xpjug

What's hot (20)

PDF
組織にテストを書く文化を根付かせる戦略と戦術
PDF
まじめに!できる!LT
PDF
フロー効率性とリソース効率性、再入門 #devlove #devkan
PDF
インテルMEの秘密 - チップセットに隠されたコードと、それが一体何をするかを見出す方法 - by イゴール・スコチンスキー - Igor Skochinsky
PDF
WebSocketのキホン
PDF
LogbackからLog4j 2への移行によるアプリケーションのスループット改善 ( JJUG CCC 2021 Fall )
PPTX
ぱぱっと理解するSpring Cloudの基本
PDF
TDD のこころ
PDF
社内のマニュアルをSphinxで作ってみた
PPTX
インセプションデッキの紹介
PDF
あなたはPO?PM?PdM?PjM?
PDF
WebRTCの技術解説 第二版 公開版 完全版
PDF
AWSのログ管理ベストプラクティス
PDF
【TECH×GAME COLLEGE#32】ゼロからリアルタイムサーバーを作るまで
PDF
Elasticsearchを使うときの注意点 公開用スライド
PDF
「UXデザインとは」からはじめる「本流」のUXデザインはじめの一歩 | UXデザイン基礎セミナー 第1回
PPTX
はじめての datadog
PDF
Docker入門: コンテナ型仮想化技術の仕組みと使い方
PPTX
initとプロセス再起動
PPTX
SPAセキュリティ入門~PHP Conference Japan 2021
組織にテストを書く文化を根付かせる戦略と戦術
まじめに!できる!LT
フロー効率性とリソース効率性、再入門 #devlove #devkan
インテルMEの秘密 - チップセットに隠されたコードと、それが一体何をするかを見出す方法 - by イゴール・スコチンスキー - Igor Skochinsky
WebSocketのキホン
LogbackからLog4j 2への移行によるアプリケーションのスループット改善 ( JJUG CCC 2021 Fall )
ぱぱっと理解するSpring Cloudの基本
TDD のこころ
社内のマニュアルをSphinxで作ってみた
インセプションデッキの紹介
あなたはPO?PM?PdM?PjM?
WebRTCの技術解説 第二版 公開版 完全版
AWSのログ管理ベストプラクティス
【TECH×GAME COLLEGE#32】ゼロからリアルタイムサーバーを作るまで
Elasticsearchを使うときの注意点 公開用スライド
「UXデザインとは」からはじめる「本流」のUXデザインはじめの一歩 | UXデザイン基礎セミナー 第1回
はじめての datadog
Docker入門: コンテナ型仮想化技術の仕組みと使い方
initとプロセス再起動
SPAセキュリティ入門~PHP Conference Japan 2021
Ad

More from Naoya Inada (8)

PDF
Tokyo Otaku Mode での PayPal 活用事例
PDF
シンプルなシステム構成フレームワークalnair
PDF
kyotovim#1
PDF
HTML5-pronama-study
PDF
dvcs-kyoto
PDF
rucs_vim LT
PDF
Python Kyoto study LT
PDF
Python Kyoto study
Tokyo Otaku Mode での PayPal 活用事例
シンプルなシステム構成フレームワークalnair
kyotovim#1
HTML5-pronama-study
dvcs-kyoto
rucs_vim LT
Python Kyoto study LT
Python Kyoto study
Ad

べき等データベースマイグレーションツールmigu