🍣

【Rails】マイグレーション up,downとchangeて結局何が違うのか。

2023/03/22に公開

前提知識

マイグレーションファイルはデータベースのバージョン管理をしてくれるものです。
1つのマイグレーションを適用することでデータベースのバージョンを1つあげることができ、適用済のマイグレーションを1つ取り消すことでバージョンを1つ下げることができます。
バージョンの上げ下げ(適用、適用を取り消す)について理解した上で記述します。

change

以下のマイグレーションファイルでは、changeというメソッドの中でusersテーブルを作成しています。
このファイルでは、changeメソッド内でバージョンをあげる時のコードだけが書かれているように見えますが、
こちらはバージョンを下げる処理も適切に行なってくれるようになります。

class CreateUsers < ActiveRecord::Migration[5.2]
  def change
    create_table :users do |t|
      t.string :name

      t.timestamps
    end
  end
end

つまりchangeはロールバック等をしたときに自動でバージョンの上げ下げを適用してくれます。

up・down

一方、up・downではメソッド名通り、バージョンのupかdownのどちらかしか処理を行ってくれません。

class ChangeUsersNickname < ActiveRecord::Migration[5.2]
 def up
  change_column :users, :name, :string, limit: 30
 end

 def down
  change_column :users, :name, :string
 end
end

まとめ

普段から何がなされているのか?を意識してないと、upだけ書かれたマイグレーションファイルを書いて、コードレビュー時に恥ずかしい思いをしますので、お気をつけください!

Discussion