マイグレーションファイルを修正する際にredoを使うことが便利すぎる件について

## 今までのやり方
今までは、一度そのファイルをrail db:rollbakやrails db:migration:downを使ってステータスのdownを確認したのちにマイグレーションファイルに変更を加えて再度rails db:migrateでupさせてschemaに反映させていた。
例えば新しくusersテーブルにaddressというカラムを追加する時は以下のような手順でやっていた
#### 1.`rails db:migrate:status`でdownしたいマイグレーションファイルの状況を確認する
```
Status   Migration ID    Migration Name
--------------------------------------------------
   up     20230815080323  Create tasks
   up     20230817012833  Add expiry date to tasks
   up     20230817014502  Remove expiry date from tasks
   up     20230817023012  Add expired at to tasks
   up     20230817062638  Add status to tasks
   up     20230819041152  Add priority to tasks
   up     20230819144335  Add index tasksnot started yet
   up     20230819144533  Remove not started yet to tasks
   up     20230819144709  Add index tasks not started yet
   up     20230821020042  Create users
```

#### 2.今回はusersテーブルにaddressカラムを追加したいので一番下のCreate usersをdownにする必要があるため`rails db:rollback`を実行する
rollback後のstatusは以下の通り
```
 Status   Migration ID    Migration Name
--------------------------------------------------
   up     20230815080323  Create tasks
   up     20230817012833  Add expiry date to tasks
   up     20230817014502  Remove expiry date from tasks
   up     20230817023012  Add expired at to tasks
   up     20230817062638  Add status to tasks
   up     20230819041152  Add priority to tasks
   up     20230819144335  Add index tasksnot started yet
   up     20230819144533  Remove not started yet to tasks
   up     20230819144709  Add index tasks not started yet
  down    20230821020042  Create users
```
Create usersがdownになっていることがわかる

### 3.downした、マイグレーションファイルに直接書き込みaddressカラムを追加する
```
class CreateUsers < ActiveRecord::Migration[6.1]
  def change
    create_table :users do |t|
      t.string :name
      t.string :email
      t.string :password_digest
      t.string :address # 追加
      t.timestamps
    end
  end
end
```

#### 4.`rails db:migrate`を実行してupさせるとともに、schemaにも反映させる
schemaは以下の通り
```
create_table "users", force: :cascade do |t|
    t.string "name"
    t.string "email"
    t.string "password_digest"
    t.string "address"
    t.datetime "created_at", precision: 6, null: false
    t.datetime "updated_at", precision: 6, null: false
  end
```

## redoを使ってaddressカラムを追加する手順は以下の通り
#### 1.マイグレーションファイルがup状態であることを確認する
```
Status   Migration ID    Migration Name
--------------------------------------------------
   up     20230815080323  Create tasks
   up     20230817012833  Add expiry date to tasks
   up     20230817014502  Remove expiry date from tasks
   up     20230817023012  Add expired at to tasks
   up     20230817062638  Add status to tasks
   up     20230819041152  Add priority to tasks
   up     20230819144335  Add index tasksnot started yet
   up     20230819144533  Remove not started yet to tasks
   up     20230819144709  Add index tasks not started yet
   up     20230821020042  Create users
```
#### 2.up状態のままusersのマイグレーションファイルを表示する
```
class CreateUsers < ActiveRecord::Migration[6.1]
  def change
    create_table :users do |t|
      t.string :name
      t.string :email
      t.string :password_digest

      t.timestamps
    end
  end
end
```
#### 3.このマイグレーションファイルに直接addressカラム追加に必要な情報を書き込む
```
class CreateUsers < ActiveRecord::Migration[6.1]
  def change
    create_table :users do |t|
      t.string :name
      t.string :email
      t.string :password_digest
      t.string :address #addressカラムを追加
      t.timestamps
    end
  end
end
```

#### 4.`rails db:migrate:redo`を実行し、schemaファイルを確認する
```
create_table "users", force: :cascade do |t|
    t.string "name"
    t.string "email"
    t.string "password_digest"
    t.string "address"
    t.datetime "created_at", precision: 6, null: false
    t.datetime "updated_at", precision: 6, null: false
  end
```

上記のようにaddressカラムがusersテーブルに反映されていることが確認できる

## まとめ
redoを使うことでいちいちマイグレーションファイルを生成したり、既存のマイグレーションファイルのステータスををdownにしたりせずに<font color = red>マイグレーションファイルがupの状態でもredoを使うことでカラムの追加や、削除、カラム名の修正ができる。</font>また、VERSIONを指定してあげることで、前に作ったマイグレーションファイルも追加、削除、編集ができる

## 注意
<font color = red>リレーションで紐付けられたテーブルをredoを使って編集した場合はエラーが出る</font>ので、その時は新たにマイグレーションファイルを作成すること