マイグレーションとは?
マイグレーション(migration)とは辞書では「移行」の意味を持つ
ざっくりいうと「SQLなしでデータベースにテーブルを作成する機能」のこと。
作り方
ターミナルでコマンドを打つと作成できる
# モデルと同時に生成
$ rails g model User
モデルと同時に生成される複数ファイルのうちのひとつにマイグレーションが入っている。
# 単体で生成
$rails g migration create_user name:string email:string gender:integer
マイグレーションのみを生成する際には、ファイル名の後ろに[カラム名:データ型]を指定することで生成前に
テーブルを指定しておくことが可能。
基本の形
class CreateUsers < ActiveRecord::Migration[6.1]
def change
create_table :users do |t|
t.string :name
t.string :email
t.integer :gender
t.timestamps
end
end
end
解説
"t.データ型 :カラム名"という形で記述していく。
実行方法
以下のコマンドをターミナルで実行することで、テーブルが生成される。
$ rails db:migrate
また、実行時に自動で3つのカラム(id, created_at, updated_at)も生成される。
マイグレーションファイルは一度実行すると次回のrails db:migrateでは実行されなくなる。
なので実行後に追加でカラムが必要になった場合は、加筆するのではなく新しくマイグレーションファイルを作るのが有効。
*もちろん加筆した上で"rails db:migrate:reset"をやるのもOKだが、注意は必要。
マイグレーション名は以下の形式にすることで、適切な記述のマイグレーションが作成される。
・マイグレーション名を"AddColumnToTable"や"RemoveColumnFromTabel"である
・後ろにカラム名やデータ型が続く
$ rails g migration AddAgeToUsers age:integer
class AddAgesToUsers < ActiveRecord::Migration[6.1]
def change
add_column :users, :age, :integer
end
end
上記マイグレーションファイルを作成したあとにrails db:migrateでageカラムを追加してくれる
$ rails g migration RemoveGenderFromUsers gender:integer
class AddColumnGenders < ActiveRecord::Migration[6.1]
def change
remove_column :users, :gender, :integer
end
end
上記マイグレーションファイルを作成したあとにrails db:migrateでgenderカラムを削除してくれる
rails db:migrate:resetでテーブルを再作成することもできるが、
チーム開発等では変更が加えられていないか十分に注意が必要。
その他
◯マイグレーションファイルを1つのバージョンだけ実行したい場合
1.以下でmigrationのステータスを確認
$ bundle exec rake db:migrate:status
2.表示されるMigration IDをコピー
3.以下のコマンドでバージョンを指定して実行
$ rails db:migrate VERSION=[Migration ID]
ーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーー
◯changeメソッドの代わりに使うup/downや外部キーadd_foreign_keyもアウトプットしたかったが後日更新予定。
参考
・Railsガイド
・Rails初心者がつまずきやすい「マイグレーション」