【Railsエンジニア集合!】身近だけど知らないtoBサービスの裏側をのぞく で使用したスライドです。
https://estie.connpass.com/event/255928/
migrationのテストについての試行錯誤2022/08/25【Railsエンジニア集合!】身近だけど知らないtoBサービスの裏側をのぞくtanishi@tanishi345
View Slide
11. スキーマ変更を伴うデータ移行のテスト2. テスト方法の検討1. スキーマ変更とデータ移行を分けるパターン2. スキーマ変更とデータ移行を分けないパターン3. やってみてAgenda
2• たにし(大西 諒)@tanishi345• SWE@estie• TypeScriptが好き• テストコードや設計について考えるのが好き• estie proの開発• Vue / Railstanishi345
スキーマ変更を伴うデータ移行のテスト
4スキーマ変更を伴うデータ移行とは
5スキーマ変更を伴うデータ移行とは仕様変更やモデリングの改善を目的としたスキーマ変更
6スキーマ変更を伴うデータ移行の具体的な例1. テーブルの作成2. データの移行3. カラムの削除
7スキーマ変更を伴うデータ移行の具体的な例1. テーブルの作成2. データの移行3. カラムの削除
8何故難しかったのか20220823090000 20220824090000 20220825090000migrateのテストがしたいrollbackのテストがしたい
マイグレーションとデータ移行を分けるパターン
10マイグレーションとデータ移行を分けるパターンマイグレーションとデータ移行を分けるほうがいいのでは?
11マイグレーションとデータ移行を分けるパターン• これならテストしやすい?
12マイグレーションとデータ移行を分けるパターン• これならテストしやすい?• そんなことはなかった
13マイグレーションとデータ移行を分けるパターン• これならテストしやすい?• そんなことはなかった• 最新のマイグレーションにする必要があるため
14マイグレーションとデータ移行をp-r単位で分けるパターン1つ目のp-rテストコード
15マイグレーションとデータ移行をp-r単位で分けるパターン2つ目のp-rテストコードと該当スクリプトの削除
16マイグレーションとデータ移行を分けてみた結果• わかったこと• p-r単位で分ける必要が出てくる• データ移行後は削除するので経緯がわかりづらい• 久しぶりに開発に参加した人などが困るケースがある• DBのスキーマバージョンを固定してテストしたい…
17その後の調査• 調べてみると• GitLabは自前でライブラリを作ってこの辺りをやっていそう• https://gitlab-docs.creationline.com/ee/development/testing_guide/testing_migrations_guide.html• 更に調べてみる
マイグレーションとデータ移行を分けないパターン
19マイグレーションとデータ移行を分けないパターン• テストのセットアップタイミングでスキーマのバージョンを固定したい
20どういうことか20220823090000 20220824090000 20220825090000migrateのテストがしたいrollbackのテストがしたい
21どういうことか20220823090000 20220824090000 20220825090000migrateのテストがしたいrollbackのテストがしたい
22実際のテストコード
23実際のテストコード(セットアップ)
24実際のテストコード(テストしたいメソッド)
25実際のテストコード(値の検証)
26まとめ• 思ったより簡単にテスト時にマイグレーションのバージョンを固定することができた• おかげでスキーマ変更しながらのデータ移行もテストできる• スキーマが正しいかはdb/schema.rbで担保• データ移行が正しいかはテストで担保
27その他の課題• データ移行とアプリケーションコードの反映タイミングをどうするか• データ移行を先にやると既存カラムを更新された場合に都合が悪い• estieでは夜ユーザーが少ないタイミングを見計らってやっています
28最後• 話足りないことはまだあります!• 色々情報交換したい人• MeetyのURLです→