Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Speaker Deck
PRO
Sign in
Sign up for free
20220825_uuuo-estie-rails
tanishi
August 26, 2022
Technology
1
370
20220825_uuuo-estie-rails
【Railsエンジニア集合!】身近だけど知らないtoBサービスの裏側をのぞく
で使用したスライドです。
https://estie.connpass.com/event/255928/
tanishi
August 26, 2022
Tweet
Share
More Decks by tanishi
See All by tanishi
インフラエンジニアが教えるJSの型
tanishi
0
110
Other Decks in Technology
See All in Technology
WebLogic Server for OCI 概要
oracle4engineer
PRO
3
880
CES_2023_FleetWise_demo.pdf
sparkgene
0
110
02_プロトタイピングの進め方
kouzoukaikaku
0
420
Pentesting Password Reset Functionality
anugrahsr
0
450
Airdrop for Open Source Projects
epicsdao
0
690
Stripe / Okta Customer Identity Cloud(旧Auth0) の採用に至った理由 〜モリサワの SaaS 戦略〜
tomuro
0
130
開発者と協働できるメトリクスダッシュボードを作ろう!/SRE Lounge 2023
lmi
2
450
目指せCoverage100%! AutoScale環境におけるSavings Plans購入戦略 / JAWS-UG_SRE_Coverage
taishin
0
500
PCL (Point Cloud Library)の基本となぜ点群処理か_2023年_第2版.pdf
cvmlexpertguide
0
160
グローバルチームことはじめ / Bootstrapping a global team
tasshi
1
690
Hatena Engineer Seminar #23 「チームとプロダクトを育てる Mackerel 開発合宿」
arthur1
0
460
Deep Neural Networkの共同学習
hf149
0
250
Featured
See All Featured
ReactJS: Keep Simple. Everything can be a component!
pedronauck
657
120k
How To Stay Up To Date on Web Technology
chriscoyier
779
250k
A Modern Web Designer's Workflow
chriscoyier
689
180k
Scaling GitHub
holman
453
140k
Pencils Down: Stop Designing & Start Developing
hursman
114
10k
Fight the Zombie Pattern Library - RWD Summit 2016
marcelosomers
227
16k
How New CSS Is Changing Everything About Graphic Design on the Web
jensimmons
214
12k
Rebuilding a faster, lazier Slack
samanthasiow
69
7.5k
JavaScript: Past, Present, and Future - NDC Porto 2020
reverentgeek
38
3.6k
Building a Scalable Design System with Sketch
lauravandoore
451
31k
I Don’t Have Time: Getting Over the Fear to Launch Your Podcast
jcasabona
13
1.1k
Side Projects
sachag
451
37k
Transcript
migrationのテストについての試行錯誤 2022/08/25 【Railsエンジニア集合!】 身近だけど知らないtoBサービスの裏側をのぞく
[email protected]
1 1. スキーマ変更を伴うデータ移行のテスト 2. テスト方法の検討 1. スキーマ変更とデータ移行を分けるパターン 2. スキーマ変更とデータ移行を分けないパターン 3.
やってみて Agenda
2 • たにし(大西 諒)@tanishi345 •
[email protected]
• TypeScriptが好き • テストコードや設計について考えるのが好き
• estie proの開発 • Vue / Rails tanishi345
スキーマ変更を伴うデータ移行のテスト
4 スキーマ変更を伴うデータ移行とは
5 スキーマ変更を伴うデータ移行とは 仕様変更やモデリングの改善を目的としたスキーマ変更
6 スキーマ変更を伴うデータ移行の具体的な例 1. テーブルの作成 2. データの移行 3. カラムの削除
7 スキーマ変更を伴うデータ移行の具体的な例 1. テーブルの作成 2. データの移行 3. カラムの削除
8 何故難しかったのか 20220823090000 20220824090000 20220825090000 migrateのテストがしたい 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_g uide.html
• 更に調べてみる
マイグレーションとデータ移行を分けないパターン
19 マイグレーションとデータ移行を分けないパターン • テストのセットアップタイミングで スキーマのバージョンを固定したい
20 どういうことか 20220823090000 20220824090000 20220825090000 migrateのテストがしたい rollbackのテストがしたい
21 どういうことか 20220823090000 20220824090000 20220825090000 migrateのテストがしたい rollbackのテストがしたい
22 実際のテストコード
23 実際のテストコード(セットアップ)
24 実際のテストコード(テストしたいメソッド)
25 実際のテストコード(値の検証)
26 まとめ • 思ったより簡単にテスト時に マイグレーションのバージョンを固定することができた • おかげでスキーマ変更しながらのデータ移行もテストできる • スキーマが正しいかはdb/schema.rbで担保 •
データ移行が正しいかはテストで担保
27 その他の課題 • データ移行とアプリケーションコードの反映タイミングをどうするか • データ移行を先にやると既存カラムを更新された場合に都合が悪い • estieでは夜ユーザーが少ないタイミングを見計らってやっています
28 最後 • 話足りないことはまだあります! • 色々情報交換したい人 • MeetyのURLです→