🎄teratailクリスマスプレゼントキャンペーン2024🎄』開催中!

\teratail特別グッズやAmazonギフトカード最大2,000円分が当たる!/

詳細はこちら
Ruby

Rubyはプログラミング言語のひとつで、オープンソース、オブジェクト指向のプログラミング開発に対応しています。

Ruby on Rails 3

Ruby on Rails3はRubyによって書かれたオープンソースのウェブフレームワークです。Ruby on Railsは「設定より規約」の原則に従っており、効率的に作業を行うために再開発を行う必要をなくしてくれます。

Ruby on Rails

Ruby on Railsは、オープンソースのWebアプリケーションフレームワークです。「同じことを繰り返さない」というRailsの基本理念のもと、他のフレームワークより少ないコードで簡単に開発できるよう設計されています。

Ruby on Rails 4

Ruby on Rails4はRubyによって書かれたオープンソースのウェブフレームワークです。 Ruby on Railsは「設定より規約」の原則に従っており、効率的に作業を行うために再開発を行う必要をなくしてくれます。

Q&A

解決済

1回答

5643閲覧

Railsでfixtureとseedの違いについて教えてください

komachi

総合スコア94

Ruby

Rubyはプログラミング言語のひとつで、オープンソース、オブジェクト指向のプログラミング開発に対応しています。

Ruby on Rails 3

Ruby on Rails3はRubyによって書かれたオープンソースのウェブフレームワークです。Ruby on Railsは「設定より規約」の原則に従っており、効率的に作業を行うために再開発を行う必要をなくしてくれます。

Ruby on Rails

Ruby on Railsは、オープンソースのWebアプリケーションフレームワークです。「同じことを繰り返さない」というRailsの基本理念のもと、他のフレームワークより少ないコードで簡単に開発できるよう設計されています。

Ruby on Rails 4

Ruby on Rails4はRubyによって書かれたオープンソースのウェブフレームワークです。 Ruby on Railsは「設定より規約」の原則に従っており、効率的に作業を行うために再開発を行う必要をなくしてくれます。

0グッド

4クリップ

投稿2017/07/09 13:33

Railsのfixtureとseedについて4点質問です。

(1)
DBにデータを投入する仕組みとしてfixtureとseedがあると思いますが、これらの違いは何でしょうか。

(2)
DBはdevelopmentとtestと本番用の3つあると思うのですが、上述のfixtureとseedでは、3つのうちどれが使われるのでしょうか。

(3)
コマンドrails db:migrateを打てばDBのテーブルが作成されると思いますが、このコマンドではdevelopment用のDBが作成されているという認識で合っていますか。もし、test用のDBを作りたかったら、rails db:migrate RAILS_ENV=testとすればOKでしょうか。

(4)
上述の私の認識が合っているとして、rails db:migrate RAILS_ENV=testで作られたtest用のDBにfixtureもしくはseedを適用するにはどうすればよいのでしょうか。

よろしくおねがいします。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

ベストアンサー

こんにちは。
わたしもまだ学習しながらなのですが、わかる範囲で書いてみますね。

fixturesとseedに関しては、こちらの記事にとても良く書かれていましたので、リンクを貼っておきます。


(1) fixtureとseedの違い

fixtures:

どちらもDBにデータを投入するための仕組みですが、fixturesは主にテストに使う場合のデータ登録用に使います。(異なる現場もあるかもしれませんが)
Railsに標準でついてくるminitestと組み合わせて利用します。
(こちらも全ての現場が使うわけではなくて、わたしの場合はtest目的では、fixturesよりもFactoryGirlを使っています)

seed:

こちらは、マスタデータを初期登録したりするのに使います。
たとえば、部署一覧(部署マスタ)、郵便番号一覧、勘定科目一覧、カテゴリ一覧とか。
(seedも必ずしも使われるわけではないです)


(2) いつ使う?

fixturesはテスト目的なので、RAILS_ENV=test の時。
seedはアプリケーションの前提となるマスタデータ登録が目的なので、test / development / productionどの場合でも使われる可能性があります。
ただし、seedは一切使わない現場もあるので、必須ではないです。
(DB専門の担当者がいる現場では、csvを別に用意してSQLやDB管理用のツールでロードする場合のほうが多いかも?)


(3)db:migrate

環境変数 RAILS_ENV をもとにdatabase.yml に記載したどのDBをターゲットにするかが決まります。
指定がなければdevelopmentが対象です。


(4) fixtures または seed の適用方法

Railsでテーブル作成・変更やテスト実行のような作業は、rakeタスクとして用意されています。

$ bundle exec rails -T (または rails -T / rake -TでもOK) とコマンドを打つと、標準で利用できるタスクの一覧が表示されます。

rails db:migrate は対象のDBへテーブルを追加変更削除するコマンドです。

rails -T の結果に、以下2つがあったと思います。
それぞれこうなります。

  • rails db:fixtures:load (こちらがfixturesのデータのロード)
  • rails db:seed (こちらがseedのデータのロード)

test用のDBに適用するのであれば、

$ export RAILS_ENV=test # まず先に環境変数を切り替え、対象をtestに向ける
$ rails db:migrate # RAILS_ENV=testなのでテストDBにmigration
$ rails db:fixtures:load # ひきつづきテストDBにfixturesのデータをロード
$ rails db:seed # seedのデータも必要ならseedも実行

こんな感じです。

投稿2017/07/11 22:13

suama

総合スコア1997

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

komachi

2017/07/12 00:58

ありがとうございます! 詳しく書いてくださり勉強になります。 (4)ですが、minitestでテストするとき、rails test コマンドを打ってテストしてるのですが、その場合は事前にtest DBにデータ投入してなくても正常に機能します。 (つまり事前にrails do:fixtures:loadしなくても、テストできます、という意味です。) これは、テスト実行時はfixtureが自動的に実行されているということでしょうか。 まだ回答を募集したいのでクローズせずにおきます。
suama

2017/07/12 02:06

こんにちは。 > テスト実行時はfixtureが自動的に実行されているということでしょうか。 はい。 rails test でminitestを実行する時は、自動的にfixtures/以下が読み込まれます。 test/test_helper.rb に fixtures :all との記載があると思いますが、こちらがテスト実施の際にfixtures/ のファイルをロードしています。 こちらも参考にしてくださいね。 https://railsguides.jp/testing.html (Rails テスティングガイド)
komachi

2017/07/12 06:03

テストヘルパーの記載は初めて見ました。なるほど、確かに該当の記載がありました。ありがとうございます。???? 参考サイトも読ませていただきます。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.36%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問