【Rails】マイグレーションファイルの削除


マイグレーションの削除まで

チーム開発をしていた時に調べて残していたのでついでにQiitaにも残しておきます。
ちなみにロールバックは使いません。

まず今のマイグレーションファイルの状態を確認する

これめっちゃ大事です。これを確認しないと削除するファイルがどれか、削除できる状態かなどがわかりません。(どっかにあるかも)

bundle exec rake db:migrate:status

これを打ち込んだら確認できます。
その結果が↓

これからこの一番したの20200409150025_create_as.rbを使って削除していきます。

ステータスの確認

一番左のステータスがマイグレーションファイルを削除できるかわかる目印なんでここをまず見ましょう。
今upとなっているのは

rails db:migrate

のコマンドを打ったためです。つまり適用されていますよという合図です。
適用されているのを削除するのはコンピュータ君が許さないのでupの反対、つまりdownにしてあげないといけないです。

bundle exec rake db:migrate:down VERSION=20200409150025_create_as.rb

これでdownになったはずです。ならない方は番号があっているか誤字がないか確認してみてください。

この通りステータスがupからdownに変わったのでマイグレーションファイルはコンピュータ君の元を去っていきいつでも削除できるようになりました。

あとは削除するだけ

もうここまできたら後1行コマンドを打つだけでマイグレーションファイルは消え去ります。

rm -rf db/migrate/20200409150025_create_as.rb

これで

消えました。
いやー余裕ですね。
ただマイグレーションファイルがこの形でない時があります。それは...?

NO FILEのマイグレーションの削除

これを調べる前のデータベース確認したら色んな所にNO FILEがありました。どんだけ直で消してんねん...
これの何が悪いのかというと、消したつもりでもファイル自体はコンピュータ君の元から去っていないでのまだコンピュータ君の所有物なんです。
同じカラム名があるとファイルを作っている途中でエラーが出て作れなくなっちゃいます。
例えで言うなら同じ名前の人はいるけどみんなそれぞれ違うよね?十人十色ですよね。そんな感じです。
さらにNO FILE、顔が隠れているので見た目で判断できません。
ではここからNO FILEを削除するにはどうすればいいのか...

マイグレーションファイルの復活

さっき消した続きでまた同じファイル名のマイグレーションファイルを作りました。

時間がさっき消したやつより遅いので数字がちょっと変わってます。
これをわざとupの状態で消します。

これでNO FILEになりました。
問題はここからで初めてみた時は何これ?となって放置しました。まぁ特に問題は無かったんで良かったんですがなるべく消すようにしましょう。(見た目的にもいいので)
ここでNO FILEでもupからdownにすればいいじゃんと思う方もいるかもしれません。私はそうでした。ではdownにしてみましょう。

そんなやつ知らんと突き返されました。これじゃダメなんです。ちゃんと身元を証明してあげないとコンピュータ君はわかってくれないみたいです。
では削除するための準備をします。
まず、この名前がダメなんです。わかりやすい名前をつけてあげます。そのためにはtouchコマンドを使います。

touch db/migrate/20200409152409_hoge.rb

これで中身のないhogeファイルが出来ました。

これでコンピュータ君はちゃんと認識してくれます。
よしこれであとはdownに変えて削除すれば問題解決だ!

中身がないぞと言われます。はい。
なら中身書いてやんよと言うことで

20200409152409_hoge.rb
class Hoge < ActiveRecord::Migration[5.0]
  def change
  end
end

Migrationの横の数字で文句を言われるかもしれませんが何個か候補が上がるのでそれを入力すれば大丈夫です。

これで少し中身のあるマイグレーションファイルが出来ました。ただまだちゃんと適用されていないでの

rails db:migrate

とやってあげましょう。

名前も中身も揃ったマイグレーションファイルを削除

ここまでくれば手順通りに削除してあげれば消えます。

bundle exec rake db:migrate:down VERSION=20200409152409_Hoge.rb


からの

rm -rf db/migrate/20200409152409_Hoge.rb

で、削除完了です。

最後に

ここまで長くなりましたがどうでしたか。どうすればいいか分からない方の力になれたのであれば幸いです。
他にもいろいろなやり方があると思うので自分で検索してみてください
また間違っているところがあればご教授お願いします。
ありがとうございました。また別の記事で。