seeds.rbをスッキリさせる3つのポイント

こんにちは、インターンの@ij_spitzです。

インターファームで開発を始めて約2週間が過ぎ、
だんだん会社にもRailsにも慣れてきました。
Railsには複数人で開発する上で、
便利な機能が数多く用意されており、seedもそのひとつです。

seedとは、データを挿入するRubyスクリプトのことで
これを使うことによって、データを挿入する際に
コマンドひとつで実行することができるようになります。

複数のデータを挿入するため、ファイルが長くなりがちなseeds.rbですが、
今日はそれをスッキリさせるポイントを3つご紹介したいと思います。


1. 配列にして一気にデータを挿入する

こちらが僕が最初に書いていたseeds.rbの一部です。

user = Lang.create(:lang => "日本語")
user = Lang.create(:lang => "英語")
user = Lang.create(:lang => "フランス語")

何度もcreateをしていて、かなり見づらいですね。
配列にして一気にデータを渡すと次のようになります。

user = Lang.create([
  {:lang => "日本語"},
  {:lang => "英語"},
  {:lang => "フランス語"}
])

これだけでも割と見やすくなった気がします。
可能ならば、each文などのループを使って実行するのも手だと思います。

2. Truncateしてデータを初期化する

これはあまり見やすさとは関係ないですが、やっておくと便利です。
auto_incrementの自動採番も同時にリセットしてデータを消去してくれます。

これを知らなかったために、いちいちDBに入って
データを消して、自動採番をリセットしていました。笑

Lang.connection.execute("TRUNCATE TABLE langs;")

3. seedファイルを複数に分ける

これが1番実践的な方法かつ需要があると思います。
開発が進むにつれて、データが多くなってファイルが長くなってしまうので、
テーブルごとにseedファイルを分けるとよいでしょう。

まずは前準備としてdb/seeds/というディレクトリを作り、
そのディレクトリの中にテーブルごとのseedファイルを作成します。
名前はなんでもいいので、{table名}.rbにしておくといいでしょう。

最後に以下のようにdb/seeds.rbを編集すればOKです。

Dir.glob(File.join(Rails.root, 'db', 'seeds', '*.rb')) do |file|
  load(file)
end

ソースを見ればわかるとおり、
seeds.rbでディレクトリに分割したファイルを読み込んでいるだけです。
これらのポイントを行えば、かなり見やすいseedファイルになるはずです。

やはり個人での開発よりもチームで開発した方が
いろんな気付きがあるなと感じた1日でした。
以上インターンの@ij_spitzでしたー