LoginSignup
7
6

More than 3 years have passed since last update.

開発環境別にseed ファイルを分けて管理する

Posted at

はじめに

アプリの初期データ用のseed ファイルを開発環境別に管理する必要があったので備忘録です。

環境

  • macOS 10.15.6
  • Ruby 2.5.7
  • Rails 5.2.3
  • rspec-rails 4.0.1
  • capybara 3.32.2

参考URL

https://pikawaka.com/rails/env
https://prokyou.com/rails/seeds/
https://qiita.com/kimihito_/items/753390a5fe42a41b1d60
https://qiita.com/mogya/items/76430e32ffca1ef93f27

目標

  • 開発環境別でseed ファイルを管理できる
  • seed ファイルの修正後に環境別に初期データを追加/削除ができる

実装

1. seeds ディレクトリを作成

通常のRails アプリでのseed ファイルのディレクトリはdb/seeds.rb です。
これを以下のように修正します。

#修正前
db/seeds.rb
#修正後
db/seeds/development.rb #追加
db/seeds/test.rb #追加
db/seeds/production.rb #追加
db/seeds.rb
  • seeds ディレクトリの中に環境別のseed ファイルを作成
  • 元々あったseeds.rb の中身は現時点ではそのままでok

2. 環境別にseed ファイルを作成

元々あったseeds.rb の中身を元にして各環境別に初期データ用の処理を追加します。
私の場合はCSV を使った初期データをテスト環境でも使いたかったのでtest.rb に下記を追加しました。
development.rb は元々あったseeds.rb を複製しました。

test.rb
#Country CSV import
require "csv"

CSV.foreach("country.csv", headers: true) do |row|
  Country.create!(
    country_name: row["国・地域名"],
    region: row["場所"]
  )
end

3. seeds.rb に読み込み処理を追加

環境別にseed ファイルが準備できたので各ファイルの読み込み処理をseeds.rb に追加します。
初期データ追加用の処理は各環境別に分けているはずなので削除してokです。

seeds.rb
#環境別にseed ファイルを読み込む
load(Rails.root.join("db", "seeds", "#{Rails.env.downcase}.rb"))

#元の初期データ追加の処理は削除

seed ファイルの読み込みディレクトリを指定しています。

seeds.rb
#seeds.rb の読み込み処理の詳細
load(Rails.root.join("親ディレクトリ", "子ディレクトリ", "#{開発環境名.downcase}.rb))

4. 環境別にseed ファイルで初期データを導入

環境別にseed ファイルを読み込んで初期データを導入します。
初期データを削除してseed ファイルを読み込みます。

# development 環境の初期データ削除
$ rails db:migrate:reset

# development 環境の初期データ追加
$ rails db:seed

# test 環境の初期データ削除
$ rails db:migrate:reset RAILS_ENV=test

# test 環境の初期データ追加
$ rails db:seed RAILS_ENV=test

5. コンソールで導入されたデータの確認

環境別にコンソールを立ち上げて初期データの件数を確認します。
-e オプションをつける事で環境別にコンソールを立ち上げます。

#development 環境で初期データ件数の確認
$ rails console
Loading development environment (Rails 5.2.3)
> Country.count
249

#test 環境で初期データ件数の確認
$ rails console -e test
Loading test environment (Rails 5.2.3)
> Country.count
249

学び

  • 環境別にseed ファイルを用意する事で初期データの管理が楽になった
  • テスト用の初期データにseed を使うのは一部だけにして、テストに必要なデータはなるべくfixture を使う方が良さそうです
7
6
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
7
6