RailsでSeed Fuを使ってマスタデータを管理する方法
はじめに
初学者の私が、マスタデータを扱う必要があるアプリケーションを作る中で、初期データの登録や更新をどう管理すべきか悩んでいました。
Qiitaで「Seed Fu」というgemを見つけ、初めて使ってみたところ非常に便利だったので、学習記録も兼ねて記事にまとめます。
マスタデータは頻繁に更新されない反面、環境構築時に確実に登録されていてほしいデータです。
この記事では、初めてSeed Fuを使ってRailsアプリにデータを安全に・自動で登録するやり方を行ったので記事を残していきます。
なぜSeed Fuを使うのか?
-
rails db:seed
に統合できるらしい -
seed_once
を使えば、既存レコードを上書きせず安全に初期データを登録できるらしい - データを
db/fixtures
に分けて管理でき、見通しが良く保守しやすいらしい - 初学者にもシンプルな記法で扱いやすい
環境
- Ruby 3.x
- Rails 8.0.2
- Seed Fu 2.3.x
1. Seed Fuの導入
Gemfile
に以下を追記します:
gem 'seed-fu'
インストールする
bundle install
2. マスタデータ用のfixture
ファイル作成
まずdb/fixtures
フォルダを作成(なければ)
mkdir db/fixtures
次に、情報を定義するファイルを作成
db/fixtures/departments.rb
Department.seed_once(:id) do |s|
s.id = 1
s.name = 'サッカー'
end
Department.seed_once(:id) do |s|
s.id = 2
s.name = '野球'
end
Department.seed_once(:id) do |s|
s.id = 3
s.name = 'バスケットボール'
end
Department.seed_once(:id) do |s|
s.id = 4
s.name = 'バレーボール'
end
Department.seed_once(:id) do |s|
s.id = 5
s.name = 'テニス'
end
Department.seed_once(:id) do |s|
s.id = 6
s.name = '卓球'
end
Department.seed_once(:id) do |s|
s.id = 7
s.name = 'ラグビー'
end
Department.seed_once(:id) do |s|
s.id = 8
s.name = '柔道'
end
Department.seed_once(:id) do |s|
s.id = 9
s.name = '水泳'
end
Department.seed_once(:id) do |s|
s.id = 10
s.name = '陸上競技'
end
Department.seed_once(:id) do |s|
s.id = 11
s.name = 'スキー'
end
Department.seed_once(:id) do |s|
s.id = 12
s.name = 'スケート'
end
Department.seed_once(:id) do |s|
s.id = 13
s.name = 'ゴルフ'
end
3. db/seeds.rb に追記
# db/seeds.rb
SeedFu.seed
4.データ登録の実行
rails db:seed
出力例
== Seed from db/fixtures/departments.rb
- Department {id: 1, name: "サッカー"}
- Department {id: 2, name: "野球"}
- Department {id: 3, name: "バスケットボール"}
- Department {id: 4, name: "バレーボール"}
- Department {id: 5, name: "テニス"}
- Department {id: 6, name: "卓球"}
- Department {id: 7, name: "ラグビー"}
- Department {id: 8, name: "柔道"}
- Department {id: 9, name: "水泳"}
- Department {id: 10, name: "陸上競技"}
- Department {id: 11, name: "スキー"}
- Department {id: 12, name: "スケート"}
- Department {id: 13, name: "ゴルフ"}
5.DBを確認
rails c
Department.all.pluck(:id, :name)
学び
Seed Fu
を使うことで、初期データの一元管理・環境構築時の自動化・既存レコードの上書き防止が簡単に実現できるそうです。
-
seed_once
を使えば「一度だけ登録」で安全に運用できることを知りました -
db/fixtures
フォルダでデータを管理すれば、見通しがよく、チーム開発でも扱いやすいと知りました -
rails db:seed
に統合できるので、他の開発者とも同じ手順で初期データが扱えると知りました
今回は「スポーツ種目マスタ」の登録で試しましたが、例えば「大会カテゴリ」「トレーニングメニュー一覧」など、他のスポーツ関連のマスタデータにもこの仕組みを展開していくことができそうです。
私のような、マスタデータの扱いに困っているRails初学者にとって勉強になるものでした。
特に「一度だけ登録(seed_once)」「データの見通し管理」「rails db:seed に統合できる」点が、大きな学びになりました。
今後も活用しながら、データ設計や運用の理解を深めていきたいと思います。
初学者のため、間違えていたらすいません。