railsで難しいのがmigrateの修正や取り消しです。
コントローラーやビューの取り消しなら、ファイルを削除したりコードを書き換えるだけで良いのですが、migrateで不要なデータテーブル、カラム追加してしまった場合は単純にファイルを削除したりコードを書き換えても取り消すことはできません。
migrateの取り消しで苦労している人も多いと思いますので、今回はできるだけわかりやすく、画像付きでmigrateの取り消しについてまとめておこうと思います。
この記事の内容
- カラム名を間違えた場合の修正方法
- 不要なテーブルを作成してしまった場合の取り消し方法
- 2回以上前のmigrateを取り消す方法
直前のmigrateの取り消し カラム名を間違えた場合の修正方法
migrateの取り消しで重要なのが次の2つのファイルです。
- 「db > migrate」フォルダ内のファイル
- 「db」フォルダ内の「schema.rb」ファイル
まずは下の手順1、2でファイルを確認しましょう。
手順1.「db > migrate」フォルダ内のファイル確認
(上の画像ではusersテーブルにadminカラムを追加しています)
1回前に行ったmigrate(取り消したいmigrate)の設定ファイルがどこにあるのか確認しましょう。
migrateを行うとrailsアプリの「db」フォルダ内にmigrateが行われた日付の書かれたファイルが作成されます。
最新の日付のファイルが1回前に行われたmigrateです。
ここの段階では、ファイルを確認するだけで大丈夫です。
次の手順へ進みましょう。
手順2. schema.rb ファイルのコードを確認する
railsアプリの「db」フォルダ内に「schema.rb」ファイルがあります。
このファイルのコード最下部を確認しましょう。
一番最後に実行されたmigrateが記述されています。
手順1で確認したファイルと同じ内容が最下部に書かれているはずです。
手順3. $ rails db:rollback
ターミナルで「$ rails db:rollback」コマンドを入力します。
このrollbackを行うと1回前に行ったmigrateを取り消すことができます。
ただ、rollbackを行っても完全に1回前の状態に戻っている訳ではありません。
手順2で確認した「schema.rb」ファイルの最下部のコードだけ1回前の状態に戻ります(最下部のコードが消える)。
手順1で確認した「migrate」フォルダ内のファイルは何も変わりません。
(この状態で「rake db:migrate」を行うとrollbackを行う前の状態に逆戻りしてしまいます)
手順4. カラム名や設定を修正する
(上の画像では手順1でadminカラムだったものをnicknameカラムに変更してる)
手順1で確認した、「db > migrate」フォルダ内の日付の書かれたファイルを修正します。
カラム名だけでなく、booleanやuniqueといった設定も修正することが可能です。
5. migrateを行う
修正が終わったら「$ rake db:migrate」を行いましょう。
これで正しいカラム名に修正されます。
直前のmigrateで不要なテーブルを作成してしまった場合の取り消し方法
修正ではなく、間違えて作成してしまったテーブルを完全に削除したい場合があると思います。
テーブル作成を取り消す場合もカラム名の修正を行う場合と手順はほとんど変わりませんので、安心して下さい。
カラム名修正の手順1~3と同じ
- 「db > migrate」フォルダ内のファイル確認
- schema.rb ファイルのコードを確認する
- $ rails db:rollback
1~3の手順は上で説明したカラム名の修正手順1~3と全く同じですが、ここから読まれる方もいると思うので再度解説していきます。
手順1.「db > migrate」フォルダ内のファイル確認
(上の画像ではusersテーブルにadminカラムを追加しています)
1回前に行ったmigrate(取り消したいmigrate)の設定ファイルがどこにあるのか確認しましょう。
migrateを行うとrailsアプリの「db」フォルダ内にmigrateが行われた日付の書かれたファイルが作成されます。
最新の日付のファイルが1回前に行われたmigrateです。
ここの段階では、ファイルを確認するだけで大丈夫です。
次の手順へ進みましょう。
手順2. schema.rb ファイルのコードを確認する
(上の画像ではusersテーブルにadminカラムを追加した場合の例)
railsアプリの「db」フォルダ内に「schema.rb」ファイルがあります。
このファイルのコード最下部を確認しましょう。
一番最後に実行されたmigrate(削除したいテーブルを作成するコード)が記述されています。
手順1で確認したファイルと同じ内容が最下部に書かれているはずです。
手順3. $ rails db:rollback
ターミナルで「$ rails db:rollback」コマンドを入力します。
このrollbackを行うと1回前に行ったmigrateを取り消すことができます。
ただ、rollbackを行っても完全に1回前の状態に戻っている訳ではありません。
手順2で確認した「schema.rb」ファイルの最下部のコードだけ1回前の状態に戻ります(最下部のコードが消える)。
手順1で確認した「migrate」フォルダ内のファイルは何も変わりません。
(この状態で「rake db:migrate」を行うとrollbackを行う前の状態に逆戻りしてしまいます)
手順4. 「db > migrate」フォルダ内の最新の日付が書かれているファイルを削除
「db > migrate」フォルダ内の日付の書かれているファイルで、不要なテーブルを作成するコードが書かれているファイルを削除します。(手順3で確認した、schema.rbファイルの最下部の消えた部分と同じ内容が書かれているもの)
この時、「schema.rb」ファイルは絶対に削除してはいけません。
5. migrateを行う
削除が終わったら「$ rake db:migrate」を行いましょう。
これで不要なテーブルが削除されます。
2回以上前のmigrateを修正、取り消す方法
「$ rails db:rollback」は、実行した回数分だけ「schema.rb」ファイルのコードがmigrate前の状態に戻っていきます。
2回前のmigrateを修正(削除)したい場合は、「$ rails db:rollback」を2回行い、「db > migrate」フォルダ内の日付の書かれたファイルの2回前の修正(削除)したい記述のあるものを修正(削除)しましょう。
その後、「$ rake db:migrate」を行えば2回前のmigrateだけが修正されます。
3回前、4回前のmigrateの修正(削除)も同様の手順で行えます。
この時も、「schema.rb」ファイルは直接書き換えたり削除してはいけません。
まとめ
migrateの修正、取り消しは複雑な手順が必要なので厄介だとは思いますが、railsを使う上で避けては通れないところなので、しっかり覚えておきましょう。
以上「railsのmigrateを取り消す・削除する方法!画像付き解説」でした。