Slide 1

Slide 1 text

Go製のマイグレーションツールの git-schemalex の紹介と運用方法 1 golang.tokyo #38 2025/03/25 (Tue) @mwudo / 岸田慎之介

Slide 2

Slide 2 text

2 自己紹介 ●  SO Technologies 株式会社 ● Go言語でAPI/バッチ処理の開発を主に行いつつ 問い合わせの調査も行っている グループ横断の取り組みで使うアプリの開発にも従事 ●  毎週ボルダリングに通ってる 岸田 慎之介 @mwudo

Slide 3

Slide 3 text

話すこと 3 使用しているマイグレーションツールの紹介と どのように業務で運用を行っているのか

Slide 4

Slide 4 text

Go の代表的なマイグレーションツール by Gemini 4 golang-migrate goose Atlas sqldef ● シンプルなCLIツール ● 多くのデータベースドライバーに対応 ● Go製のデータベースマイグレーションツール ● シンプルなコマンドラインインターフェース ● 宣言的なスキーマ管理が可能なツール ● バージョン管理と理想状態宣言による反映 ● Go製のデータベーススキーマ管理ツール ● 宣言的なスキーマ定義に基づいたマイグレーション ● 学習コストの低い生SQLでスキーマ管理

Slide 5

Slide 5 text

git-schemalex 5 git-schemalex を聞いたことありますか?

Slide 6

Slide 6 text

6 git-schemalex

Slide 7

Slide 7 text

7 git-schemalex 弊社の記事

Slide 8

Slide 8 text

8 git-schemalex 弊社の記事 古い記事

Slide 9

Slide 9 text

9 git-schemalex Gitで管理するためのデータベース移行ツール DB のスキーマの変更履歴を Git で管理 Git のコミット間のスキーマ差分から DDL を生成 対応しているエンジンは MySQL のみ

Slide 10

Slide 10 text

操作例 10 以下のテーブルを作成を想定

Slide 11

Slide 11 text

操作例 11 テーブルが作成されて、コミット値を管理するテーブルの自動で作成される

Slide 12

Slide 12 text

操作例 12 作成したテーブルに対して以下の変更を行う

Slide 13

Slide 13 text

操作例 13 コミット値を比較して差分を埋めるクエリが発行される

Slide 14

Slide 14 text

14 メリット/デメリット メリット デメリット ● 1つのスキーマファイルだけ管理すれば良い ● ALTER文を自力で書く必要がないため ミスが減り、レビューコストも下がる ● MySQL しか対応していない ○ そもそもメンテがされていない ● 意図しない DDL が発行されないように 差分に気をつける必要がある

Slide 15

Slide 15 text

スキーマを管理しているファイルを変更するPRでトリガー 15 差分を気をつける工夫・流れ git-schemalex を用いてクエリを取得 クエリを PR のコメントに記載 1 2 3

Slide 16

Slide 16 text

16 差分を気をつける工夫

Slide 17

Slide 17 text

17 差分を気をつける工夫

Slide 18

Slide 18 text

差分を気をつける工夫 PRのコメントとして表示される 18

Slide 19

Slide 19 text

注意 19 全くメンテナンスがされていない 対応しているエンジンは MySQL のみ

Slide 20

Slide 20 text

参考記事 ❏ git-schemalex ❏ schemalexを使ったMySQLのマイグレーション 20