はじめに
業務の中で既存のテーブルに対して、カラムの追加が必要なタスクがあったので色々調べて得た情報をまとめてみました。
手順1 マイグレーションファイルの作成
テーブのを作成や編集を行うにはマイグレーションファイルを作成する必要があります。
マイグレーション作成コマンドは以下になります。
補足) 業務のアプリケーションはdockerのコンテナ上で動作していたのでコンテナ上でrailsコマンドを実行する必要がありました。
$ rails generate migration Addカラム名Toテーブル名 カラム名:データ型
実際のコマンドだと...
rails generate migration AddIntroductionToProfile
みたいな感じになるかなと思います。
上記コマンドを実行するとdb/migrete
の配下に20221222_add_introdunction_to_profile.rb
みたいなファイルが生成されているはずです。
手順2 マイグレーションファイルの中身を確認
class AddIntroductionToProfile < ActiveRecord::Migration
def change
add_column :profile, :introduction, :string
end
end
手順3 マイグレーションを実行
$ rails db:migrate
手順4 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
が反映されていない状態に戻りました。
マイグレーションファイルを修正
今回はカラムの順番を変える必要があるので
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 | |
+--------------+--------------+------+-----+---------+----------------+
ちゃんと順番が変わりました!
#終わりに
拙い文章ですが読んでくださった方、ありがとうございました。どなたかのお役に立てれば幸いです。
そして先輩エンジニアの方々、間違い等ありましたら優しく指摘くださると嬉しいです。
今後も学んだこと気づいたことを挙げていければと思います!!
参考