💥

RailsでDBカラムを削除する手順

2024/07/24に公開

よくある手順ですが忘れがちなので、まとめ直します。

strong_migrations gemのREADMEに書いてあることそのままです。

https://github.com/ankane/strong_migrations

なお、都合3回のリリースが必要になります。

1. 削除対象のカラムを使わなくするリリース

実際にカラム(some_column)を使っている箇所があったら削除します。

さらに、モデルにignored_columnsを追加して、削除予定のカラムがDB上にあったとしても参照しないように宣言します。

 class User < ApplicationRecord
+  self.ignored_columns += ["some_column"]
 end

2. カラムを削除するリリース

以下のようなマイグレーションを作り、実際にカラムを削除します。

class RemoveSomeColumnFromUsers < ActiveRecord::Migration[7.1]
  def change
    remove_column :users, :some_column
  end
end

なお、strong_migrationsを使っている場合は safety_assured で囲みます。

class RemoveSomeColumnFromUsers < ActiveRecord::Migration[7.1]
  def change
    safety_assured { remove_column :users, :some_column }
  end
end

3. ignored_columnsを除去するリリース

ignored_columnsは用済みなので削除します。

 class User < ApplicationRecord
-  self.ignored_columns += ["some_column"]
 end

Discussion