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