70
43

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

rails db:reset、rails db:migrate:reset、rails db:setupの違い

Last updated at Posted at 2020-02-15

rails db:reset、rails db:migrate:reset、rails db:setupの違いをたまにどれがどれだったか忘れるので、まとめておきます。

rails db:reset

  • rails db:reset の場合は、新しくテーブルを作り直して、さらにシードファイルも読み込んでダミーデータも作ってくれる。新しくテーブルを作り直すので、既存のデータは全て消えて新たにシードファイルを元に作り直す。
Dropped database 'hogehoge_development'
Dropped database 'hogehoge_test'
Created database 'hogehoge_development'
Created database 'hogehoge_test'
  • rails db:reset はマイグレーションファイルを編集しても、その内容は反映されない。マイグレーションを実行しない。スキーマファイル ( db/schema.rb ) だけを利用する。

rails db:migrate:reset

  • 新たにテーブルを作り直すので、テーブルのデータはもちろん全部消える。※ここは、$ rails db:resetと同じ
Dropped database 'hogehoge_development'
Dropped database 'hogehoge_test'
Created database 'hogehoge_development'
Created database 'hogehoge_test'
  • db/migrate/hoge.rbの、マイグレーションも実行。DB をdrop した後、通常通りのマイグレート(db:migrate)が行われる。つまり、db/migrate/hoge.rb が古い順から全て実行される。

  • シードファイルは読み込まないので、新しいダミーデータは生成されない。($ raild db:seedは自分で実行する必要がある)

rails db:setup

  • アプリケーションのDB周りの初期設定をしてくれる。以下3つのコマンドを実行してくれる
  1. $ rails db:create
  2. $ rails db:schema:load
  3. $ rails db:seed

余談(現場での運用)

現場では開発者が複数人いるので、テーブルに変更を加える際は、既存のマイグレーションファイルに変更を加えないようにするのが鉄則です。

【理由】
既存のマイグレーションファイルに変更を加えると、共同開発などをしている際に、共同開発しているメンバーも$ rails db:migrate:reset しないといけなくなる

【ベストプラクティス】
新しいマイグレーションファイルを作成し、テーブルに変更を加える

このような対応をすると、共同開発しているメンバーは$ rails db:migrate するだけで良くなります!
ただ、開発環境なら共同開発してるメンバーに$ rails db:migrate:reset してくださいと周知すれば済むので、その対応でも良いですが、本番環境で$ rails db:migrate:reset$ rails db:resetをすると、DBの値が全部吹き飛び、大事故になるため、ご注意を。

70
43
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
70
43

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?