マイグレーションファイルのカラムを削除するには


今回はマイグレーションファイルを作成した後に、「あれ?このカラム使わないな、」と思った時にカラムを削除する方法を紹介したいと思います。

1. 仮のマイグレーションファイルを作成する

マイグレーションファイルを作る際のコマンド

rails generate migration Add(カラム名)To(テーブル名) (カラム名):データ型

 筆者の例として

usersテーブルにstring型のnameカラムとimageカラムを作成したとします。

rails g migration AddNameToUsers name:string image:string

このコマンドを打つと下記のようなマイグレーションファイルが作成されます。

class AddColumnsToUsers < ActiveRecord::Migration[5.2]
  def change
    add_column :users, :name,  :string
    add_column :users, :image, :string
  end
end

2. カラムの削除

マイグレーションファイルを削除する際のコマンド

rails generate migration Remove(カラム名)To(テーブル名) (カラム名):データ型

とコマンドを打つとカラムを削除するための新たなマイグレーションファイルが作成されます。

開発を進めていく中でimageカラムやっぱりいらないな、と思ったら

rails g migration RemoveNameToUsers image:string

と打つことで

class RemoveColumnsToUsers < ActiveRecord::Migration[5.2]
  def change
    remove_column :users, :image, :string
  end
end

というマイグレーションファイルができます。
この後は

rails db:migrate

と打つことで無事usersテーブルのimageカラムは消えています。スキーマを確認してもらえるとカラムが消えているのが確認しやすいです。

番外編. 間違えて削除のコマンド打ってしまった場合の対処法(筆者の失敗例をもとに)

筆者が実際に削除用のマイグレーションのコマンドを打ち間違えてしまい

rails g migration RemoveNameToUsers

と打ってしまいできてしまったマイグレーションファイルがこちらです↓

class RemoveColumnsToUsers < ActiveRecord::Migration[5.2]
  def change
  end
end

削除用のカラムが記載されていないファイルができてしまいました・
このファイルは削除しないといけません。まずは削除できる状態にあるか確認をします。

bundle exec rake db:migrate:status

このコマンドを打つとstatusがupになっていると思いますがこの状態だと削除することができません。
upをdownに変えてあげて削除できる状態にします。

bundle exec rake db:migrate:down VERSION=MigrationIDから始まるファイル名を入れる

これでいまstatusがdownになっているのであとは

rm -rf db/migrate/MigrationIDから始まるファイル名を入れる

これでマイグレーションファイルの削除が完了したのでこの記事のカラムを削除するマイグレーションファイルを作成するところから初めて行けば大丈夫です。

いかがだったでしょうか?ぜひ参考にしていただけると幸いです!