QA@IT

RailsでマスタデータをDBに登録したい

5333 PV

Railsでアプリケーション固有のマスタデータをDBに登録したいことがあります。
その際のベストプラクティスのようなものはあるのでしょうか。

seeds.rbを使う、migrationを使うなど方法はあると思いますが、その方法を選択する際の注意点などもあれば併せて教えてください。
可能であれば便利なgemなども教えてもらえると嬉しいです。

追記:

「seeds.rbを使う」という回答をいただきました。その場合、運用途中でマスタデータを追加・更新・削除したい場合はどうするのでしょうか? その際もseeds.rbを使うのでしょうか?

回答

個人的な用途や使い分けになってしまいますが、基本的にそのアプリの初期状態として必要なデータはseeds.rbで入れています。

テスト用のデータはFixtureやFactoryGirlなどを使用し、動作確認の為の開発時での一時的なデータなどは、seeds.rbにRails.env.development?などで環境ごとに記述を分けて登録したりしています。

注意点は、seeds.rbで多重実行の制御を自分で考えなければならない、という事ぐらいでしょうか。
FixtureとFactoryGirlは、チーム内やプロジェクト内でどういう時にどちらを使う、またはどちらか一方のみを使う、などの方針はあらかじめ決めて置いた方が良いとは思います。
(方針無く混在しているプロジェクトがあって、テストコードを書く際に混乱した事があるので。。)

migrationにデータを扱わせるのは良くないのかな、という感じがするので、私はあまりmigrationでデータを登録するという事はしないです。
(そこを分離する為にseeds.rbがある、と認識しています。)

編集 履歴 (0)
  • 参考になります! -

seeds.rbを使ってます。

「その場合、運用途中でマスタデータを追加・更新・削除したい場合はどうするのでしょうか?」については、削除はしたことないですし、今後もしないでしょう(マスタなので。状態変更で削除状態にして対応します)。追加、更新は普通に行なっています。

編集 履歴 (0)
  • 参考になります! -
  • 一つ質問というか確認です。
    運用中にマスタデータの追加・更新する時にはseeds.rbを更新後に本番環境で `rake db:seed` すると考えてよろしいでしょうか?
    -
  • 今のところはそうです。 -

自分もマスタデータの登録はseeds.rbでやっています。
あくまでマスタデータなので何度実行しても整合性が取れるように
実行前にデータを消すようにしています。

migrationはDBの定義を構成するものなので
データの登録には使用していません。

開発時に必要となる(チーム内で共有した方が開発が楽になりそうなデータ登録)ものは
rake taskとして登録するようにしています。

編集 履歴 (0)
  • ありがとうございます。参考になります。 -
ウォッチ

この質問への回答やコメントをメールでお知らせします。