🐰

Rails の db:seed 時に、json ファイルをインポートしたい

2024/01/30に公開

Ruby on Rails では、データベースに初期データを投入するために使用できる db:seed という機能があります。
seeds.rb にスクリプトを書くことで簡単にテストデータを投入することができるため、開発環境下で便利に使うことができます。

今回は、seeds.rb 上で、json ファイルを読み込んでデータベースへ投入するスクリプトを備忘録として残します。

json について

こんな感じのデータを User モデルとして登録する想定です。
json の配列データです。

sample.json

[
    {
        "uid": "0001",
        "name": "名前",
        "name_ruby": "ナマエ",
        "age": "36",
        "pref": "山形県",
        "pref_code": "06"
    },
    ......略

投入

seeds.rb に下記を追記します。
ファイル読み込み → JSON 形式にデコード → ループで回して DB に投入していく。

seeds.rb

u_json = ActiveSupport::JSON.decode(File.read(
  Rails.root.join("db", "sample.json")
))

u_json.each do |d|
  User.create(
    uid: d["uid"],
    name: d["name"],
    name_ruby: d["name_ruby"],
    age: d["age"],
    pref: d["pref"],
    pref_code: d["pref_code"]
  )
end

さいごに

こんな感じのデータを10万件ほど用意して db:seed したところ、2 時間くらいかかった + 何度かタイムアウトが発生したので、注意。

短くなりましたが、よく使うようになりそうなので残しました。

参考

https://qiita.com/wnoonw/items/009daa7e284238e39ff0

Discussion