seed-fuでシードファイルをもっと便利に

【結論】

Railsにはrake db:seedで初期データを投入する方法が標準で備わっている

・しかし、環境毎に内容を分けたり、一度作成したデータは投入しない様にしたりといった細かい調整が面倒

seed-fuというgemを用いれば、それらの設定を簡単に行える

【目次】

【本題】

初期データの管理について

Railsにはrake db:seedで初期データを投入する方法が標準で備わっています。

しかし、下記の様に、細かく設定を行おうとすると、少し不便です。

  • 環境ごとにデータの内容を変える

  • 既に作成されたデータは再投入しない様にする

  • デプロイと一緒に初期データを投入したい

そんな時に役立つのがseed-fuです。

これは、シードファイルの管理を容易に行う為のgemです。

導入方法

まずはgem本体をインストールします。

gem 'seed-fu'

環境毎に読み込むシードファイルを分ける

次にdb/fixturesディレクトリ配下にseedファイルを作成します。

この際、developmentproductionというディレクトリを作成して、そこにseedファイルを格納すると、環境毎に読み込むseedファイルを切り替える事が可能です。

データの更新したく無い場合

一度初期データを作成した後に、再読み込みしたく無い場合は、seed_onceを利用します

Point.seed_once(:x, :y) do |s|
  s.x = 4
  s.y = 7
  s.name = "Home"
end

Capistranoの自動デプロイと一緒に読み込む

config/deploy.rbに下記を記述すれば、Capistranoで本番環境にデプロイした時に、同時に初期データを投入する事も可能です。

require 'seed-fu/capistrano'

# Trigger the task after update_code
after 'deploy:update_code', 'db:seed_fu'

参考情報

GitHub - mbleigh/seed-fu: Advanced seed data handling for Rails, combining the best practices of several methods together.

seed-fu を使い、Rails上で使うデータを設定する話 - Qiita

railsで初期データを入れる(seed-fuの使い方) - Qiita

Railsでseed-fuを使って初期データを作ろう! - bagelee(ベーグリー)

[Rails] seed-fu を使って初期データを作成する | DevelopersIO

seed-fuで始める効率的なRails Seed管理【Rails 4 x Ruby 2.1】 | 酒と涙とRubyとRailsと