自己紹介: 駆け出しエンジニア
はじめまして。
私はRailsで自社サービスの開発を行っている駆け出しエンジニアです。
2020年11月 | エンジニアとしての学習を開始 |
---|---|
2021年5月 | エンジニアへ転職 |
2022年3月 | 現在(10ヶ月目) |
現在、自動テスト作成の業務に取り組んでいます。
取り組んだことや気づいたことについて少しずつ記載して行きたいと思います。
実行環境: Ruby3.0 & Rails6.0
Ruby | 3.0.3 |
---|---|
Rails | 6.0.4.6 |
目標: GithubActionsでテストを並列実行する
4つのステップに分けて進めて行きます。
- テスト用DB作成の為にseed.rbを作成する ← 今回の記事
- GithubActionsで自動テストを作成する
- 自動テスト実行時にテストカバレッジの測定をする
- GithubActionsのテストを並列で実行したい (目標)
ということで、今回は1の テスト用のDB作成の為にseed.rbを作成する について記載します。
今回やること: DBの内容をseed.rbに書き出す
- テスト実行に必要なDBを作成する
seed.rb
を作る。 - 作成するseedは開発環境のDBから書き出す。
手段: gem 'seed_dump'
seed_dump
というDBからseedを作成することができるgemを使用しました。
Githubへのリンク
使用理由: DBの内容をseedに書き出したい
自社では市区町村や駅などのマスターデータを使ったテストがあり、
テスト実行の為にはマスターデータが入っているDBを用意する必要があります。
現在は、CSVからマスターデータをインポートする仕組みがあり、更新処理ではこの仕組みを使っています。
しかし、この処理は実行に時間がかかるという課題があり、
CIでテスト実行の度にCSVからインポートすることは相応しくありませんでした。
また、現状のマスターデータに合わせたseedを作成することも検討しましたが、
これらは変わるものであり、その度にseedを作り直すのは大きなコストになります。
更新されたDBのマスターデータに合わせて、素早くseedを作り直したいという点からseed_dumpを使用しました。
使用感: シンプルでわかりやすい
使い方はREADMEを参考にしました。
-
Gemfileに追加してインストール
# Gemfileに追加 gem 'seed_dump' $ bundle install
-
モデル別にseedを作成
# db配下にseedsディレクトリを作成 $ mkdir db/seeds # (例)Cityという市区町村のモデルの場合 $ rake db:seed:dump MODELS=City FILE=db/seeds/cities.rb EXCLUDE=created_at,updated_at
MODELS
で対象となるモデルを、FILE
で出力するファイルを指定しています。また、
EXCLUDE
は対象外にするカラムを指定します。
デフォルトでは[:id, :created_at, :updated_at]
が除外対象となっています。今回はseedでDBを作成する際にIDを指定したいという点から
EXCLUDE
を上書きしてIDをdump対象にしています。
(READMEに記述されていますが、モデル未指定での実行やmodels_exclude
を設定することで対象外のモデルを設定して実行することもできるそうです) -
作成されるファイルの例
db/seeds/cities.rbCity.create([ { id: 1, name: ... }, { id: 2, name: ... }, ...
バリデーションをスキップしたいなどあればお好みで
insert_all!
にしても良いかもしれません。- City.create() + City.insert_all!()
-
seed.rbで読み込む
db/seed.rb# 作成したファイル名を並べます %w[ cities ... ].each do |table_name| path = Rails.root.join("db/seeds", table_name + ".rb") raise StandardError "#{table_name}.rbが見つかりません" unless File.exist?(path) require path end
-
実行
$ rails db:seed
まとめ: db:seed
でテストに必要なDBを作成
rails db:seed
で空のDBからテストに必要なデータを持ったDBを作成することができるようになりました。
次回: GithubActionsを使った自動化
開発環境でテスト用のDBを用意してテストを実行することができるようになりましたので、
次回はGithubActionsを使用した自動テストへの取り組みについて記載したいと思います。
最後まで読んで頂きありがとうございました。