Rails カラム追加とロールバック

# はじめに
業務の中で既存のテーブルに対して、カラムの追加が必要なタスクがあったので色々調べて得た情報をまとめてみました。

# 手順1　マイグレーションファイルの作成
テーブのを作成や編集を行うにはマイグレーションファイルを作成する必要があります。

マイグレーション作成コマンドは以下になります。

補足) 業務のアプリケーションはdockerのコンテナ上で動作していたのでコンテナ上でrailsコマンドを実行する必要がありました。

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

実際のコマンドだと...
```
rails generate migration AddIntroductionToProfile
```
みたいな感じになるかなと思います。

上記コマンドを実行すると``` db/migrete ```の配下に``` 20221222_add_introdunction_to_profile.rb ```みたいなファイルが生成されているはずです。

# 手順２ マイグレーションファイルの中身を確認

```ruby:20221222_add_introdunction_to_profile.rb
class AddIntroductionToProfile < ActiveRecord::Migration
  def change
    add_column :profile, :introduction, :string
  end
end
```
# 手順3 マイグレーションを実行
```
$ rails db:migrate
```

# 手順４　DBを確認
```
$ show columns from profile;

+--------------+--------------+------+-----+---------+----------------+
| Field        | Type         | Null | Key | Default | Extra          |
+--------------+--------------+------+-----+---------+----------------+
| id           | bigint(20)   | NO   | PRI | NULL    | auto_increment |
| user_id      | bigint(20)   | YES  | MUL | NULL    |                |
| created_at   | datetime     | NO   |     | NULL    |                |
| updated_at   | datetime     | NO   |     | NULL    |                |
| introduction | varchar(255) | YES  |     | NULL    |                |
+--------------+--------------+------+-----+---------+----------------+
```
カラムが追加されている、、、!

これにてカラム追加自体は完了なのですが、その後先輩からレビューいただいた際に``` created_at ```と``` updated_at ```の後ろに来るのは如何なのものかと指摘いただきまして、ロールバックをし再度カラムを追加することになりました。

# 現在のマイグレーションのバージョンを確認
```
$ rails db:version
Current version: 20221223214835
```
先ほど実行したものが出てきます。

# ロールバックを実行
以下のコマンドでマイグレーションのバージョンを1個戻すことができます。
```
$ rails db:rollback
```

これで先ほど生成した``` 20221222_add_introdunction_to_profile.rb ```が反映されていない状態に戻りました。

 # マイグレーションファイルを修正
今回はカラムの順番を変える必要があるので

```ruby:20221222_add_introdunction_to_profile.rb
class AddIntroductionToProfile < ActiveRecord::Migration
  def change
    add_column :profile, :introduction, :string, after: :user_id
  end
end
```

今回の場合``` update_at ```よりも順番を上にしたかったので``` after: :user_id ```を追加しました。

その後マイグレーションを実行すると
```
$ show columns from profile;

+--------------+--------------+------+-----+---------+----------------+
| Field        | Type         | Null | Key | Default | Extra          |
+--------------+--------------+------+-----+---------+----------------+
| id           | bigint(20)   | NO   | PRI | NULL    | auto_increment |
| user_id      | bigint(20)   | YES  | MUL | NULL    |                |
| introduction | varchar(255) | YES  |     | NULL    |                |
| created_at   | datetime     | NO   |     | NULL    |                |
| updated_at   | datetime     | NO   |     | NULL    |                |
+--------------+--------------+------+-----+---------+----------------+
```

ちゃんと順番が変わりました！


#終わりに
拙い文章ですが読んでくださった方、ありがとうございました。どなたかのお役に立てれば幸いです。
そして先輩エンジニアの方々、間違い等ありましたら優しく指摘くださると嬉しいです。
今後も学んだこと気づいたことを挙げていければと思います！！


# 参考
https://railsguides.jp/active_record_migrations.html

https://qiita.com/akira-hamada/items/91c5589e52e247ba8b8b

https://qiita.com/s_tatsuki/items/3e1f119c91e21b8f0c33

https://qiita.com/takupang/items/c2ab1116b6bec32a5936