Railsでは change_column_default を使うことで、カラムのデフォルト値を変更することができます。
ただし、マイグレーションを記述する際に少し注意が必要な点があります。それはロールバック時の挙動です。
今回は、実際の書き方とあわせて、書き方次第では rollback できなくなる可能性があるという点について解説します。
基本の書き方
まず、Railsのマイグレーションでカラムのデフォルト値を変更する基本的な書き方はこちらです。
class ChangeDefaultToPublishedOnArticles < ActiveRecord::Migration[7.0]
def change
change_column_default :articles, :published, from: false, to: true
end
end
このように from:
と to:
を明示的に指定することで、マイグレーションの内容が明確になります。
※ :articles
:これはテーブル名で、ブログ記事などを管理するためのテーブルを想定しています。
※ :published
:これはカラム名で、記事が公開されているかどうかを示すブール値(true または false)のカラムを想定しています。
rollbackができなくなる例
一方、from:
と to:
を指定せずに書いてしまうと、以下のようになります。
class ChangeDefaultToPublishedOnArticles < ActiveRecord::Migration[7.0]
def change
change_column_default :articles, :published, true
end
end
この書き方でも db:migrate は正常に通りますが、db:rollback ができません。
なぜなら、change メソッドは reversible(可逆的)なマイグレーションを自動的に生成しますが、from / to を指定しない場合、元のデフォルト値が何だったかRails側で把握できないため、元に戻す処理が自動生成できないのです。
まとめ
-
change_column_default を使ってカラムのデフォルト値を変更できる
-
from: と to: を省略すると rollback できない可能性がある
これらのポイントを意識することで、マイグレーションの可逆性が保たれ、より安全な開発が可能となります。