$30 off During Our Annual Pro Sale. View Details »

20220825_uuuo-estie-rails

tanishi
August 26, 2022

 20220825_uuuo-estie-rails

【Railsエンジニア集合!】身近だけど知らないtoBサービスの裏側をのぞく
で使用したスライドです。

https://estie.connpass.com/event/255928/

tanishi

August 26, 2022
Tweet

More Decks by tanishi

Other Decks in Technology

Transcript

  1. migrationのテストについての試行錯誤
    2022/08/25
    【Railsエンジニア集合!】
    身近だけど知らないtoBサービスの裏側をのぞく
    tanishi@tanishi345

    View Slide

  2. 1
    1. スキーマ変更を伴うデータ移行のテスト
    2. テスト方法の検討
    1. スキーマ変更とデータ移行を分けるパターン
    2. スキーマ変更とデータ移行を分けないパターン
    3. やってみて
    Agenda

    View Slide

  3. 2
    • たにし(大西 諒)@tanishi345
    • SWE@estie
    • TypeScriptが好き
    • テストコードや設計について考えるのが好き
    • estie proの開発
    • Vue / Rails
    tanishi345

    View Slide

  4. スキーマ変更を伴うデータ移行のテスト

    View Slide

  5. 4
    スキーマ変更を伴うデータ移行とは

    View Slide

  6. 5
    スキーマ変更を伴うデータ移行とは
    仕様変更やモデリングの改善を目的としたスキーマ変更

    View Slide

  7. 6
    スキーマ変更を伴うデータ移行の具体的な例
    1. テーブルの作成
    2. データの移行
    3. カラムの削除

    View Slide

  8. 7
    スキーマ変更を伴うデータ移行の具体的な例
    1. テーブルの作成
    2. データの移行
    3. カラムの削除

    View Slide

  9. 8
    何故難しかったのか
    20220823090000 20220824090000 20220825090000
    migrateのテストがしたい
    rollbackのテストがしたい

    View Slide

  10. マイグレーションとデータ移行を分けるパターン

    View Slide

  11. 10
    マイグレーションとデータ移行を分けるパターン
    マイグレーションと
    データ移行を分けるほうがいいのでは?

    View Slide

  12. 11
    マイグレーションとデータ移行を分けるパターン
    • これならテストしやすい?

    View Slide

  13. 12
    マイグレーションとデータ移行を分けるパターン
    • これならテストしやすい?
    • そんなことはなかった

    View Slide

  14. 13
    マイグレーションとデータ移行を分けるパターン
    • これならテストしやすい?
    • そんなことはなかった
    • 最新のマイグレーションにする
    必要があるため

    View Slide

  15. 14
    マイグレーションとデータ移行をp-r単位で分けるパターン
    1つ目のp-r
    テストコード

    View Slide

  16. 15
    マイグレーションとデータ移行をp-r単位で分けるパターン
    2つ目のp-r
    テストコードと該当スクリプトの削除

    View Slide

  17. 16
    マイグレーションとデータ移行を分けてみた結果
    • わかったこと
    • p-r単位で分ける必要が出てくる
    • データ移行後は削除するので経緯がわかりづらい
    • 久しぶりに開発に参加した人などが困るケースがある
    • DBのスキーマバージョンを固定してテストしたい…

    View Slide

  18. 17
    その後の調査
    • 調べてみると
    • GitLabは自前でライブラリを作ってこの辺りをやっていそう
    • https://gitlab-
    docs.creationline.com/ee/development/testing_guide/testing_migrations_g
    uide.html
    • 更に調べてみる

    View Slide

  19. マイグレーションとデータ移行を分けないパターン

    View Slide

  20. 19
    マイグレーションとデータ移行を分けないパターン
    • テストのセットアップタイミングで
    スキーマのバージョンを固定したい

    View Slide

  21. 20
    どういうことか
    20220823090000 20220824090000 20220825090000
    migrateのテストがしたい
    rollbackのテストがしたい

    View Slide

  22. 21
    どういうことか
    20220823090000 20220824090000 20220825090000
    migrateのテストがしたい
    rollbackのテストがしたい

    View Slide

  23. 22
    実際のテストコード

    View Slide

  24. 23
    実際のテストコード(セットアップ)

    View Slide

  25. 24
    実際のテストコード(テストしたいメソッド)

    View Slide

  26. 25
    実際のテストコード(値の検証)

    View Slide

  27. 26
    まとめ
    • 思ったより簡単にテスト時に
    マイグレーションのバージョンを固定することができた
    • おかげでスキーマ変更しながらのデータ移行もテストできる
    • スキーマが正しいかはdb/schema.rbで担保
    • データ移行が正しいかはテストで担保

    View Slide

  28. 27
    その他の課題
    • データ移行とアプリケーションコードの反映タイミングをどうするか
    • データ移行を先にやると既存カラムを更新された場合に都合が悪い
    • estieでは夜ユーザーが少ないタイミングを見計らってやっています

    View Slide

  29. 28
    最後
    • 話足りないことはまだあります!
    • 色々情報交換したい人
    • MeetyのURLです→

    View Slide