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

f:id:ryoutaku_jo:20190521213705p:plain

【結論】

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と

《今日の学習進捗(3年以内に10000時間に向けて)》

別プロジェクトのインフラ構成について、担当者の方からレクチャーして貰ったが、知らないツールが多過ぎて理解が追い付かなかった。インフラ周りは、クラウドであればAWSGCPがあって、AWSの中でも無数にサービスがあり、WebサーバーもNginxやpumaなど複数選択肢があり、更に自動デプロイのツールや監視サービスも含めると、網羅すべき範囲が非常に広大で、全てを把握するには、かなり時間を要すると感じている。まずは、どういった種類のツールやサービスがあって、それらの概要程度は理解しておきたい。また、TCP/IPなど知識を身に付けて、ツールやサービスの特徴をスムーズに理解できる土台を固めて行きたい。

学習開始からの期間 :165日
今日までの合計時間:1599h
一日あたりの平均学習時間:9.7h
今日までに到達すべき目標時間:1507h
目標との解離:92h
「10,000時間」まで、

残り・・・「8401時間!」