Upgrade to PRO for Only $50/Year—Limited-Time Offer! 🔥

SQLだけでマイグレーションしたい!

Avatar for MakKi MakKi
December 19, 2025

 SQLだけでマイグレーションしたい!

MyNA望年LT大会2025

Avatar for MakKi

MakKi

December 19, 2025
Tweet

More Decks by MakKi

Other Decks in Technology

Transcript

  1. はじめまして • 牧内大輔(MakKi) ◦ @makki_d ◦ makiuchi-d • KLab株式会社 ◦

    スマホゲーム、主にサーバサイドや同期通信まわり ◦ DBはだいたいAurora MySQL • OSS ◦ gozxing: バーコードQRコードリーダーライター ◦ arelo: 自動リロードユーティリティ ◦ EMLauncher: スマホでバッグアプリ配信 ◦ WSNet2: スマホゲーム同期通信ライブラリ
  2. 可逆性チェック:スキーマ不一致 • テーブルの構造の一致しない部分を Diff表示 $ migy check applying: 000000_init.all.sql applying:

    000010_create.up.sql ---- up/down applying: 000020_alter_add.up.sql applying: 000020_alter_add.down.sql checking... create table "table1" differs: ... `val` text NOT NULL DEFAULT '', + `val2` int DEFAULT '0', PRIMARY KEY (`id`) ... check failed
  3. 可逆性チェック:レコード不一致 • レコードの差分も検出(特定のカラムの違いは無視する指定も可能) $ migy check applying: 000030_insert.all.sql ---- up/down

    applying: 000040_alter_drop.up.sql applying: 000040_alter_drop.down.sql checking... records in "table1" differs: (1, 'aaa', 10) -(2, 'bbb', 20) -(3, 'ccc', 30) +(2, 'aaa', 20) +(3, 'aaa', 30) check failed
  4. SQLだけで完結する履歴管理 • ボイラープレート生成 ◦ Up: 履歴テーブルへの INSERT文 ◦ Down: 履歴の存在チェックと

    DELETE文 • 本番サーバにツール不要 ◦ migyで列挙したSQLファイルをmysqlコマンドに流し込む ▪ .mylogin.cnf を活用できる -- Generated by migy (https://github.com/makiuchi-d/migy) INSERT INTO _migrations (id, title, applied) VALUES (10, 'user_table', now()); -- Write your forward migration SQL statements below. -- Generated by migy (https://github.com/makiuchi-d/migy) CALL _migration_exists(10); DELETE FROM _migrations WHERE id = 10; -- Write your rollback SQL statements below. user_table.up.sql user_table.down.sql