【Rails】間違えたマイグレーションファイルをdown,削除できない→rails db:migrate:resetで解決できた

前の記事である、
[【Rails】テーブルにカラムを追加する際、キャメルケース以外で記載したらどうなるの？](https://qiita.com/cherry_2020/items/ddb1107aeb8cbb5790ba)
にて、自分が感じた疑問を素直にコマンドで実行したら、（複数作成した）不要なファイルがdown・削除が出来なくなりました（汗）

今回、たくさんの気づきがありましたので、反省を込めて記事にしようと思います。

#出来ないことと、エラー内容#

**ターミナルにおいて、不要ファイルを削除したいが、削除以前に、down状態にできない（rollbackできない）**

```ruby 
#ターミナルに表示されるエラー
foo@fogefogenoMacBook-Air bar % bundle exec rake db:migrate:down VERSION=20200829125501_Nickname2.rb
rake aborted!
Invalid format of target version: `VERSION=20200829125501_Nickname2.rb`
/Users/fogefoge/.rbenv/versions/2.6.5/bin/bundle:23:in `load'
/Users/fogefoge/.rbenv/versions/2.6.5/bin/bundle:23:in `<main>'
Tasks: TOP => db:migrate:down
(See full trace by running task with --trace)

```


#解決策#

先に解決した方法を載せておきます。
私は現在、プログラミングスクールに通っており、メンターさんに助けていただきました。
（本当に、ありがとうございました。）

1.Railsファイル上で、自分がこうしたいというファイルの状況を作り出す。
①左側で、削除したかったファイルを全て右クリック押して削除
②今回残しておきたい「20200829063700_devise_create_users.rb」のファイル中に、右側９行目にあたる（今回テーブルにカラムとして追加したかった）nicknameを追加して記載。

![20200830VScode.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/696641/ca453d82-7d90-a42e-1824-0f566e7ce6c0.png)


2.ターミナル上で、以下のコマンドを実行する。
　「rails db:migrate:reset」とは、削除して作ってマイグレートしてくれるコマンドだそうです。

```ruby
#ターミナル上で、以下コマンドを実行
foo@fogefogenoMacBook-Air bar % rails db:migrate:reset
```
```ruby
#実行後、表示された内容
Dropped database 'pictweet_development'
Dropped database 'pictweet_test'
Created database 'pictweet_development'
Created database 'pictweet_test'
== 20200825113455 CreateTweets: migrating =====================================
-- create_table(:tweets)
   -> 0.0130s
== 20200825113455 CreateTweets: migrated (0.0131s) ============================

== 20200829063700 DeviseCreateUsers: migrating ================================
-- create_table(:users)
   -> 0.0412s
-- add_index(:users, :email, {:unique=>true})
   -> 0.0603s
-- add_index(:users, :reset_password_token, {:unique=>true})
   -> 0.0429s
== 20200829063700 DeviseCreateUsers: migrated (0.1469s) =======================


```


出来ましたー！！


#そもそも、やらかしたこと#

ここからは、デバック中含め「やらかしてしまったなー」と感じたポイントを書いていきます。

#####やらかしたことその１#####

一つ一つ試さないで（ロールバックしないで）、（興味本位で）不要なマイグレーションファイルを一気に複数作ってしまったこと。

#####やらかしたことその２#####

実験→正常（カリキュラム通り）→実験→実験の順で行ったこと。
rollbackの方法では、手前から差し戻しするんだったと、デバック中に思い出す。
途中に、正常を挟んでしまったため、rollbackで戻すなら「いったん全戻し」かつ「正しいの作り直し」になってしまうことに気づく。

#####やらかしたことその３#####

何も考えず、実験に使った不要マイグレーションファイルを右クリックして、一気に削除したこと。

ふと、削除ってこんな感じでいいんだっけ？そういえばrollbackっていう単語あったけどそれやってないけどいいんだっけ？と疑問に思い調べたところ、
●右クリックでマイグレーションファイルを消すとファイル上は削除されるが、ターミナル上は消えない（Rails内に残ってしまう）
●消したファイルは見えないので、同じファイル名などで今後作成したときバグになりうることがある
という事がわかった、対処し始めた。

#####やらかしたことその４#####

やみくもにデバックしてしまい、（履歴も上手に直さず）、沼に陥ったこと。
特に、「あ、サーバーが起動しているからダメなのかな？」と思ったが、コントロールC（サーバーを落とすショートカットキー）が効かず、ターミナルを×で閉じてしまったこと。コマンド履歴消えた。


#やみくもにデバックしてしまったこと#

ここからは、上記「やらかしてしまったこと」に気づき、やみくもにデバックしてしまったことを書いていきます。

#####やみくもデバック　その１#####
キータで見つけた「NO FILE」の削除方法をやってみよう。
参考にさせていただいた記事
[【Rails】マイグレーションファイルの削除](https://qiita.com/ISSO33/items/33a935cb3255c269bef2)
[Ruby on Rails 『NO FILEのmigrationを削除する方法』](https://qiita.com/sakatan_1/items/9bf321f81d3b84042694)

👉touthして、migrateして、downしようと思ったが、downがうまくいかない。
👉キータで書かれていた通り、touth時に、ファイル名を消した名前ではなく「hoge」名にしたからか？

#####やみくもデバック　その２#####
ファイル名を、「hoge」ではなく、削除した名前に変えてみよう
👉うまくいかない

#####やみくもデバック　その３#####
クラス名がそういえば一致してないや
👉うまくいかない
[クラス名とファイル名が違うからこのエラーでは？と気づけた記事](https://stackoverflow.com/questions/413150/when-i-run-the-rakedb-migrate-command-i-get-an-error-uninitialized-constant-ur)

#####やみくもデバック　その４#####
そういえば、上記１〜３について、手前のファイルではなく、一番古いファイルからコマンド実行していた。
一番古いファイルではなく、手前のファイルからやってみよう。
👉うまくいかない
[手前から直さないといけないことに気づけた記事](https://teratail.com/questions/44538)

#####やみくもデバック　その５#####
そういえば、サーバー立ち上げていたからかな？「コントロールC」のショートカットキーが上手くいかず×で閉じる。
👉うまくいかないし、履歴も消えてしまったし、本当にミスった。

#####やみくもデバック　その６#####
そもそもちゃんとエラー見てなかった。binって書いてある。
大枠のフローが載っている処理っぽい。
クラス名やファイル名が、存在していないよっていうエラーぽいけど、上記を行っても上手くいかない。

以上です。

#まとめ#

調べれば調べるほど、マイグレーションファイルは安易に追加したり、削除したりしてはいけないことを痛感しました。

特にチーム開発の時では、ファイル削除だけだと、他の人が何をしたのか見えないため、バグの原因になってしまうことを学べたのが大きかったです。

また何度も、マイグレーションの状況を確認したり、downさせたいコマンドを打ったりしたので、マイグレーションに対する理解も深まりました。

そして、
●やみくもデバックしてしまうと沼にハマることを痛感
●やみくもデバックしないためにもエラーが起こった時に、いろんな可能性が選択肢として浮かぶレベル
まで成長したいと思いました。

メンターさんには、解決策と温かい言葉をかけていただいて本当に感謝です。

読んでいただいてありがとうございました。