無駄かもしれない足掻き

github : https://github.com/zer0-u

初期データをどう管理するか問題

てにみゅさーち、少しずつデータを拡充してます。

その過程でどうしたらいいのかなーって問題が2つ挙がったのでなんかアドバイスがあればなぁと思って記事を書いています。

問題その1 肥大するseed.rb問題

てにみゅさーちは検索機能を提供するサービスなので、元となるデータがたくさんないと意味がない。で、今のところ3環境(本番・テスト用*1・ローカル上)あるのでそれぞれでデータを同じように持っていたい。初期データを用意するのはseed.rbを使うと便利だと学んだし、rails db:seed でデータをざくっと入れてくれるのはとても便利なのでそこに追記しているのだが、結構無理が出始めていて困っている。

問題だと感じているのは以下の3つ

  • 単純に行数が増える
    • データが増えれば行数が増える。なのでだんだんスクロールがつらくなってくる
  • カテゴリごとに分けるのがめんどくさいが分けないと読みづらい
    • キャラクターとか、公演情報とか、まぁざっくりいうとテーブルごとに分類したほうが読みやすいのはわかるんだけど結構めんどくさい
  • いちいち適用済をコメントアウトしないといけない
    • rails db:migrate は適用済のものを避けてくれるけれど、 rails db:seed にはそんな便利機能はない
    • だから適用済は削除なりコメントアウトなりで避けておかないと二重データができてしまう
    • これが結構めんどくさい(のでカテゴリごとに分ける手間がさらにかかる)

seed.rbに追加するのは初期データのみにしろというのはわかるけれど、3環境にデータをサクサク追加していくには今のところこれ以上の案が出てこない。やりたいのは以下2つだから、それになんかちょうどいい感じのソリューション*2があれば教えてほしい。

  • 3環境(heroku上に2つ・ローカルに1つ)それぞれにさくっと(コマンド1つくらいで)大量データを追加できる
  • 適用済やカテゴリ(テーブル)での分類が簡単にできる

問題その2 相関テーブルの作り方を間違えたような気がする

出演情報や公演情報は多対多の関係が出てくる。1人のキャストが2人のキャラクター(双子らしい)を演じることがあるし、1人のキャストは複数の公演に出ているし。なので相関テーブルを用意した。が、その作り方が雑だったような気がしてきた。

参考にしたのは以下のサイト

ruby-rails.hatenadiary.com

この方法がいいとか悪いとかではなく、この方法で作った相関テーブルに初期データを追加するとなると結構大変である。 IDで連携してるみたいなので、seed.rb でもXXX_id と指定する。これがまた結構めんどくさくて、IDを特定するのはまだしも、うっかり二重データを作ってID用の整数値が進んでしまったりしてデータを作り直さなければならないとしんどい。追加方法を変えれば改善するかもしれないが、もうちょっとデータをコントロールできるような方法はないだろうか…。

こんな感じで悩んでいるので何かアドバイスがあれば教えてほしい。

*1:heroku上にある

*2:言ってみたかった